Project: Linkerd (Orchestration & Management / Service Mesh)
File: RELEASE.md

This document contains instructions for releasing Linkerd2. Determine the commit SHA of the `linkerd2-proxy` repo to be included in the release. If is already at the desired SHA, skip to step 2. If updating to `linkerd-proxy` HEAD, note the commit SHA at (Look for `linkerd2-proxy-<linkerd2-proxy-sha>.tar.gz`). Create a new branch in the `linkerd2` repo, `username/proxy-version-bump`. Then run: ```bash bin/git-commit-proxy-version <linkerd2-proxy-sha> ``` The script will update the `.proxy-version` file. Submit a PR to obtain reviews and approval. If the `linkerd2/proxy-init` or `linkerd2/cni-plugin` projects have a new release (which is rare), the following updates are needed: `pkg/version/version.go` (this also implies changes in unit test fixtures) ```go var ProxyInitVersion = "v2.3.0" var LinkerdCNIVersion = "v1.4.0" ``` `charts/linkerd-control-plane/values.yaml` Upgrade the version in `global.proxyInit.image.version` `charts/linkerd2-cni/values.yaml` Upgrade the version in `image.version` Create a new branch in the `linkerd2` repo, `username/proxy-init-version-bump`. Open a pull request that includes the changes. To facilitate testing you might want to publish the docker images to your private repo. First tag the release: ```bash git tag edge-2024.3.1 ``` Do not push this tag just yet, to avoid triggering the actual public release. Make sure you're logged into your Github docker registry: ```bash echo "$GHPAT" | docker login ghcr.io -u $GHUSERNAME --password-stdin ``` Where `$GHUSERNAME` is your Github username and `$GHPAT` is a personal access token with enough permissions for creating Github packages. Then this will build the images and also push them to your personal Github docker registry (note this implies you've already set docker buildx in your machine, if not follow [these instructions](https://github.com/docker/buildx#installing)): ```bash DOCKERREGISTRY=ghcr.io/$GHUSERNAME DOCKERMULTIARCH=1 DOCKERPUSH=1 bin/docker-build ``` If this is the first time you push those images into your personal registry, you'll need to go to `https://github.com/$GH_USERNAME?tab=packages` and access the settings for each image in order to make them public. After having successfully pushed those images, delete the tag so you can create it again and push it for good as explained in the following

Now testers can pull the CLI binaries through this: ```bash DOCKERREGISTRY=ghcr.io/$GHUSERNAME bin/docker-pull-binaries edge-2024.3.1 ``` which will dump them under the `target/release` directory. Besides using those particular binaries to install Linkerd, they'll also need to point to your registry using the `--registry` flag. ```bash target/release/linkerd2-cli-edge-2024.3.1-darwin install --registry ghcr.io/$GH_USERNAME -f ~/tmp/linkerd-overrides.yml ``` Checkout the `main` branch Tag, e.g. `edge-24.3.1` Push the tag That will kick off a CI Release workflow run that will: Build and push the docker images for the tag that was created Run the k3d integration tests in the Github actions VMs themselves Run a k3d integration test on a separate ARM64 host Create a release in Github, and upload the CLI binaries with their checksums Dispatch an event caught by the website repo that triggers a website rebuild which will update the edge version in the website Retrieve the installation script from and verify it installs the current version being released Deploy the updated helm charts You can locate the CI run . Go to the release page in Github and check that the notes are properly formatted and the files are there. Download the file for your system along with its checksum, verify the checksum matches, and do a basic sanity check: ```bash linkerd version linkerd install | kubectl apply -f - linkerd check linkerd viz install | kubectl apply -f - linkerd viz check linkerd dashboard ``` Send an email to <cncf-linkerd-dev@lists.cncf.io>, <cncf-linkerd-users@lists.cncf.io>, and <cncf-linkerd-announce@lists.cncf.io>, announcing the release. Subscribe to these mailing lists if you aren't on them: Make sure to include the install instructions. To install the CLI for this edge release, run: <!-- markdownlint-disable MD034 --> curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install-edge | sh And please check the [upgrade instructions](https://linkerd.io/2.12/tasks/upgrade/) for detailed steps on how to upgrade your cluster using either the CLI or Helm. Aftewards, include the full release notes. Liberally apply emoji. Ensure that you send a brief summary of the release in Linkerd Slack's channel.