main. Nothing else: no release branch, no version
file to bump, no manual image build. Pushing the tag is the act of releasing.
Version numbers
Versions follow Semantic Versioning and are written asvMAJOR.MINOR.PATCH — v0.4.2, v1.0.0.
While the platform is pre-1.0 the rules are the 0.x ones:
- MINOR goes up for new behaviour, and for anything that breaks an existing contract — a Flow node handler, the webhook format, the extension surface, a configuration key. Read the release notes before adopting a new minor.
- PATCH goes up for fixes that change no contract. A patch is always safe to take.
1.0.0 is tagged when the public surface described in the
stability policy is one the project is prepared
to keep. From then on a breaking change raises MAJOR and nothing else does.
The tag is the only place the version lives. The container images read it from
the tag name at build time (org.opencontainers.image.version), and
APP_VERSION in an operator’s environment refers to it directly.
What a tag produces
Pushing av* tag runs the Publish images workflow, which builds core,
web and gateway for amd64 and arm64 and pushes them to GitHub Container
Registry under every tag an operator might pin to:
Operators who want upgrades to be a decision pin
1.4.2; the
upgrade guide explains the rest.
Cutting a release
Releases happen when a coherent piece of work is onmain, not on a calendar.
A release every one or two weeks is normal for 0.x; a release for a single
fix is fine too.
- Make sure
mainis green and that any Dependabot pull requests you intend to include are merged. - Decide the number: did anything in
git log <previous-tag>..mainchange a contract? Then MINOR, otherwise PATCH. - Tag and push. The tag is annotated so that it carries an author and a date:
- Publish the GitHub release with notes generated from the merged pull request titles, then edit the notes so that breaking changes and required operator actions (a migration, a new environment variable, a restart order) are at the top and impossible to miss:
- Check that the Publish images run finished and the three images exist under the new tag.
Hotfixes
A fix for a released version is an ordinaryfix/ branch from main, merged
through a pull request and released as the next PATCH tag. Nothing about the
process is different; it is just done quickly.
The exception is the case where main already carries unreleased breaking
changes and an operator on the previous minor needs the fix without them. Then,
and only then, a maintenance branch is created from the released tag:
main first and is cherry-picked back, never the other way
round, so that main can never be missing a fix a release has. Maintenance
branches are created on demand and deleted once the minor they serve is no
longer in use. Before 1.0 this case is not expected to arise.
Pre-releases
A change that wants operator feedback before it is called a release is taggedv1.5.0-rc.1. It builds images like any other tag, but latest is not moved
to it and the GitHub release is marked as a pre-release: