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