This document describes the current release and versioning strategy. This strategy is likely to change as Rerun matures.
New Rerun versions are released approximately once every month. Sometimes we do out-of-schedule patch releases.
Each release include new versions of:
- All Rust crates
- The Python SDK
- The Rust SDK
- The C++ SDK
We use semantic versioning. All versions are increased in lockstep, with a minor version bump each time (0.1.0, 0.2.0, 0.3.0, …).
This means we might add breaking changes in each new release.
In rare cases we will do patch releases, e.g. 0.3.1, when there is a critical bug fix. These patch releases will not contain any breaking changes.
We sometimes do pre-releases. Then we use the versioning 0.2.0-alpha.0 etc.
The version on our main branch is always an -alpha.N+dev version. We build artifacts from main every day, though these are not published on package registries.
You can find the latest development version in our GitHub releases.
Our Minimum Supported Rust Version (MSRV) is always at least one minor release behind the latest Rust version, and ideally two releases.
- This means users of our libraries aren't forced to update to the very latest Rust version
- This lets us sometimes avoid new bugs in the newly released Rust compiler
We have not yet committed to any backwards or forwards compatibility.
We tag all data files (.rrd files) and communication protocols with the Rerun version number. If there is a version mismatch, a warning is logged, but an attempt is still made to load the older or newer data.
As of 0.23, we automatically migrate data from older versions, with an N-1 compatibility policy. That means 0.24 supports migrating 0.23 data, 0.25 supports migrating 0.24 data, etc.
Before doing anything, read all the steps in full!
There usually isn't any ambiguity, as releases are planned ahead of time.
You can always find the latest release on our GitHub releases page.
The branch name is the single source of truth for the release version. Our release workflow automatically updates all versions in the repository to what is specified in the branch name, so the format is important:
prepare-release-0.x.yfor minor and patch releases.prepare-release-0.x.y-alpha.Nfor alpha releases.
Note that prepare-release-0.x is invalid. Always specify the y, even if it is 0, e.g. prepare-release-0.15.0 instead of prepare-release-0.15.
The base of the branch should depends on what kind of release it is:
- For a minor release, the branch is created from
main. - For a patch release, the branch is created from the previous release tag.
- For an alpha release, the branch is created from
main.
You can do this either using git on your command line, or through the UI:
Once the branch has been created, push it to the remote repository.
NOTE (for patch releases): upon creation of the branch, the version is set to the final version of the previous release. This can create issues when testing the patch release, since it has a non-"+dev" version identical to/conflicting with an existing release. Because of that, an RC should preferably be created before testing.
In GitHub we have a consider-patch label that we put on PRs that we might want to include in the release.
When done, run cargo semver-checks to check that we haven't introduced any semver breaking changes.
docs-latest branch should also be cherry-picked,
otherwise these changes will be lost when docs-latest is updated.
# On branch `prepare-release-0.x.y`
git fetch origin docs-latest:docs-latest
git cherry-pick 0.x.z..docs-latest
Where z is the previous patch number.
Note that the cherry-pick will fail if there are no additional docs-latest commits to include, which is fine.
After cherry-picking a commit into the patch, please make sure to remove the consider-patch label.
4. Update CHANGELOG.md
Update the change log. It should include:
- A one-line summary of the release
- A multi-line summary of the release
- You may ask feature leads to write a summary for each highlighted item
- A gif or screenshot showing one or more major new features
- Try to avoid
mp4s, gifs have a better experience on GitHub - You can upload images to a PR, use the link it generates to use GitHub as an image hosting service.
- Try to avoid
- Run
pixi run uvpy scripts/generate_changelog.py > new_changelog.md - Edit PR descriptions/labels to improve the generated changelog
- Copy-paste the results into
CHANGELOG.md. - Editorialize the changelog if necessary
- Make sure the changelog includes instructions for handling any breaking changes
Remove all the attr.docs.unreleased attributes in all .fbs files, followed by pixi run codegen.
Remove the speculative link markers (?speculative-link).
Update the python support table for the major release.
Once you're done, commit and push onto the release branch.
6. Run the release workflow
In the UI:
- Set
Use workflow fromto the release branch you created in step (2). - Then choose one of the following values in the dropdown:
-
alphaif the branch name isprepare-release-x.y.z-alpha.N. This will create a one-off alpha release. -
rcif the branch name isprepare-release-x.y.z. This will create a pull request for the release, and publish a release candidate. -
finalfor the final public release
-
Once the release workflow is started, it will create a pull request for the release. The pull request description will tell you what to do next.
The Release workflow will build artifacts and run PR checks.
Additionally, if the release type is set to final or rc, it will spawn a second workflow (when the release artifacts have been published to PyPI, crates.io etc.) called GitHub Release.
This workflow is responsible for creating the GitHub release draft and to publish the artifacts to it.
Make sure this workflow also finishes!.
Only after it finishes successfully should you un-draft the GitHub release.
The release branch will contain a post-release version bump commit made by the release bot.
For example, prepare-release-0.25.0 will be bumped to 0.26.0-alpha.1+dev once everything has been released.
Additionally, it's common for us to push small changes and bug fixes directly to the release branch.
We want all of this to land back on main, so:
- For a minor release, merge the release branch to
main. - For a patch release, manually create a new PR from
mainand cherry-pick the commits. This includes at least theCHANGELOG.mdupdate, plus any other changes made on the release branch that haven't been cherry-picked in the first place. - For an alpha release, it's should be merged if and only if the release job was successful.
Otherwise, do not merge, as this could introduce breakage across the repository, such as in documentation links.
If needed, cherry-pick any additional commits made back to
main.
Make sure the consider-patch label on GitHub is up-to-date. For a full release, this usually means removing it from all PRs.
Summarize your experience with the release process to our Release Postmortems Notion page.
Create tickets if you think we can improve the process, put them into the Actionable items section.