- Release Process
- Branches
- New Kubernetes versions and release branches
- Update versions
- Check builds OK
- Push new kops-controller / dns-controller images
- Upload new version
- Tag new version
- Update release branch
- Pull request to master branch (for release commit)
- Upload to github
- Compile release notes
- On github
- Release kops to homebrew
- Update the alpha channel and/or stable channel
- Update conformance results with CNCF
Release Process
The kops project is released on an as-needed basis. The process is as follows:
- An issue is proposing a new release with a changelog since the last release
- All OWNERS must LGTM this release
- An OWNER runs
git tag -s $VERSION
and inserts the changelog and pushes the tag withgit push $VERSION
- The release issue is closed
- An announcement email is sent to
kubernetes-dev@googlegroups.com
with the subject[ANNOUNCE] kops $VERSION is released
Branches
We maintain a release-1.16
branch for kops 1.16.X, release-1.17
for kops 1.17.Xetc.
master
is where development happens. We create new branches from master as anew kops version is released, or in preparation for a new release. As we arepreparing for a new kubernetes release, we will try to advance the master branchto focus on the new functionality, and start cherry-picking back more selectivelyto the release branches only as needed.
Generally we don't encourage users to run older kops versions, or olderbranches, because newer versions of kops should remain compatible with olderversions of Kubernetes.
Releases should be done from the release-1.X
branch. The tags should be madeon the release branches.
We do currently maintain a release
branch which should point to the same tag asthe current release-1.X
tag.
New Kubernetes versions and release branches
Typically Kops alpha releases are created off the master branch and beta and stable releases are created off of release branches.In order to create a new release branch off of master prior to a beta release, perform the following steps:
- Create a new periodic E2E prow job for the "next" kubernetes minor version.
- All Kops prow jobs are defined here
- Create a new presubmit E2E prow job for the new release branch.
- Create a new milestone in the GitHub repo.
- Update prow's milestone_applier config to update master to use the new milestone and add an entry for the new branch that targets master's old milestone.
- Create the new release branch in git and push it to the GitHub repo.
Update versions
See 1.5.0-alpha4 commit for example
- Use the hack/set-version script to update versions:
hack/set-version 1.20.0 1.20.1
The syntax is hack/set-version <new-release-version> <new-ci-version>
new-release-version
is the version you are releasing.
new-ci-version
is the version you are releasing "plus one"; this is used to avoid CI jobs being out of semver order.
Examples:
new-release-version | new-ci-version |
---|---|
1.20.1 | 1.20.2 |
1.21.0-alpha.1 | 1.21.0-alpha.2 |
1.21.0-beta.1 | 1.21.0-beta.2 |
Update the golden tests:
hack/update-expected.sh
Commit the changes (without pushing yet):
git commit -m "Release 1.X.Y"
Check builds OK
- rm -rf .build/ .bazelbuild/
- make ci
Push new kops-controller / dns-controller images
- # For versions prior to 1.18: make dns-controller-push DOCKER_REGISTRY=kope
- make dns-controller-push DOCKER_IMAGE_PREFIX=kope/ DOCKER_REGISTRY=index.docker.io
- make kops-controller-push DOCKER_IMAGE_PREFIX=kope/ DOCKER_REGISTRY=index.docker.io
Upload new version
- # export AWS_PROFILE=??? # If needed
- make upload UPLOAD_DEST=s3://kubeupv2
Tag new version
Make sure you are on the release branch git checkout release-1.X
- make release-tag
- git push git@github.com:kubernetes/kops
- git push --tags git@github.com:kubernetes/kops
- # Sync the origin alias back up
- git fetch origin
Update release branch
For the time being, we are also maintaining a release branch. We push releasedversions to that.
git push git@github.com:kubernetes/kops release-1.17:release
Pull request to master branch (for release commit)
Upload to github
Use shipbot to upload the release:
- make release-github
Compile release notes
e.g.
- FROM=1.14.0
- TO=1.14.1
- DOC=1.14
- git log ${FROM}..${TO} --oneline | grep Merge.pull | cut -f 5 -d ' ' | tac > /tmp/prs
- echo -e "\n## ${FROM} to ${TO}\n" >> docs/releases/${DOC}-NOTES.md
- relnotes -config .shipbot.yaml < /tmp/prs >> docs/releases/${DOC}-NOTES.md
On github
- Download release
- Validate it
- Add notes
- Publish it
Release kops to homebrew
- Following the documentation we must release a compatible homebrew formulae with the release.
- This should be done at the same time as the release, and we will iterate on how to improve timing of this.
Update the alpha channel and/or stable channel
Once we are satisfied the release is sound:
- Bump the kops recommended version in the alpha channel
Once we are satisfied the release is stable:
- Bump the kops recommended version in the stable channel
Update conformance results with CNCF
Use the following instructions: https://github.com/cncf/k8s-conformance/blob/master/instructions.md