# 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`. ## 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..` where `.` 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