- A container image of the
cluster-api-provider-openstack
controller manager
- The container image is found in the registry
us.gcr.io/k8s-artifacts-prod/capi-openstack/
with an image name ofcapi-openstack-controller
and a tag that matches the release version. For example, in thev0.2.0
release, the container image location isus.gcr.io/k8s-artifacts-prod/capi-openstack/capi-openstack-controller:v0.2.0
A release version string is: vX.Y.Z
.
A pre-release version string additionally has a suffix:
alpha
for an alpha releasebeta
for a beta releaserc
for a release candidate and an additional index starting at 0. This takes the form:vX.Y.Z-[suffix].N
. e.g. the first release candidate prior to version 1.2.3 would be calledv1.2.3-rc.0
.
It is recommended to create at least one release candidate when bumping X
or Y
.
Release notes are user visible information providing details of all relevant changes between releases.
The content of the release notes differs depending on the type of release, specifically:
- Stable releases contain a full changelog from the last stable release.
- Pre-releases contain a changelog from the previous pre-release, or the last stable release if there isn't one.
-
Make sure your repo is clean by git's standards. It is recommended to use a fresh checkout.
-
When bumping
X
orY
(but not Z or the pre-release suffix) in the release version you must create a new release branch calledrelease-X.Y
.NOTE:
upstream
should be the name of the remote pointing togithub.com/kubernetes-sigs/cluster-api-provider-openstack
git checkout main
git pull
git checkout -b release-X.Y
git push --set-upstream upstream
-
When bumping
X
orY
(but not Z or the pre-release suffix) in the release version, ensure you have added a new entry to metadata.yaml as described in the CAPI book, and that this has been committed to the release branch prior to release. -
Make sure you are on the correct release branch:
release-X.Y
-
Set an environment variable with the version, e.g.:
VERSION=v0.6.0
-
Create an annotated tag
git tag -s -a $VERSION -m $VERSION
.
-
Push the tag to the GitHub repository:
NOTE:
upstream
should be the name of the remote pointing togithub.com/kubernetes-sigs/cluster-api-provider-openstack
git push upstream $VERSION
This will cause the image to be automatically built by CI and pushed to the staging repository. As this only builds the image, it only takes a few minutes.
-
Follow the image promotion process to promote the image from the staging repo to
registry.k8s.io/capi-openstack
. The staging repository can be inspected at https://console.cloud.google.com/gcr/images/k8s-staging-capi-openstack/GLOBAL. Be sure to choose the top levelcapi-openstack-controller
, which will provide the multi-arch manifest, rather than one for a specific architecture. The image build logs are available at Cloud Build. Add the new sha=>tag mapping to the images.yaml (use the sha of the image with the corresponding tag). The PR to update the images.yaml must be approved in the OWNERS file and merged.It is good practise to get somebody else to review this PR. It is safe to perform the following steps while waiting for review and the promotion of the image.
-
Run
make release
to build artifacts to be attached to the GitHub release. -
Generate and finalize the release notes and save them for the next step.
- Run
make release-notes RELEASE_NOTES_ARGS="--from <tag>"
.- Depending on the type of release, substitute
<tag>
with the following:- Stable releases: tag of the last stable release
- Pre-releases*: tag of the latest pre-release (or last stable release if there isn't one)
- Depending on the type of release, substitute
- Pay close attention to the
## :question: Sort these by hand
section, as it contains items that need to be manually sorted.
- Run
-
Create a draft release in GitHub based on the tag created above
- Name the release
Release [VERSION]
where VERSION is the full version string. - For a pre-release, ensure you check
This is a pre-release
in GitHub when creating the release. - Add the release notes generated above as the release description.
- Name the release
-
Attach the following files to the draft release:
./out/infrastructure-components.yaml
./out/cluster-template.yaml
./out/cluster-template-without-lb.yaml
./out/cluster-template-flatcar.yaml
./out/metadata.yaml
-
Ensure that the release image has been promoted.
-
Publish release.
Releasing requires a particular set of permissions.
- Approver role for the image promoter process (kubernetes/k8s.io/blob/main/k8s.gcr.io/images/k8s-staging-capi-openstack/OWNERS)
- Tag push and release creation rights to the GitHub repository (team
cluster-api-provider-openstack-maintainers
in kubernetes/org/config/kubernetes-sigs/sig-cluster-lifecycle/teams.yaml)
There is a post-submit Prow job running after each commit on main
which pushes a new image to the staging repo (gcr.io/k8s-staging-capi-openstack/capi-openstack-controller:latest
). Following configuration is involved:
- staging gcr bucket: kubernetes/k8s.io/blob/main/k8s.gcr.io/manifests/k8s-staging-capi-openstack/promoter-manifest.yaml
- post-submit
post-capi-openstack-push-images
Prow job: kubernetes/test-infra/blob/master/config/jobs/image-pushing/k8s-staging-cluster-api.yaml) (corresponding dashboard is located at https://testgrid.k8s.io/sig-cluster-lifecycle-image-pushes#post-capi-openstack-push-images) - Google Cloud Build configuration which is used by the Prow job: kubernetes-sigs/cluster-api-provider-openstack/cloudbuild.yaml