CI/CD Pipeline

Triggers

The pipeline will be executed only for pushes to Pull Requests and for pushes to master.

If the pipeline fails and you think it is not the fault of your code, you can re-execute the pipeline by typing jenkins build please as a comment. If problems persist, please create a new issue with the failing build log.

For users with login credentials for Jenkins, you can manually execute the pipeline for a branch or pull request via the Jenkins UI. Please ask if you need login data.

Succeeding Pushes

If you push to branches:

  • Only the newest commit will be built. It does not matter if commits in between would pass.
  • Builds of older pushes are aborted.
  • Also jenkins build please will abort previous builds and start the build again.
  • The latest MR build job will stay deployed on (https://mr.permaplant.net).
  • The master branch is excluded from these rules.

Stages

Sanity stage

This stage performs rapid checks like pre-commit, migrations and schema building.

Local pre-commit currently does not perform the codespell hook, but it is performed in the pipeline. Cargo fmt, eslint and groovy linting is not performed through pre-commit.

Tests and Build

This is a parallel stage which fails fast (exits if one stage fails) or times out after 2 hours.

It can be subdivided in following categories:

Multiple parallel cargo stages

Standard cargo build, clippy, doc and test is performed here.

One sequential frontend stages

Frontend is built, tested, linted, format checked and additionally package.json version is verified to be up to date. Storybook and typedocs are also generated here.

One sequential mdbook stages

Mdbook is built, tested and links are checked.

Deploy MR

Every pull request will be deployed on a publicly available instance on mr.permaplant.net. Jenkins will acquires a lock before deploying to mr.permaplant.net and release it after finishing the E2E stage. This lock prevents other jobs to overwrite the deployment while we are performing E2E tests.

Since there is only one agent for MRs available, the last built MR wins.

E2E Tests

E2E tests are run on mr.permaplant.net. When a test times out, it is retried up to two times with a five second delay between retries.

Test reports and results can be found in the jobs artifacts.

Failed tests will generate videos and/or screenshots inside e2e/test-results/ in the jobs artifacts, depending on what failed. The videos have to be downloaded to be viewed.

There is always a html report inside e2e/test-reports/ in the jobs artifacts and a cucumber report on a separate page.

Deploy master

The master branch will be automatically deployed to master.permaplant.net.

Deploy Dev

The dev branch will be automatically deployed to dev.permaplant.net.

Deploy Prod

There is a separate Jenkinsfile (/ci/Jenkinsfile.release) for this pipeline, which is only manually executable through Jenkins. It runs only build and deploying stages (no testing).

Production is deployed to www.permaplant.net.

See release.md for the manual release procedure.