This is the guide to conducting a Bazel release. This is especially relevant for
release managers, but will be of interest to anyone who is curious about the
release process.
Preface
For future reference and release managers - the release manager playbook should
be treated like an IKEA manual. That means: Do not try to be smart, optimize /
skip / reorder steps, otherwise chaos will ensue. Just follow it and the end
result will be.. well, a usable piece of furniture, or a Bazel release
(depending on the manual).
Like aviation and workplace safety regulations, the playbook is written in the
tears and blood of broken Bazelisks, pipelines, releases and Git branches.
Assume that every step is exactly there for a reason, even if it might not be
obvious. If you follow them to the letter, they are not error prone. Errors
have only happened in the past, when a release manager thought it's ok to
follow them by spirit instead. ;)
Make sure you are a member of the Bazel Release Managers team on GitHub.
Make sure you are a member of the Bazel release-managers
group on BuildKite. If that link does not work for you, ask one of the Buildkite org admins to add you to
the group.
Log in to the Gerrit UI to create an account: https://bazel-review.git.corp.google.com/ (without this step, you will see errors such as error_type: PERMISSION_DENIED_BY_GERRIT_ACL and "\'git push\' requires a Gerrit user account." when running the release script.
Preparing a new release
Create a release blockers milestone named "X.Y.Z release blockers" (case-sensitive), where we keep track of issues that must be resolved before the release goes out.
Set the (tentative) release date.
Add this description: Issues that need to be resolved before the X.Y.Z release..
Create the branch for the release. The branch should always be named release-X.Y.Z (the .Z part is important). Cherry-pick PRs will be sent against this branch.
The actual creation of the branch can be done via the GitHub UI or via the command line. For minor and patch releases, create the branch from the previous release tag, if possible. How we choose the base commit of the branch depends on the type of the release:
For patch releases (X.Y.Z where Z>0), the base commit should simply be X.Y.(Z-1).
For minor releases (X.Y.0 where Y>0), the base commit should typically be X.(Y-1).<current max Z>.
For major releases (X.0.0), the base commit is some "healthy" commit on the main branch.
This means that there's an extra step involved in preparing the release -- "cutting" the release branch, so to speak. For this, check the Bazel@HEAD+Downstream pipeline. The branch cut should happen on a green commit there; if the pipeline is persistently red, work with the Green Team to resolve it first and delay the branch cut as needed.
A first release candidate should immediately be created after the release branch is created. See create a release candidate below.
... (truncated)
Commits
f10e8f4 Bump braces from 3.0.2 to 3.0.3 in /dashboard/client (#1975)
7ad8440 Strip archive query strings in bcr_presubmit.py (#1974)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps bazelbuild/continuous-integration from 68dea4fe63a2ad44caaa8f3c44df19094b3dd395 to f10e8f4dc2fe8d25e56ebee6d2d9da51b43f58e7.
Changelog
Sourced from bazelbuild/continuous-integration's changelog.
... (truncated)
Commits
f10e8f4
Bump braces from 3.0.2 to 3.0.3 in /dashboard/client (#1975)7ad8440
Strip archive query strings in bcr_presubmit.py (#1974)516d4d5
Disable bes on macservice (#1973)7baf7db
Fix remote cache flags (#1972)3e1ccdc
Use GCS for caching builds running on MacService (#1971)076a6b8
Update some steps in the release process (#1969)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show