This document outlines the process to follow when releasing a new version of the project.
-
Decide on a version number for the new release following Semantic Versioning (e.g.,
0.5.0
). -
Locally or using the GitHub UI, trigger the
release-prepare
workflow:make release VERSION=0.5.0
or manually trigger the workflow via GitHub Actions UI.
-
This will:
- Create a new branch
release/v0.5.0
from the latestdevelop
branch - Update version numbers in all
Cargo.toml
files to0.5.0
- Generate a CHANGELOG.md file
- Create a pull request from
release/v0.5.0
tomain
- Create a new branch
- Review the generated PR to ensure the changelog and version changes are correct.
- Request reviews from other team members as necessary.
- Make any final adjustments directly to the
release/v0.5.0
branch. - Once approved, merge the PR into
main
.
When the release PR is merged to main
, the release-finalize
workflow will automatically:
- Create and push a tag for the release (e.g.,
v0.5.0
) - Create a GitHub Release with the changelog content
- Build and publish Docker images for the release
- Create a PR to merge changes back to
develop
- Automatically merge this PR into
develop
- Automatically bump the version on
develop
to the next development version (e.g.,0.5.1-dev
)
No manual intervention is required for these steps unless there are conflicts when merging back to develop
.
For urgent fixes that need to bypass the normal release flow:
- Create a branch
hotfix/v0.5.1
frommain
- Make your changes and commit them
- Update version numbers in all
Cargo.toml
files to0.5.1
- Create a PR from
hotfix/v0.5.1
tomain
- After the PR is merged, the same automatic finalization steps listed above will occur
We follow Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for backwards-compatible functionality
- PATCH version for backwards-compatible bug fixes
Development versions on the develop
branch have a -dev
suffix appended to the patch number (e.g., 0.5.1-dev
).
The changelog is generated automatically using git-cliff, which parses Conventional Commits to generate a structured changelog.
To ensure your commits appear correctly in the changelog, prefix them with:
feat:
for new featuresfix:
for bug fixeschore:
for maintenance tasksdocs:
for documentation updatesrefactor:
for code refactoringtest:
for adding or updating testsperf:
for performance improvements