Release Process

The kops project is released on an as-needed basis. The process is as follows:

  1. An issue is proposing a new release with a changelog since the last release
  2. All OWNERS must LGTM this release
  3. An OWNER runs git tag -s $VERSION and inserts the changelog and pushes the tag with git push $VERSION
  4. The release issue is closed
  5. An announcement email is sent to kubernetes-dev@googlegroups.com with the subject [ANNOUNCE] kops $VERSION is released

Branches

We maintain a release-1.4 branch for kops 1.4.X, release-1.5 for kops 1.5.X etc.

master is where development happens. We create new branches from master as a new kops version is released, or in preparation for a new release. As we are preparing for a new kubernetes release, we will try to advance the master branch to focus on the new functionality, and start cherry-picking back more selectively to the release branches only as needed.

Generally we don't encourage users to run older kops versions, or older branches, because newer versions of kops should remain compatible with older versions of Kubernetes.

Releases should be done from the release-1.X branch. The tags should be made on the release branches.

We do currently maintain a release branch which should point to the same tag as the current release-1.X tag.

Update versions

See 1.5.0-alpha4 commit for example

  • Edit makefile
  • If updating dns-controller: bump version in Makefile, code, manifests, and tests

git commit -m "Release 1.X.Y

Check builds OK

rm -rf .build/ .bazelbuild/
make ci

Push new dns-controller image if needed

make dns-controller-push DOCKER_REGISTRY=kope

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

Update release branch

For the time being, we are also maintaining a release branch. We push released versions to that.

git push origin release-1.8: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

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