diff --git a/docs/book/src/developers/releasing.md b/docs/book/src/developers/releasing.md index 77acf7082..4e165075b 100644 --- a/docs/book/src/developers/releasing.md +++ b/docs/book/src/developers/releasing.md @@ -7,17 +7,23 @@ - Open a PR in https://github.com/kubernetes/test-infra to change this [line](https://github.com/kubernetes/test-infra/blob/25db54eb9d52e08c16b3601726d8f154f8741025/config/prow/plugins.yaml#L344) - Example PR: https://github.com/kubernetes/test-infra/pull/16827 -## Prepare branch +## Prepare main branch for development -TODO + 1. Update the file `metadata.yaml` by adding the next release. -## Prepare branch, tag and release notes + 1. Submit a PR for the `metadata.yaml` update. - 1. Update the file `metadata.yaml` if is a major or minor release +## Create the tag and release notes - 2. Submit a PR for the `metadata.yaml` update if needed, wait for it to be merged before continuing, and pull any changes prior to continuing. - - 3. Create and push the release tags to the GitHub repository: + 1. Ensure that CI is stable: [Prow CAPG dashboard](https://prow.k8s.io/?repo=kubernetes-sigs%2Fcluster-api-provider-gcp) + + 1. Fetch the latest changes and tags, and double check that your branch is at the desired commit: + ```bash + git fetch upstream main + git fetch upstream --tags + ``` + + 1. Create and push the release tags to the GitHub repository: ```bash # Export the tag of the release to be cut, e.g.: @@ -30,32 +36,38 @@ TODO git push upstream ${RELEASE_TAG} ``` - Notes: + -* `glcoud auth login +1. Configure gcloud authentication: -5. `make release` from repo, this will create the release artifacts in the `out/` folder + ```bash + gcloud auth login + ``` +1. `make release` from repo, this will create the release artifacts in the `out/` folder. It is recommended to verify that the artifact file `infrastructure-components.yaml` points to the new image. -6. Install the `release-notes` tool according to [instructions](https://github.com/kubernetes/release/blob/master/cmd/release-notes/README.md) -7. Generate release-notes (require's exported `GITHUB_TOKEN` variable): +1. Install the `release-notes` tool according to [instructions](https://github.com/kubernetes/release/blob/master/cmd/release-notes/README.md) - Run the release-notes tool with the appropriate commits. Commits range from the first commit after the previous release to the new release commit. +1. Generate release-notes (requires exported `GITHUB_TOKEN` variable): - ```bash - release-notes --org kubernetes-sigs --repo cluster-api-provider-gcp \ - --start-sha 1cf1ec4a1effd9340fe7370ab45b173a4979dc8f \ - --end-sha e843409f896981185ca31d6b4a4c939f27d975de - --branch - ``` + Run the release-notes tool with the appropriate commits. Commits range from the first commit after the previous release to the new release commit. -8. Manually format and categorize the release notes + ```bash + release-notes --org kubernetes-sigs --repo cluster-api-provider-gcp \ + --start-sha 1cf1ec4a1effd9340fe7370ab45b173a4979dc8f \ + --end-sha e843409f896981185ca31d6b4a4c939f27d975de + --branch + ``` + +1. Manually format and categorize the release notes ## Prepare release in GitHub @@ -74,9 +86,9 @@ To promote images from the staging repository to the production registry (`regis 1. Wait until images for the tag have been built and pushed to the [staging repository](https://console.cloud.google.com/gcr/images/k8s-staging-cluster-api-gcp/global/cluster-api-gcp-controller) by the [push images job](https://prow.k8s.io/?repo=kubernetes-sigs%2Fcluster-api-provider-gcp&job=post-cluster-api-provider-gcp-push-images). - 2. If you don't have a GitHub token, create one by going to your GitHub settings in [Personal access tokens](https://github.com/settings/tokens). Make sure you give the token the `repo` scope. + 1. If you don't have a GitHub token, create one by going to your GitHub settings in [Personal access tokens](https://github.com/settings/tokens). Make sure you give the token the `repo` scope. - 3. Create a PR to promote the images to the production registry: + 1. Create a PR to promote the images to the production registry: ```bash # Export the tag of the release to be cut, e.g.: @@ -93,14 +105,20 @@ To promote images from the staging repository to the production registry (`regis - `kpromo` uses `git@github.com:...` as remote to push the branch for the PR. If you don't have `ssh` set up you can configure git to use `https` instead via `git config --global url."https://github.com/".insteadOf git@github.com:`. - This will automatically create a PR in [k8s.io](https://github.com/kubernetes/k8s.io) and assign the CAPV maintainers. -4. Merge the PR (/lgtm + /hold cancel) and verify the images are available in the production registry: + 1. Merge the PR (/lgtm + /hold cancel) and verify the images are available in the production registry: - Wait for the [promotion prow job](https://prow.k8s.io/?repo=kubernetes%2Fk8s.io&job=post-k8sio-image-promo) to complete successfully. Then verify that the production images are accessible: ```bash docker pull registry.k8s.io/cluster-api-provider-gcp/cluster-api-gcp-controller:${RELEASE_TAG} ``` -Example PR: https://github.com/kubernetes/k8s.io/pull/1462 + Location of image: https://console.cloud.google.com/gcr/images/k8s-staging-cluster-api-gcp/GLOBAL/cluster-api-gcp-controller?rImageListsize=30 @@ -127,9 +145,9 @@ Example versions: ## Expected artifacts 1. A release yaml file `infrastructure-components.yaml` containing the resources needed to deploy to Kubernetes -2. A `cluster-templates.yaml` for each supported flavor -3. A `metadata.yaml` which maps release series to cluster-api contract version -4. Release notes +1. A `cluster-templates.yaml` for each supported flavor +1. A `metadata.yaml` which maps release series to cluster-api contract version +1. Release notes ## Communication @@ -140,7 +158,7 @@ Example versions: ### Minor/Major Releases 1. Follow the communications process for [pre-releases](#pre-releases) -2. An announcement email is sent to `kubernetes-sig-cluster-lifecycle@googlegroups.com` with the subject `[ANNOUNCE] cluster-api-provider-gcp has been released` +1. An announcement email is sent to `kubernetes-sig-cluster-lifecycle@googlegroups.com` with the subject `[ANNOUNCE] cluster-api-provider-gcp has been released` [release-announcement]: #communication [semver]: https://semver.org/#semantic-versioning-200