This document outlines the process for creating a new official release for the Node Readiness Controller. The repository uses an automated release pipeline to handle branching and tagging.
- Create a new GitHub Issue titled "Release vX.Y.Z" to track the release process.
- In the issue, gather a preliminary changelog by reviewing commits since the last release. A good starting point is
git log --oneline <last-tag>..HEAD.
Instead of manually creating branches and tags, the release is triggered by a pull request:
- The Release Shepherd creates a new PR targeting the
mainbranch (for minor/major releases) or arelease-*branch (for patch releases). - In this PR:
- Update the
VERSIONfile at the repository root to the new semantic version (e.g.,v0.2.0). - Update any documentation (like
docs/book/src/releases.md), examples, or manifests as needed for the release.
- Update the
- Ensure all tests are passing.
- Once the PR is merged, the Release Automation GitHub Action will trigger.
The automation will:
- Validate the semantic version format.
- Create and push a git tag
vX.Y.Zat the merged commit. - If it is a minor or major release (e.g.
v0.2.0), it will automatically branch offrelease-vX.Y.Zand push it to the repository.
After the release tag is pushed, the images must be built, pushed to staging, and then promoted to the official registry.
- Monitor the image push job status on Testgrid (sig-node-image-pushes).
- The Prow job configuration is in test-infra if troubleshooting is needed.
- Verify the images exist in the staging repository:
skopeo list-tags docker://us-central1-docker.pkg.dev/k8s-staging-images/node-readiness-controller/node-readiness-controller | grep vX.Y.Z
- Identify the image digests:
skopeo inspect docker://us-central1-docker.pkg.dev/k8s-staging-images/node-readiness-controller/node-readiness-controller:vX.Y.Z --format '{{.Digest}}' skopeo inspect docker://us-central1-docker.pkg.dev/k8s-staging-images/node-readiness-controller/node-readiness-reporter:vX.Y.Z --format '{{.Digest}}'
- Fork kubernetes/k8s.io.
- Update
registry.k8s.io/images/k8s-staging-node-readiness-controller/images.yamlwith the new digests and tags (sample PR). - Submit the PR to
kubernetes/k8s.io. Once it is approved and merged automation will schedule the promotion.
Before publishing the release, verify the images are available at k8s-registry:
- Ensure the images are available at
registry.k8s.io:skopeo list-tags docker://registry.k8s.io/node-readiness-controller/node-readiness-controller | grep vX.Y.Z
- Checkout the release tag locally
git show vX.Y.Z -q # to verify the right tag and commit git checkout vX.Y.Z - Generate the release manifests:
rm -rf ./dist make build-installer IMG_PREFIX=registry.k8s.io/node-readiness-controller/node-readiness-controller IMG_TAG=vX.Y.Z ls ./dist # to confirm the generated artifacts - Run a local E2E test in Kind (see
docs/TEST_README.md) using the generated manifests from thedist/directory to ensure they pull the correct images and function as expected.
- Go to the Releases page on GitHub.
- Find the new tag and click "Edit tag" (or "Draft a new release" and select the tag).
- Paste the final changelog into the release description.
- Upload the generated manifests (
dist/crds.yaml,dist/install.yaml, anddist/install-full.yaml) as release artifacts. - Publish the release.
- Close the release tracking issue.
- Announce the release on the
sig-nodemailing list. The subject should be:[ANNOUNCE] Node Readiness Controller vX.Y.Z is released.