1# Perfetto UI Release Process 2 3The UI has three release channels which are configured by the 4[channels.json](/ui/release/channels.json) file. The channels are: 5 6- `stable`, the version served by default on ui.perfetto.dev. 7 Updated every four weeks. 8- `canary`, a less stable but fresher release. Updated every 1-2 weeks. 9- `autopush`, the current HEAD version of the UI. Unstable. 10 11The release process is based around a four week cycle. 12 13- Week 1: Update `canary` to `HEAD`. 14- Week 2: Update `canary` to `HEAD`. 15 Canary stabilization week 1/2 starts here. 16 Only critical bug fixes can be cherry-picked onto `canary`. 17- Week 3: Canary stabilization week 2/2. 18- Week 4: Update `stable` to current `canary`, update `canary` to `HEAD`. 19 20After the fourth week the cycle repeats from week one. 21This is so that: 22 23- Canary soaks for two weeks before being promoted to stable. 24- Newer features can be tried out in Canary within a week, or two at most (if 25 in the stabilization weeks). 26- Stable users aren't disrupted more than once per month. 27 28## Changing release channel 29 30NOTE: The channel setting is persistent across page reloads. 31 32The channel the UI is currently using is displayed in the top left corner. 33If the tag after the logo shows `autopush` or `canary` that is the current channel 34and if no tag is displayed the current channel is `stable`. 35 36 37 38To change the channel the UI is using between `stable` and `canary` you can use the toggle on the [entrance page](https://ui.perfetto.dev). 39 40 41 42To change to the `autopush` channel, open the `Flags` screen in the `Support` 43section of the sidebar, and choose `Autopush` in `Release channel`. 44 45 46 47## Which version am I using? 48 49You can see the version of the UI you are currently using in the bottom left hand corner of the UI. 50 51 52 53Clicking 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 54[CHANGELOG](/CHANGELOG). 55 56## Cherry-picking a change 57 58If a change needs to be backported onto canary or stable branches, do the 59following: 60 61```bash 62git fetch origin 63git co -b ui-canary -t origin/ui-canary 64git cherry-pick -x $SHA1_OF_ORIGINAL_CL 65git cl upload 66 67# Repeat for origin/ui-stable branch if needed. 68``` 69 70Once the cherry-picks are landed, send out a CL to update the 71[channels.json](/ui/release/channels.json) in the `main` branch. See 72[r.android.com/1726101](https://r.android.com/1726101) for an example. 73 74```json 75{ 76 "channels": [ 77 { 78 "name": "stable", 79 "rev": "6dd6756ffbdff4f845c4db28e1fd5aed9ba77b56" 80 // ^ This should point to the HEAD of origin/ui-stable. 81 }, 82 { 83 "name": "canary", 84 "rev": "3e21f613f20779c04b0bcc937f2605b9b05556ad" 85 // ^ This should point to the HEAD of origin/ui-canary. 86 }, 87 { 88 "name": "autopush", 89 "rev": "HEAD" 90 // ^ Don't touch this one. 91 } 92 ] 93} 94``` 95 96The state of `channels.json` in the other branches is irrelevant, the release 97infrastructure only looks at the `main` branch to determine the pinning of 98each channel. 99 100After the `channels.json` CL lands, the build infrastructure will pick it up 101and update ui.perfetto.dev within ~30 mins. 102 103Googlers: You can check build progress and logs on 104[go/perfetto-ui-build-status](http://go/perfetto-ui-build-status). See also 105[go/perfetto-ui-autopush](http://go/perfetto-ui-autopush) and 106[go/perfetto-ui-channels](http://go/perfetto-ui-channels) for the design docs of 107the serving infrastructure. 108 109## Publishing the Perfetto Chrome extension 110Googlers: see go/perfetto-release-chrome-extension 111