We are using the following tools to make releases:
- GitHub Releases
- GitHub Packages (for Docker runtime)
- Knope (for changesets and versioning)
- Cargo
publishcommand - Custom scripts
To document a change, start by running knope changeset and describe your changes. Make sure to pick patch/minor/major according to the Semantic Versioning specification.
Then, commit the changeset and push it to the Pull Request. The changeset will be automatically picked up by Knope. In case of a missing changeset in a PR, Knope will fail the release check.
When a change is merged through a Pull Request, and a changeset file exists, Knope will create/update the release PR.
Knope does not manage the dependencies explicitly, but it will update the
Cargo.tomlfile with the new version. Check.changeset/release-sync.shfor additional details on how to automatically bump transient dependencies.
Once the release PR is merged, the release process will be triggered (see .github/workflows/release.yaml and .github/workflows/build-router.yaml). The release pipeline is based on the following:
- Knope release PR is merged into
main- Knope will create a GitHub release + tag
- The newly created release will run
.github/workflows/build-router.yamlworkflow - The pipeline will build the router binary and upload it to the release assets
- The pipeline will build a new Docker image for the router and push it to the GitHub Packages
- The newly created release will run
- The
.github/workflows/release.yamlpipeline runs to release Crates- It will look for unreleased packages in the Crates
- It will publish new Crates to Crates.io in the right order
- Knope will create a GitHub release + tag