Deployment is handled by bitbucket pipelines. A push to the main branch will start a validation and deployment process. This is configured in the bitbucket-pipelines.yml file.

The pipeline runs on a runner that is hosted in the VP-Systeme DMZ.

Infrastructure is hosted on Fly deploys Docker images to small, isolated vms. At the time of this writing, there is a fly app for production with two machines for redudancy, one in Frankfurt (fra) and Amsterdam (ams). There is another app for staging ( with one machine in Frankfurt.

To control the depyoyment, you have to install the flyctl cli. Use the -a vpsysteme-staging flag to issue commands to the staging app instead of production. To control fly machines, use flyctl machines command.

To scale machines, use flyctl scale. For example, when we started with development, we had only one machine. Once in production, we started another machine in another region with flyctl scale 1 --region ams in order to have redundancy and availability during deploys or machine restarts. Scaling is very is for us at the moment, because we don't have any volumes or databases that would need to be shared between machines.

See also Monitoring.

Changelog generation

Note: This describes a potential feature that is not yet implemented.

The changelog at /changelog lists changes grouped by deployment (referring to Bitbucket deployments). Changes are inferred from git commit messages (see below). Only the summary (first line) of a commit is displayed. By default, only changes of type feat or fix are displayed. The reader can toggle "Show internal changes", which shows changes of all types. The reader can also toggle off "Show summaries only", in which case the full commit message is displayed.

Commit message conventions

Commit messages follow the conventional commits specification, with commit types adapted for our purposes as follows:

  • feat: A new capability of the website, eg. adding a new content page, changing the design, adding analytics.
  • fix: Any kind of bug, security, typo, design or accessibility fix.
  • build: Relating to how the app is built and deployed, eg. changes to remix config relating to build output, changes to the bitbucket-pipelines.yml, or adding build steps like additional linting.
  • docs: Adding wiki pages, code comments or other documentation.
  • refactor: Changing the code without changing the functionality.
  • perf: Improving the performance of the application.
  • test: Adding or repairing tests, when not part of a feature of fix.
  • chore: Routine maintenance tasks like updating packages or minor cleanups (eg. fixing a typo or removing debug messages).

Note that semantic versioning (semver) is not relevant for this application. We don't use the BREAKING_CHANGE: or ! convention.