mirror of https://github.com/linkerd/linkerd2.git
Add release instructions (#7574)
Add instructions for releasing Linkerd Signed-off-by: Alex Leong <alex@buoyant.io>
This commit is contained in:
parent
e8d1f8f437
commit
2726557a6d
|
@ -0,0 +1,314 @@
|
|||
# Linkerd2 Release
|
||||
|
||||
This document contains instructions for releasing Linkerd2.
|
||||
|
||||
## 1. Bump the proxy version
|
||||
|
||||
Determine the commit SHA of the `linkerd2-proxy` repo to be included in the
|
||||
release. If
|
||||
[proxy-version](https://github.com/linkerd/linkerd2/blob/main/.proxy-version)
|
||||
is already at the desired SHA, skip to step 2.
|
||||
|
||||
If updating to `linkerd-proxy` HEAD, note the commit SHA at
|
||||
[latest.txt](https://build.l5d.io/linkerd2-proxy/latest.txt) (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.
|
||||
|
||||
## 2. Bump the proxy-init version
|
||||
|
||||
If the `linkerd2/proxy-init` project has a new release (which is rare), the
|
||||
following updates are needed:
|
||||
|
||||
- `go.mod`
|
||||
|
||||
```mod
|
||||
github.com/linkerd/linkerd2-proxy-init v1.2.0
|
||||
```
|
||||
|
||||
- `pkg/version/version.go` (this also implies changes in unit test fixtures)
|
||||
|
||||
```go
|
||||
var ProxyInitVersion = "v1.2.0"
|
||||
```
|
||||
|
||||
- `charts/linkerd2/values.yaml`
|
||||
|
||||
Upgrade the version in `global.proxyInit.image.version`
|
||||
|
||||
Create a new branch in the `linkerd2` repo,
|
||||
`username/proxy-init-version-bump`.
|
||||
|
||||
Open a pull request that includes the changes.
|
||||
|
||||
## 3. Create a minor releases branch
|
||||
|
||||
**This step only applies to minor stable releases (e.g. `2.9.1`).**
|
||||
|
||||
If it doesn't exist yet, create and push a branch in the `linkerd2` repo where
|
||||
all the minor releases for a given major release will reside:
|
||||
|
||||
```bash
|
||||
git checkout -b release/2.9
|
||||
git push -u origin release/2.9
|
||||
```
|
||||
|
||||
The branch in the following step should be based off of this one.
|
||||
|
||||
## 4. Create the release branch
|
||||
|
||||
Create a branch in the `linkerd2` repo, `username/edge-X.X.X` (replace with
|
||||
your name and the actual release number, optionally replace `edge` with
|
||||
`stable`).
|
||||
|
||||
## 5. Cherry pick changes from `main`
|
||||
|
||||
**This step only applies to minor stable releases (e.g. `2.9.1`).**
|
||||
|
||||
Locate all the commits in the git log that happened since the last stable
|
||||
release, that you'd like to include in the current minor stable release, and
|
||||
cherry-pick each one into the current branch using their corresponding SHAs:
|
||||
|
||||
```bash
|
||||
git cherry-pick ae34bcc2
|
||||
git cherry-pick b34effab
|
||||
git cherry-pick 223bd232
|
||||
...
|
||||
```
|
||||
|
||||
Each step might result in conflicts that you'll need to address.
|
||||
|
||||
## 6. Update the Helm charts versions
|
||||
|
||||
All the Helm charts (linkerd-crds, linkerd-control-plane, linkerd2-cni,
|
||||
linkerd-multicluster, linkerd-jaeger and linkerd-viz) have a `version` entry
|
||||
with a semver format `major.minor.patch[-edge]` that needs to be updated
|
||||
according to the following rules:
|
||||
|
||||
- patch bump for minor changes
|
||||
- minor bump for additions/removals
|
||||
- major bump for backwards-incompatible changes, most notably changes that
|
||||
change the structure of `values.yaml`
|
||||
|
||||
Note that edge releases require the `-edge` suffix, which should be removed when
|
||||
releasing stable releases.
|
||||
|
||||
Also note that the `appVersion` entry (for those charts that have it) is handled
|
||||
automatically by CI.
|
||||
|
||||
Finally, keep in mind chart version changes require updating the charts README
|
||||
files (through `bin/helm-docs`) and golden files (through `go test ./...
|
||||
-update`).
|
||||
|
||||
### linkerd-crds
|
||||
|
||||
Almost all the charts are always updated, at least because the docker image
|
||||
versions referred in their templates change with each release. One exception is
|
||||
`linkerd-crds`, which doesn't contain image references. So this chart only
|
||||
requires bumping its `version` if there were changes in its templates files.
|
||||
|
||||
## 7. Update the release notes
|
||||
|
||||
On this branch, add the release notes for this version in `CHANGES.md`.
|
||||
|
||||
Note: To see all of the changes since the previous release, run the command
|
||||
below in the `linkerd2` repo. If the last release was a stable release, be
|
||||
sure to use `stable-Y.Y.Y` instead of `edge-Y.Y.Y`.
|
||||
|
||||
```bash
|
||||
git log edge-Y.Y.Y..HEAD
|
||||
```
|
||||
|
||||
And this command in the `linkerd2-proxy` repo:
|
||||
|
||||
```bash
|
||||
git log release/vX.X.X..release/vY.Y.Y
|
||||
```
|
||||
|
||||
Where `release/vX.X.X` is the version of the proxy from the last release
|
||||
and `release/vY.Y.Y` is the version of the proxy for this release, e.g.:
|
||||
|
||||
```bash
|
||||
git log release/v2.102.0..release/v2.103.0
|
||||
```
|
||||
|
||||
## 8. Post a PR that includes the changes
|
||||
|
||||
If you're preparing a minor release, make sure the PR's merge target is the
|
||||
releases branch you created above (e.g. `releases/stable-2.9`). For the other
|
||||
cases the target should just be `main`.
|
||||
|
||||
This PR needs an approval from a "code owner." Feel free to ping one of the
|
||||
code owners if you've gotten feedback and approvals from other team members.
|
||||
|
||||
## 9. Optional: push images
|
||||
|
||||
To facilitate testing (particularly for stable releases) you might want to
|
||||
publish the docker images in your private repo.
|
||||
|
||||
First tag the release:
|
||||
|
||||
```bash
|
||||
git tag stable-2.9.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 "$GH_PAT" | docker login ghcr.io -u $GH_USERNAME --password-stdin
|
||||
```
|
||||
|
||||
Where `$GH_USERNAME` is your Github username and `$GH_PAT` 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
|
||||
DOCKER_REGISTRY=ghcr.io/$GH_USERNAME DOCKER_MULTIARCH=1 DOCKER_PUSH=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 step.
|
||||
|
||||
Now testers can pull the CLI binaries through this:
|
||||
|
||||
```bash
|
||||
DOCKER_REGISTRY=ghcr.io/$GH_USERNAME bin/docker-pull-binaries stable-2.9.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. Currently that flag doesn't
|
||||
apply to add-ons, so you need to also recur to the `--config` flag. Currently
|
||||
that only applies to Grafana:
|
||||
|
||||
```bash
|
||||
$ cat linkerd-overrides.yml
|
||||
grafana:
|
||||
enabled: true
|
||||
image:
|
||||
name: ghcr.io/alpeb/grafana
|
||||
|
||||
$ target/release/linkerd2-cli-stable-2.9.1-darwin install --registry ghcr.io/$GH_USERNAME --config ~/tmp/linkerd-overrides.yml
|
||||
```
|
||||
|
||||
## 10. Merge release notes branch, then create the release tag
|
||||
|
||||
After the review has passed and the branches from step 2 and 4 have been merged,
|
||||
follow the instructions below to properly create and push the release tag from
|
||||
the appropriate branch.
|
||||
|
||||
**Note**: The release script will create a GPG-signed tag, so users must have
|
||||
GPG signing setup in their local git config.
|
||||
|
||||
If performing an edge release then issue these commands. The appropriate tag
|
||||
will be automatically calculated:
|
||||
|
||||
```bash
|
||||
git checkout main
|
||||
git pull
|
||||
./bin/create-release-tag edge
|
||||
```
|
||||
|
||||
If performing a stable release then issue these commands instead (in this case
|
||||
you need to explicitly pass the version to be released):
|
||||
|
||||
```bash
|
||||
git checkout main
|
||||
git pull
|
||||
./bin/create-release-tag stable x.x.x
|
||||
```
|
||||
|
||||
In both cases follow the instructions on screen for pushing the tag upstream.
|
||||
|
||||
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/stable versions in the website
|
||||
- Retrieve the installation script from [run.linkerd.io](https://run.linkerd.io)
|
||||
and verify it installs the current version being released
|
||||
- Deploy the updated helm charts
|
||||
|
||||
You can locate the CI run [here](https://github.com/linkerd/linkerd2/actions).
|
||||
|
||||
## 11. Do a walkthrough verification of the release
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
- Install linkerd onto your cluster, and run a few CLI commands
|
||||
- Open the dashboard and click around
|
||||
- Click through to Grafana
|
||||
- When finished with this step, you may want to delete your `alias` to prevent
|
||||
confusion later
|
||||
|
||||
## 12. Send the announcement email
|
||||
|
||||
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:
|
||||
|
||||
- [linkerd-users](https://lists.cncf.io/g/cncf-linkerd-users/join)
|
||||
- [linkerd-announce](https://lists.cncf.io/g/cncf-linkerd-announce/join)
|
||||
- [linkerd-dev](https://lists.cncf.io/g/cncf-linkerd-dev/join)
|
||||
|
||||
Include the full release notes in the email. Liberally apply emoji. ⭐
|
||||
|
||||
## 13. Send an announcement to Linkerd Slack's #announcements channel
|
||||
|
||||
Ensure that you send a brief summary of the release in Linkerd Slack's
|
||||
[#announcement](https://linkerd.slack.com/messages/C0JV5E7BR) channel.
|
||||
|
||||
## 14. Add a community page announcement to the website repo
|
||||
|
||||
When doing a `stable-X.X.X` be sure to also include an announcement page for
|
||||
the Linkerd2 dashboard "Community" sidebar button.
|
||||
|
||||
In the [website](https://github.com/linkerd/website) repo:
|
||||
|
||||
1. Run `hugo new --contentDir linkerd.io/content/dashboard/ YYYYMMDD.md`
|
||||
2. Open the newly created file in your favorite editor and change the `title`
|
||||
to match the announcement email title.
|
||||
3. Remove the `draft: true` section in the file and then add a brief summary
|
||||
of the stable release.
|
||||
4. cd to the directory `linkerd.io`.
|
||||
5. Run `hugo serve` in the directory to test your changes.
|
||||
6. Verify your change by navigating to `http://localhost:1313/dashboard`. Make
|
||||
sure that the announcement appears at the top of the page.
|
||||
7. Once you are satisfied with your changes, Post the PR for review.
|
||||
Once merged, the change should deploy automatically.
|
Loading…
Reference in New Issue