diff --git a/release/release.md b/release/release.md new file mode 100644 index 00000000..07440830 --- /dev/null +++ b/release/release.md @@ -0,0 +1,122 @@ +# How to do a Kata Containers Release + +* [Introduction](#Introduction) +* [Requirements](#Requirements) +* [Release process](#release-process) + +# Introduction + +If you are reading this document, you might want to create a Kata Containers +Release. + +The Kata Containers Release Process is defined in the following +[document][release-process-definition]. To simplify this process, we have +created a [Release Checklist][release-checklist]. Finally, to simplify the +Release Checklist process we have automated most of the process, this document +guides on how to use release scripts instead of do all the checklist manually. + + +## Requirements + +- It is recommended to have at least 2 GB of free disk space to perform these tasks. + +- [Go](https://golang.org/doc/install#) + +- [hub](https://github.com/github/hub) + If you use GitHub 2FA, configure the hub manually to create a file ~/.config/hub + ```yaml + github.com: + - user: YOUR_USER + oauth_token: TOKEN + protocol: https + ``` +- OBS account with permissions on /home:katacontainers (https://build.opensuse.org/project/subprojects/home:katacontainers) + +- GitHub permissions to push tags and creates Releases in Kata repositories. + +- GPG configured to sign git tags. https://help.github.com/articles/generating-a-new-gpg-key/ + +- You should configure your GitHub to use your ssh keys (to push to branches). See https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/. + * As an alternative, configure hub to push and fork with https, `git config --global hub.protocol https` (Not tested yet) * + +- [Docker](https://docs.docker.com/install/) + +- Get the [Packaging](https://github.com/kata-containers/packaging) Kata repository + + ```bash + $ go get -d github.com/kata-containers/packaging + ``` + +## Release process + +The steps described here are safe to repeat more than one time, it is safe to +repeat in case of unexpected issue. And is it not required start from the +begging. + + +Note: It is "safe" to run this process on any machine. It creates all assets in +sub-directories and should not modify the entire system. + +```bash +$ cd ${GOPATH}/src/github.com/kata-containers/packaging +# make sure you are up-to-date. +$ git pull +``` +1. Bump repositories + ```bash + $ cd ${GOPATH}/src/github.com/kata-containers/packaging/release + $ export NEW_VERSION=X.Y.Z + $ export BRANCH="master" + $ ./update-repository-version.sh -p ksm-throttler "$NEW_VERSION" "$BRANCH" + $ ./update-repository-version.sh -p proxy "$NEW_VERSION" "$BRANCH" + $ ./update-repository-version.sh -p shim "$NEW_VERSION" "$BRANCH" + $ ./update-repository-version.sh -p runtime "$NEW_VERSION" "$BRANCH" + $ ./update-repository-version.sh -p osbuilder "$NEW_VERSION" "$BRANCH" + $ ./update-repository-version.sh -p agent "$NEW_VERSION" "$BRANCH" + ``` + The commands from above will create a github pull request in the Kata projects. + Work with the Kata approvers to verify that the CI works and the PR are merged. + +2. Create GitHub tags: + After all the PRs from the previous step are complete, create GitHub tags. + ```bash + $ cd ${GOPATH}/src/github.com/kata-containers/packaging/release + $ ./tag_repos.sh -p -b "$BRANCH" tag + ``` + This creates tags for all the Kata repos. + +3. Create the Kata Containers image and upload it to GitHub: + ```bash + $ cd ${GOPATH}/src/github.com/kata-containers/packaging/release + $ ./publish-kata-image.sh -p ${NEW_VERSION} + ``` + +4. Create the Kata static binaries tarball and upload it to GitHub:: + ```bash + $ cd ${GOPATH}/src/github.com/kata-containers/packaging/release + $ ./kata-deploy-binaries.sh -p ${NEW_VERSION} + ``` + +5. Create Kata packages: + ```bash + $ cd ${GOPATH}/src/github.com/kata-containers/packaging/obs-packaging + # Optional, if release is a new stable branch ./create-pkg-branch.sh ${BRANCH} + $./gen_versions_txt.sh ${BRANCH} + $PUSH=1 OBS_SUBPROJECT="releases:$(uname -m):${BRANCH}" ./build_from_docker.sh ${NEW_VERSION} + ``` + +6. Create release notes: + ```bash + $ cd ${GOPATH}/src/github.com/kata-containers/packaging/release + # Note: OLD_VERSION is where the script should start to get changes. + $ ./runtime-release-notes.sh OLD_VERSION ${NEW_VERSION} > notes.md + # Add the release notes in GitHub runtime. + $ hub -C "${GOPATH}/src/github.com/kata-containers/runtime" release edit -F notes.md + ``` + +7. Announce release: + + Publish in Slack and Kata mailing list kata-dev@lists.katacontainers.io that new release is ready. + +[release-process-definition]: https://github.com/kata-containers/documentation/blob/master/Releases.md +[release-checklist]: https://github.com/kata-containers/documentation/blob/master/Release-Checklist.md