| # Perfetto UI Release Process |
| |
| The UI has three release channels. Each channel is served from the HEAD of a |
| long-lived branch: |
| |
| - `stable`, the version served by default on ui.perfetto.dev. |
| Served from the `stable` branch and updated every four weeks. |
| - `canary`, a less stable but fresher release. Updated every 1-2 weeks. |
| Served from the `canary` branch. |
| - `autopush`, the current HEAD version of the UI. Unstable. Served from the |
| `main` branch. |
| |
| The release process is based around a four week cycle. |
| |
| - Week 1: Cut `canary` from `main`. |
| - Week 2: Cut `canary` from `main`. |
| 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: Promote current `canary` to `stable`, then cut `canary` from `main`. |
| |
| 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`. |
| |
|  |
| |
| 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). |
| |
|  |
| |
| To change to the `autopush` channel, open the `Flags` screen in the `Support` |
| section of the sidebar, and choose `Autopush` in `Release channel`. |
| |
|  |
| |
| ## 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. |
| |
|  |
| |
| 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 checkout -b cherry-pick-canary origin/canary |
| git cherry-pick -x $SHA1_OF_ORIGINAL_CL |
| git cl upload |
| |
| # Repeat from origin/stable if needed. |
| ``` |
| |
| Once the cherry-pick lands on `canary` or `stable`, the push to that branch |
| triggers Cloud Build for the corresponding UI channel. There is no separate |
| channel pinning file to update. |
| |
| To do the normal release-channel moves, use the GitHub Actions workflows: |
| |
| - `Cut canary (open PR merging main -> canary)` opens a PR against `canary`. |
| When that PR is merged, Cloud Build redeploys the canary channel. |
| - `Promote to stable (open PR merging canary -> stable)` opens a PR against |
| `stable`. When that PR is merged, Cloud Build redeploys the stable channel |
| and `tag-on-stable-push.yml` creates the release tag and draft release. |
| |
| 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 |