# Bazel Release Playbook

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. ;)
> 
> -- @philwo

## Setup

Do this once.

*   Make sure you are a member of the Bazel [release-managers](https://buildkite.com/organizations/bazel-trusted/teams/release-managers/members)
    group.  If that link does not work for you, ask one of the Buildkite org admins to add you to
    the group.
*   Set up github ssh key if you haven't already.
    *    https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/
        
Do these steps once per release.

*   Find baseline commit and cherrypicks
    *    Check Bazel nightly build at
         https://buildkite.com/bazel/bazel-with-downstream-projects-bazel. If
         many downstream jobs are failing then this is not a good baseline
         commit. If only a few downstream jobs are failing and the issues are
         known then this is a good baseline commit. Fixes for the known issues
         should be cherry-picked, any remaining issues should become release
         blockers.
*   Begin the [internal release process](http://go/bazel-internal-launch-checklist), too.

## Release issue

Each release has a tracking bug (see the
[list](https://github.com/bazelbuild/bazel/issues?utf8=%E2%9C%93&q=label%3Arelease+)).
The last and the next releases should be pinned. The bug includes a "Target RC
date". On that day, create a new release candidate.

A milestone should also be [created](https://github.com/bazelbuild/bazel/milestones/new)
for the release to keep track of any release blocking issues. ([Example](https://github.com/bazelbuild/bazel/milestone/31))

The release manager adds a comment to the issue with the following content:

```
# Status of Bazel X.Y

- Target baseline: [date]
- Expected release date: [date]
- [List of release blockers](link-to-milestone)

To report a release-blocking bug, please add it to the release blocker milestone above, and cc me.

Task list:

- [ ] Pick release baseline:
- [ ] Create release candidate:
- [ ] Check downstream projects:
- [ ] [Create draft release announcement](https://docs.google.com/document/d/1wDvulLlj4NAlPZamdlEVFORks3YXJonCjyuQMUQEmB0/edit)
- [ ] Send for review the release announcement PR:
- [ ] Push the release, notify package maintainers:
- [ ] Update the documentation
- [ ] Push the blog post
- [ ] Update the [release page](https://github.com/bazelbuild/bazel/releases/)
```

Keep the task list updated and check boxes as you follow the release process. [Example](https://github.com/bazelbuild/bazel/issues/7816#issuecomment-497037232).

## Create a Candidate

Create candidates with the `release.sh` script. See above how to pick a good baseline commit.

*  If it's the first candidate for this version, run:

    ```bash
    RELEASE_NUMBER=<CURRENT RELEASE NUMBER x.yy.z>
    BASELINE_COMMIT=01234567890abcdef # From the Setup phase
    git clone https://github.com/bazelbuild/bazel.git ~/bazel-release-$RELEASE_NUMBER
    cd ~/bazel-release-$RELEASE_NUMBER
    scripts/release/release.sh create $RELEASE_NUMBER $BASELINE_COMMIT [CHERRY_PICKS...]
    ```

    Note that the three-digit version is important: "0.19.0". not "0.19".

*  For cherry-picks, you need `--force_rc=N` where `N` is the number of the
    release candidate of `$RELEASE_NUMBER`. For example, the first time you do a
    cherry-pick (after the initial candidate), N will be 2.

    ```bash
    scripts/release/release.sh create --force_rc=2 $RELEASE_NUMBER $BASELINE_COMMIT [CHERRY_PICKS...]
    ```

*  If you already did some cherry-picks and you want to add more, use "git log"
    to find the latest commit (this corresponds to the last cherry-pick commit).
    Use that as the new baseline and list the new cherry-picks to add on top. Or
    simply re-use the same baseline and cherrypicks from the previous candidate,
    and add the new cherrypicks.

    ```bash
    scripts/release/release.sh create --force_rc=3 $RELEASE_NUMBER NEW_BASELINE_COMMIT [NEW_CHERRY_PICKS...]
    ```

Resolve conflicts if there are any, type `exit` when you are done, then the script will continue.
WARNING: `release.sh create` handles conflicts in a subshell (which is why you need to type `exit`).

Editing the release notes is not needed (it will be done later).

## Push the candidate

1.  Run `release.sh push`. This uploads the candidate and starts the release
    process on BuildKite.

    ```bash
    scripts/release/release.sh push
    ```

1.  Update GitHub issue with the command that was run and the new candidate name
    (ie, 0.19.1rc3). Update the issue with the estimated release date, assuming no
    regression is found.

1.  Check BuildKite results at https://buildkite.com/bazel-trusted/bazel-release. You should
    see the `release-$RELEASE_NUMBER` branch here and a new build running for
    your release.

1.  Check the postsubmit test run for the release branch to ensure that all
    tests on all platforms pass with the version you're about to release.

    *   Go to https://buildkite.com/bazel/bazel-bazel and find the
        `release-$RELEASE_NUMBER` branch in the list. A build should
        automatically run. Make sure that it passes.

1.  When it all looks good, go back to the job in the
    [release pipeline](https://buildkite.com/bazel-trusted/bazel-release/builds),
    click "Deploy release artifacts" for the deployment step.

    *   This will upload the release candidate binaries to GitHub and our 
        apt-get repository. The github link is probably of the form:
        https://releases.bazel.build/3.6.0/rc1/index.html

1.  If that worked, click on the "Generate announcement mail text" step to unblock it.
    If it's the first release candidate, prepare the release announcement (see
    next section).

1.  Copy & paste the generated text into a new e-mail and send it. If you're
    creating a new release candidate, reply to the previous e-mail to keep all
    the information in one thread.
    *   The first line is the recipient address.
    *   The second line is the subject.
    *   The rest is the body of the message.
    *   Replace the generated notes with a link to the release announcement draft.
       `https://docs.google.com/document/d/1wDvulLlj4NAlPZamdlEVFORks3YXJonCjyuQMUQEmB0/view`

1.  Trigger a new pipeline in BuildKite to test the release candidate with all the downstream projects.
    *   Go to https://buildkite.com/bazel/bazel-with-downstream-projects-bazel
    *   Click "New Build", then fill in the fields like this:
        *   Message: Test Release-3.0.0rc2 (Or any message you like)
        *   Commit: HEAD
        *   Branch: release-3.0.0rc2

1.  Look for failing projects in red.
    *   Compare the results with the latest Bazel release:
        *   Jobs built with the latest Bazel:
            https://buildkite.com/bazel?team=bazel
        *   Jobs built with release candidate: e.g.
            https://buildkite.com/bazel/bazel-with-downstream-projects-bazel/builds/287

        If a project is failing with release candidate but not with the latest
        Bazel release, then there's probably a regression in the candidate. Ask
        the Bazel sheriff if the problem is already noticed. If not, find out
        the culprit, file an issue at
        https://github.com/bazelbuild/bazel/issues and mark it as release
        blocker.

        If a project is failing with both release candidate and the latest Bazel
        release, it could be a breakage from the project itself. Go through the
        build history (eg.
        [TensorFlow_serving](https://buildkite.com/bazel/tensorflow-serving/builds?page=2))
        to confirm this, then file an issue to their owners.

    *   File bugs (**TODO: how to find the owner/project link?**)

1.  Once issues are fixed, create a new candidate with the relevant cherry-picks.

## Google-internal launch review

Once the first candidate is available:

1.  Follow the steps in [go/bazel-internal-launch-checklist](http://goto.google.com/bazel-internal-launch-checklist) to kick-off Google's internal launch review process.

## Release announcement

The release manager is responsible for the [draft release
announcement](https://docs.google.com/document/d/1wDvulLlj4NAlPZamdlEVFORks3YXJonCjyuQMUQEmB0/edit).

Once the first candidate is available:

1.  Open the doc, create a new section with your release number, add a link to
    the GitHub issue.
1.  Copy & paste the generated text from the "Generate Announcement" step.
1.  Reorganize the notes per category (C++, Java, etc.).
1.  For each category, add a comment and assign it to the corresponding
    [team contact](https://www.bazel.build/maintainers-guide.html#team-labels):
    "+person for review (see guidelines at the top of the doc)".
1.  Send an email to [bazel-dev](https://groups.google.com/forum/#!forum/bazel-dev) for
    additional reviews.
1.  Assign a comment to "+[aiuto@google.com](mailto:aiuto@google.com)"
    and "+[daroberts@google.com](mailto:daroberts@google.com)"
    for a global review.

After a few days of iteration:

1.  Make sure all comments have been resolved, and the text follows the
    guidelines (see "How to review the notes?" in the document).
1.  Send a pull request to [bazel-blog](https://github.com/bazelbuild/bazel-blog/).

## Release requirements

1.  The release announcement must be ready (the pull request has been reviewed).
1.  Verify that the [conditions outlined in our policy](https://bazel.build/support.html#policy) **all apply**. As of
    May 2019 those were the following, but _double check_ that they have not changed since then.
    1.  at least **1 week passed since you pushed RC1**, and
    1.  at least **2 business days passed since you pushed the last RC**, and
    1.  there are **no open ["Release blocking" Bazel bugs](https://github.com/bazelbuild/bazel/labels/Release%20blocker)** on GitHub.

## Push a release

1.  Generate a new identifier: https://bazel.googlesource.com/new-password (and paste the code in your shell).
    This is only necessary the first time you handle a release.
1.  **Push the final release (do not cancel midway)**:

    ```bash
    scripts/release/release.sh release
    ```
    
    **Warning**: If this process is interrupted for any reason, please check the following before running:
      * Both `release-x.x.xrcN` and `master` branch are restored to the previous clean state (without addtional release commits).
      * Release tag is deleted locally (`git tag -d x.x.x`), otherwise rerun will cause an error that complains the tag already exists.

1.  A CI job is uploading the release artifacts to GitHub. Look for the release
    workflow on https://buildkite.com/bazel-trusted/bazel-release/. Unblock the steps.

1.  Ensure all binaries were uploaded to GitHub properly.
    1.  **Why?** Sometimes binaries are uploaded incorrectly.
    1.  **How?** Go to the [GH releases page](https://github.com/bazelbuild/bazel/releases),
        click "Edit", see if there's a red warning sign next to any binary. You
        need to manually upload those; get them from
        `https://storage.googleapis.com/bazel/$RELEASE_NUMBER/release/index.html`.
1.  Update the release bug:
    1.  State the fact that you pushed the release
    1.  Ask the package maintainers to update the package definitions:
        [@vbatts](https://github.com/vbatts) [@petemounce](https://github.com/petemounce) [@excitoon](https://github.com/excitoon)
    1.  Example: [https://github.com/bazelbuild/bazel/issues/3773#issuecomment-352692144]
1.  Publish versioned documentation
    1.  Fetch the git tag for the release: `git fetch --tags`
    1.  Do a checkout to that tag: `git checkout $RELEASE_NUMBER`
        1. You should see this message (e.g. for 0.21.0):

        ```
        $ git checkout 0.21.0
        Note: checking out '0.21.0'.

        You are in 'detached HEAD' state. You can look around, make experimental
        changes and commit them, and you can discard any commits you make in this
        state without impacting any branches by performing another checkout.

        If you want to create a new branch to retain commits you create, you may
        do so (now or later) by using -b with the checkout command again. Example:

        git checkout -b <new-branch-name>

        HEAD is now at defd737761 Release 0.21.0 (2018-12-19)
        ```
    1.  [Install `gsutil`](https://cloud.google.com/storage/docs/gsutil_install)
        and ensure you have access to the `bazel-public` GCP project.
    1.  Run `scripts/docs/generate_versioned_docs.sh`. If you get interrupted,
        it is safe to re-run the script. This script will build the web assets
        for the documentation, generate a tarball from them, and push the
        tarball to Google Cloud Storage.
        * The script will fail to run if you're not in a git checkout of a
          release.
        * If the tarball has already been pushed to GCS, this script will not
          overwrite the existing tarball.
    1.  Update `site/_config.yml` and `scripts/docs/doc_versions.bzl` with `$RELEASE_NUMBER`.
         1. `site/_config.yml`: set `version:` to `$RELEASE_NUMBER` and add `$RELEASE_NUMBER` to `doc_versions:`.
         1. `scripts/docs/doc_versions.bzl`: add the following list item to `DOC_VERSIONS`
            <pre>
            {
               "version": "<i>$RELEASE_NUMBER</i>",
               "sha256": "<i>result of `sha256sum bazel-bin/site/jekyll-tree.tar`</i>",
            },
            </pre>
         1. After the changes are submitted, it will take 30 mins-1 hour for them to show up on bazel.build.

1.  Merge the blog post pull request.
    1.  Make sure you update the date in your post (and the path) to reflect when
    it is actually published.
    1.  **Note:** The blog sometimes takes time to update the homepage, so use
    the full path to your post to check that it is live.
1.  Update the [release page](https://github.com/bazelbuild/bazel/releases/) to
    replace the generated notes with a link to the blog post.
1.  Close the release-tracking bug. If you need to do a patch release, create a
    new tracking bug.

### Updating Google's internal mirror

Please ping @philwo and @meteorcloudy to copy the release binary to their
internal mirror.


### Updating the Homebrew recipe

[Homebrew](http://brew.sh/index.html) is a package manager for OS X. This
section assumes that you are on a Mac OS machine with homebrew installed.

To update the `bazel` recipe on Homebrew, you can send a pull request to
https://github.com/Homebrew/homebrew-core/blob/master/Formula/bazel.rb.

Example: https://github.com/Homebrew/homebrew-core/pull/57966

However, usually the Homebrew community takes care of this reasonably
quickly, so feel free to skip this step, if you aren't familiar with it.


### Updating the Chocolatey package

As of November 2016, this is done by an external contributor,
[@petemounce](https://github.com/petemounce) on GitHub. Ping him when there's a
new release coming out.


### Updating the Scoop pakage

As of February 2019, this is done by an external contributor,
[@excitoon](https://github.com/excitoon) on GitHub. [Ping him](http://telegram.me/excitoon) when there's a
new release coming out.


### Updating the Fedora package

This is done by an external contributor, [@vbatts](https://github.com/vbatts) on
GitHub. Ping him when there's a new release coming out.
