RELEASE.md
This document describes the steps to cut a new kind release. It is intended for maintainers who have push access to the upstream repository and the staging image registry.
brew install gnu-sed)crane installed (for image promotion to Docker Hub)github.com/kubernetes-sigs/kindgcr.io/k8s-staging-kindkindest on Docker HubNode images must be built, tested, and promoted to Docker Hub before the kind release so their digest hashes are known and can be embedded in the release binary.
Use hack/release/push-node.sh for Kubernetes v1.31 and later:
./hack/release/push-node.sh v1.35.0
This builds amd64 and arm64 node images and pushes them to
gcr.io/k8s-staging-kind/node:v1.35.0, then creates a multi-arch manifest
list.
You can override the registry or add architectures:
REGISTRY=gcr.io/k8s-staging-kind ARCHES="amd64 arm64" ./hack/release/push-node.sh v1.35.0
Update the default image in pkg/apis/config/defaults/image.go to point to the
staging image with its digest, then run CI to validate:
const Image = "gcr.io/k8s-staging-kind/node:v1.35.0@sha256:<digest-from-push>"
Get the digest from the push output, or by inspecting the manifest:
crane digest gcr.io/k8s-staging-kind/node:v1.35.0
Once testing passes, copy the image from staging to kindest/node on Docker Hub:
crane cp \
gcr.io/k8s-staging-kind/node:v1.35.0@sha256:<staging-digest> \
kindest/node:v1.35.0
After promotion, retrieve the Docker Hub digest (it may differ from the staging digest):
crane digest kindest/node:v1.35.0
Update pkg/apis/config/defaults/image.go with the promoted kindest/node
reference and its digest, then open a PR:
const Image = "kindest/node:v1.35.0@sha256:<dockerhub-digest>"
pkg/apis/config/defaults/image.go) should reference
a promoted kindest/node image, not a staging image.main.pkg/cmd/kind/version/version.go matches the
version you are about to release (e.g., versionCore = "0.31.0" with
versionPreRelease = "alpha")../hack/release/create.sh 0.31.0 0.32.0
The two arguments are:
0.31.0 - the version being released0.32.0 - the next version (the script will create a 0.32.0-alpha pre-release)The script will:
versionCore = "0.31.0" and versionPreRelease = "" in
pkg/cmd/kind/version/version.goversion v0.31.0 and tag v0.31.0bin/:
kind-linux-amd64, kind-linux-arm64kind-darwin-amd64, kind-darwin-arm64kind-windows-amd64.sha256sum file for each binaryversionCore = "0.32.0" and versionPreRelease = "alpha"version v0.32.0-alpha and tag v0.32.0-alphaAt the end the script prints follow-up instructions. Continue with the steps below.
git push origin HEAD
Open a PR with the two version commits against main and wait for it to merge.
After the PR is merged, push both tags to the upstream repository:
git push https://github.com/kubernetes-sigs/kind.git v0.31.0
git push https://github.com/kubernetes-sigs/kind.git v0.32.0-alpha
While the PR is merging or shortly after, generate the list of contributors since the previous release to include in the GitHub release notes:
LAST_VERSION_TAG=v0.30.0 GITHUB_OAUTH_TOKEN=<token> ./hack/release/get-contributors.sh
The token is optional but avoids GitHub API rate limits. The output is a markdown-formatted bulleted list of GitHub usernames.
Go to https://github.com/kubernetes-sigs/kind/releases/new and:
v0.31.0.v0.31.0.bin/ as release assets:
kind-linux-amd64 + kind-linux-amd64.sha256sumkind-linux-arm64 + kind-linux-arm64.sha256sumkind-darwin-amd64 + kind-darwin-amd64.sha256sumkind-darwin-arm64 + kind-darwin-arm64.sha256sumkind-windows-amd64 + kind-windows-amd64.sha256sumAfter the GitHub release is published, update the documentation to reference the new stable version. This is typically done as a separate PR immediately after the release.
Replace all occurrences of the old version string (e.g., v0.30.0) with the
new one (v0.31.0). The README contains several hardcoded download URLs and
go install commands that need updating.
Update the stable parameter:
[params]
stable = "v0.31.0"
This value is used by the {{< stableVersion >}} shortcode throughout the
website documentation, so this single change updates all version references on
the site.
Commit both files and open a PR. The commit message convention is:
bump docs to 0.31.0
./hack/release/push-node.sh vX.Y.Zpkg/apis/config/defaults/image.gocrane cp gcr.io/k8s-staging-kind/node:vX.Y.Z@sha256:... kindest/node:vX.Y.Zpkg/apis/config/defaults/image.go to promoted kindest/node reference + merge PRmain is green and default image is the promoted kindest/node image./hack/release/create.sh <version> <next-version>git push upstream v<version> and git push upstream v<next-version>-alphaLAST_VERSION_TAG=v<prev-version> ./hack/release/get-contributors.shv<version> tag, upload binaries from bin/README.md - replace all old version referencessite/config.toml - set stable = "v<version>"