To push new changes to the release, start with a PR to the main branch. Make sure to follow the PR template.
When releasing machine-controller-manager-provider-stackit, we follow semantic versioning (see https://semver.org/).
In short:
- versions have the
vX.Y.Zpattern, withXbeing the major version,Ybeing the minor version, andZbeing the patch version ⚠️ a new major version (vX.0.0,Xis bumped)- brings new features/refactorings/etc.
- implies breaking changes to consumers of the package (i.e., incompatible with the last major)
- 🚀 a new minor version (
vX.Y.0,Yis bumped)- brings new features/refactorings/etc.
- does not imply breaking changes (i.e., compatible with the last minor)
- 🚑 a new patch version (
vX.Y.Z,Zis bumped)- brings bug fixes without new features/refactorings/etc.
- does not imply breaking changes (i.e., compatible with the last patch)
For major version changes, consumers typically need to adapt their usage of the package to the breaking changes before they can successfully upgrade. For minor and patch version changes, no adaptions are needed.
In case of machine-controller-manager-provider-stackit, we use the following types of releases:
⚠️ a new major version is released if- manual steps are required after rolling out the change TODO: ask if it is required
- Gardener Upgrades
- 🚀 a new minor version is released if
- it doesn't come with a known impact on customers
- it can be promoted automatically
- 🚑 a new patch version is released if
- a critical change needs to be rolled out without other major/minor changes
- it can be promoted automatically
Both major and minor releases are created from the main branch. Patch releases are created from a release branch that is based on a minor version release.
To make sure we release with the correct version bump, every breaking PR needs to be labeled with the breaking label (e.g., via /label breaking) so that it is automatically categorized correctly when generating release notes.
Note
We are now reconciling in maintenance only. There is no more reconciliation every hour!
The basic promotion workflow is quite simple:
- Create a PR to merge your changes on
machine-controller-manager-provider-stackit into the mainbranch. - Once you have verified the changes on dev [TODO: if the dev is okay to write here], you can promote the changes by creating a new minor release of ske-base.
For this, publish the draft release on the
mainbranch for the next minor version (vx.y.0) (see Publishing a Release). Review the release notes and make sure, the changes since the last release don't contain any breaking changes.
When promoting major releases of machine-controller-manager-provider-stackit, the promotion workflow is the following:
- Create a PR to merge your changes on
machine-controller-manager-provider-stackit into the mainbranch. Add/label breakingto your PR description. - Once you have verified the changes, you can promote the changes by creating a new major release of ske-base.
For this, publish the draft release on the
mainbranch for the next major version (vx.0.0) (see Publishing a Release).
TODO: should we add hofixes part?
When changes are merged into main or a release-v* branch, the release-tool generates a draft release for the next release on the branch as a preview of the to-be-released changes.
It automatically chooses the correct tag. I.e., it bumps the major version if there are unreleased breaking changes on main, or otherwise bumps the minor version for main or bumps the patch version for release-v* branches.
To publish a release, follow these steps:
- Open the repository's releases page.
- Navigate to the corresponding draft release (minor/major for
main, patch forrelease-v*). - Review to-be-released changes by checking the release notes.
- Edit the release by pressing the pen icon.
- Change
REPLACE_MEwith your github username. - Press the "Publish release" button.
If the release-tool or its associated Prow job fails, use the GitHub web UI to create and publish a release:
-
Go to the repository on GitHub and click Releases on the right side, then click Draft new release.
-
Open the Select tag dropdown and choose Create new tag at the bottom. Enter the new tag name (for example
v2.1.0) and pick the target branch/commit, then confirm. -
Click Generate release notes to let GitHub populate the changelog.
-
In the release description, add a line
Released by @<your github handle>to indicate the publisher. -
Click Publish release to create the release.
Publishing a new release triggers the same Prow release job that builds and publishes the final container images.