# Perfetto UI Release Process

The UI has three release channels which are configured by the
[channels.json](/ui/release/channels.json) file. The channels are:

- `stable`, the version served by default on ui.perfetto.dev.
  Updated every four weeks.
- `canary`, a less stable but fresher release. Updated every 1-2 weeks.
- `autopush`, the current HEAD version of the UI. Unstable.

The release process is based around a four week cycle.

- Week 1: Update `canary` to `HEAD`.
- Week 2: Update `canary` to `HEAD`.
  Canary stabilization week 1/2 starts here.
  Only critical bug fixes can be cherry-picked onto `canary`.
- Week 3: Canary stabilization week 2/2.
- Week 4: Update `stable` to current `canary`, update `canary` to `HEAD`.

After the fourth week the cycle repeats from week one.
This is so that:

- Canary soaks for two weeks before being promoted to stable.
- Newer features can be tried out in Canary within a week, or two at most (if
  in the stabilization weeks).
- Stable users aren't disrupted more than once per month.

## Changing release channel

NOTE: The channel setting is persistent across page reloads.

The channel the UI is currently using is displayed in the top left corner.
If the tag after the logo shows `autopush` or `canary` that is the current channel
and if no tag is displayed the current channel is `stable`.

![perfetto-ui-channel.png](/docs/images/perfetto-ui-channel.png)

To change the channel the UI is using between `stable` and `canary` you can use the toggle on the [entrance page](https://ui.perfetto.dev).

![perfetto-ui-channel-toggle.png](/docs/images/perfetto-ui-channel-toggle.png)

To change to the `autopush` channel, open the `Flags` screen in the `Support`
section of the sidebar, and choose `Autopush` in `Release channel`.

![perfetto-ui-channel-autopush-toggle.png](/docs/images/perfetto-ui-channel-autopush-toggle.png)

## Which version am I using?

You can see the version of the UI you are currently using in the bottom left hand corner of the UI.

![perfetto-ui-version.png](/docs/images/perfetto-ui-version.png)

Clicking on the version number takes you to Github where you can see which commits are part of this version. The version number format is `v<maj>.<min>.<Commit SHA1 prefix>` where `<maj>.<min>` are extracted from the top entry in the
[CHANGELOG](/CHANGELOG).

## Cherry-picking a change

If a change needs to be backported onto canary or stable branches, do the
following:

```bash
git fetch origin
git co -b ui-canary -t origin/ui-canary
git cherry-pick -x $SHA1_OF_ORIGINAL_CL
git cl upload

# Repeat for origin/ui-stable branch if needed.
```

Once the cherry-picks are landed, send out a CL to update the
[channels.json](/ui/release/channels.json) in the `master` branch. See
[r.android.com/1726101](https://r.android.com/1726101) for an example.

```json
{
  "channels": [
    {
      "name": "stable",
      "rev": "6dd6756ffbdff4f845c4db28e1fd5aed9ba77b56"
      //     ^ This should point to the HEAD of origin/ui-stable.
    },
    {
      "name": "canary",
      "rev": "3e21f613f20779c04b0bcc937f2605b9b05556ad"
      //     ^ This should point to the HEAD of origin/ui-canary.
    },
    {
      "name": "autopush",
      "rev": "HEAD"
      //     ^ Don't touch this one.
    }
  ]
}
```

The state of `channels.json` in the other branches is irrelevant, the release
infrastructure only looks at the `master` branch to determine the pinning of
each channel.

After the `channels.json` CL lands, the build infrastructure will pick it up
and update ui.perfetto.dev within ~30 mins.

Googlers: You can check build progress and logs on
[go/perfetto-ui-build-status](http://go/perfetto-ui-build-status). See also
[go/perfetto-ui-autopush](http://go/perfetto-ui-autopush) and
[go/perfetto-ui-channels](http://go/perfetto-ui-channels) for the design docs of
the serving infrastructure.

## Publishing the Perfetto Chrome extension
Googlers: see go/perfetto-release-chrome-extension
