1*6dbdd20aSAndroid Build Coastguard Worker# Making a new SDK release 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard WorkerThis guide shows how to make a new Perfetto SDK release. 4*6dbdd20aSAndroid Build Coastguard Worker 5*6dbdd20aSAndroid Build Coastguard WorkerBefore snapshotting a release, check that no [release-blockers](http://b/savedsearches/5776355) are 6*6dbdd20aSAndroid Build Coastguard Workeropen. 7*6dbdd20aSAndroid Build Coastguard Worker 8*6dbdd20aSAndroid Build Coastguard WorkerCheck out the code: 9*6dbdd20aSAndroid Build Coastguard Worker 10*6dbdd20aSAndroid Build Coastguard Worker```bash 11*6dbdd20aSAndroid Build Coastguard Workergit clone https://android.googlesource.com/platform/external/perfetto 12*6dbdd20aSAndroid Build Coastguard Workercd perfetto 13*6dbdd20aSAndroid Build Coastguard Worker``` 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard WorkerNext, decide the version number for the new release (vX.Y). 16*6dbdd20aSAndroid Build Coastguard WorkerThe major version number (X) is incremented on every release (monthly). 17*6dbdd20aSAndroid Build Coastguard WorkerThe minor version number is incremented only for minor changes / fixes on top of the monthly 18*6dbdd20aSAndroid Build Coastguard Workerrelease (cherry-picks on the releases/vN.x branch). 19*6dbdd20aSAndroid Build Coastguard Worker 20*6dbdd20aSAndroid Build Coastguard WorkerContinue with the appropriate section below. 21*6dbdd20aSAndroid Build Coastguard Worker 22*6dbdd20aSAndroid Build Coastguard Worker## a) Creating a new major version 23*6dbdd20aSAndroid Build Coastguard Worker 24*6dbdd20aSAndroid Build Coastguard WorkerMake sure that the current main branch builds on 25*6dbdd20aSAndroid Build Coastguard Worker[LUCI](https://luci-scheduler.appspot.com/jobs/perfetto) by triggering all the 26*6dbdd20aSAndroid Build Coastguard Workerbuilds and waiting for their success. If any of the builds fail, fix the failure 27*6dbdd20aSAndroid Build Coastguard Workeron main before proceeding. 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard WorkerCreate an entry in CHANGELOG with the new major version: this usually involves 30*6dbdd20aSAndroid Build Coastguard Workerrenaming the "Unreleased" entry to the version number you chose earlier 31*6dbdd20aSAndroid Build Coastguard Worker([example](https://r.android.com/2417175)). 32*6dbdd20aSAndroid Build Coastguard Worker 33*6dbdd20aSAndroid Build Coastguard WorkerTest that the perfetto build tools can parse the CHANGELOG: after building, 34*6dbdd20aSAndroid Build Coastguard Workerrunning `perfetto --version` should show your new version number. 35*6dbdd20aSAndroid Build Coastguard Worker 36*6dbdd20aSAndroid Build Coastguard WorkerUpload the CHANGELOG change and submit it on the main branch. 37*6dbdd20aSAndroid Build Coastguard Worker 38*6dbdd20aSAndroid Build Coastguard WorkerCreate a release branch for the new major version ("v16.x" here): 39*6dbdd20aSAndroid Build Coastguard Worker 40*6dbdd20aSAndroid Build Coastguard Worker```bash 41*6dbdd20aSAndroid Build Coastguard Workergit fetch origin 42*6dbdd20aSAndroid Build Coastguard Workergit push origin origin/main:refs/heads/releases/v16.x 43*6dbdd20aSAndroid Build Coastguard Workergit fetch origin 44*6dbdd20aSAndroid Build Coastguard Workergit checkout -b releases/v16.x -t origin/releases/v16.x 45*6dbdd20aSAndroid Build Coastguard Worker``` 46*6dbdd20aSAndroid Build Coastguard Worker 47*6dbdd20aSAndroid Build Coastguard WorkerContinue with [building the release](#building-and-tagging-the-release). 48*6dbdd20aSAndroid Build Coastguard Worker 49*6dbdd20aSAndroid Build Coastguard Worker## b) Bumping the minor version 50*6dbdd20aSAndroid Build Coastguard Worker 51*6dbdd20aSAndroid Build Coastguard WorkerCheck out the existing release branch ("5.x" here) and merge in the desired 52*6dbdd20aSAndroid Build Coastguard Workerrevision for the new release, resolving any conflicts you may encounter. 53*6dbdd20aSAndroid Build Coastguard Worker 54*6dbdd20aSAndroid Build Coastguard Worker```bash 55*6dbdd20aSAndroid Build Coastguard Workergit checkout -b releases/v16.x -t origin/releases/v16.x 56*6dbdd20aSAndroid Build Coastguard Worker``` 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard WorkerIf you only want to introduce one or two patches in the new release, consider 59*6dbdd20aSAndroid Build Coastguard Workercherry-picking them individually: 60*6dbdd20aSAndroid Build Coastguard Worker 61*6dbdd20aSAndroid Build Coastguard Worker```bash 62*6dbdd20aSAndroid Build Coastguard Workergit cherry-pick <sha1> 63*6dbdd20aSAndroid Build Coastguard Worker``` 64*6dbdd20aSAndroid Build Coastguard Worker 65*6dbdd20aSAndroid Build Coastguard WorkerOtherwise, you can do a full merge: 66*6dbdd20aSAndroid Build Coastguard Worker 67*6dbdd20aSAndroid Build Coastguard Worker```bash 68*6dbdd20aSAndroid Build Coastguard Workergit merge <sha1> 69*6dbdd20aSAndroid Build Coastguard Worker``` 70*6dbdd20aSAndroid Build Coastguard Worker 71*6dbdd20aSAndroid Build Coastguard WorkerUpdate the CHANGELOG with a dedicated entry for the new minor version. 72*6dbdd20aSAndroid Build Coastguard WorkerThis is important because the 73*6dbdd20aSAndroid Build Coastguard Worker[write_version_header.py](/tools/write_version_header.py) script, which is 74*6dbdd20aSAndroid Build Coastguard Workerinvoked by the build system, looks at the CHANGELOG to work out the latest 75*6dbdd20aSAndroid Build Coastguard Workerv${maj}.${min} version. 76*6dbdd20aSAndroid Build Coastguard Worker 77*6dbdd20aSAndroid Build Coastguard WorkerFor an example see [r.android.com/1730332](https://r.android.com/1730332) 78*6dbdd20aSAndroid Build Coastguard Worker 79*6dbdd20aSAndroid Build Coastguard Worker```txt 80*6dbdd20aSAndroid Build Coastguard Workerv16.1 - 2021-06-08: 81*6dbdd20aSAndroid Build Coastguard Worker Tracing service and probes: 82*6dbdd20aSAndroid Build Coastguard Worker * Cherry-pick of r.android.com/1716718 which missed the v16 branch ... . 83*6dbdd20aSAndroid Build Coastguard Worker 84*6dbdd20aSAndroid Build Coastguard Worker 85*6dbdd20aSAndroid Build Coastguard Workerv16.0 - 2021-06-01: 86*6dbdd20aSAndroid Build Coastguard Worker ... 87*6dbdd20aSAndroid Build Coastguard Worker``` 88*6dbdd20aSAndroid Build Coastguard Worker 89*6dbdd20aSAndroid Build Coastguard Worker## Building and tagging the release 90*6dbdd20aSAndroid Build Coastguard Worker 91*6dbdd20aSAndroid Build Coastguard Worker1. Generate and commit the amalgamated source files. 92*6dbdd20aSAndroid Build Coastguard Worker 93*6dbdd20aSAndroid Build Coastguard Worker```bash 94*6dbdd20aSAndroid Build Coastguard Workertools/gen_amalgamated --output sdk/perfetto 95*6dbdd20aSAndroid Build Coastguard Workergit add sdk/perfetto.{cc,h} 96*6dbdd20aSAndroid Build Coastguard Workergit commit -m "Amalgamated source for vX.Y" 97*6dbdd20aSAndroid Build Coastguard Worker``` 98*6dbdd20aSAndroid Build Coastguard Worker 99*6dbdd20aSAndroid Build Coastguard Worker2. Check that the SDK example code works with the new release. 100*6dbdd20aSAndroid Build Coastguard Worker 101*6dbdd20aSAndroid Build Coastguard Worker```bash 102*6dbdd20aSAndroid Build Coastguard Workercd examples/sdk 103*6dbdd20aSAndroid Build Coastguard Workercmake -B build 104*6dbdd20aSAndroid Build Coastguard Workercmake --build build 105*6dbdd20aSAndroid Build Coastguard Worker``` 106*6dbdd20aSAndroid Build Coastguard Worker 107*6dbdd20aSAndroid Build Coastguard Worker3. Upload the new release for review. 108*6dbdd20aSAndroid Build Coastguard Worker 109*6dbdd20aSAndroid Build Coastguard Worker```bash 110*6dbdd20aSAndroid Build Coastguard Workergit cl upload --no-squash --bypass-hooks -o banned-words~skip 111*6dbdd20aSAndroid Build Coastguard Worker``` 112*6dbdd20aSAndroid Build Coastguard Worker 113*6dbdd20aSAndroid Build Coastguard WorkerIf you get an error about a missing Change-Id field (`remote: ERROR: commit 114*6dbdd20aSAndroid Build Coastguard Workera7c7c4c: missing Change-Id in message footer`), install the commit-msg hook 115*6dbdd20aSAndroid Build Coastguard Workerscript and amend the change to make sure that field is present: 116*6dbdd20aSAndroid Build Coastguard Worker 117*6dbdd20aSAndroid Build Coastguard Worker```bash 118*6dbdd20aSAndroid Build Coastguard Workercurl -Lo .git/hooks/commit-msg http://android-review.googlesource.com/tools/hooks/commit-msg 119*6dbdd20aSAndroid Build Coastguard Workerchmod u+x .git/hooks/commit-msg 120*6dbdd20aSAndroid Build Coastguard Workergit commit --amend 121*6dbdd20aSAndroid Build Coastguard Worker``` 122*6dbdd20aSAndroid Build Coastguard Worker 123*6dbdd20aSAndroid Build Coastguard Worker4. Once the release has been reviewed and landed, create and push the tag for 124*6dbdd20aSAndroid Build Coastguard Worker it ("vX.Y" being the new version). 125*6dbdd20aSAndroid Build Coastguard Worker 126*6dbdd20aSAndroid Build Coastguard Worker```bash 127*6dbdd20aSAndroid Build Coastguard Worker# This brings the branch up to date with the CL landed in the step above. 128*6dbdd20aSAndroid Build Coastguard Workergit pull 129*6dbdd20aSAndroid Build Coastguard Worker 130*6dbdd20aSAndroid Build Coastguard Workergit status 131*6dbdd20aSAndroid Build Coastguard Worker# Should print: Your branch is up to date with 'origin/releases/v16.x'. 132*6dbdd20aSAndroid Build Coastguard Worker# Do NOT proceed if your branch has diverged from origin/releases/vX.X 133*6dbdd20aSAndroid Build Coastguard Worker 134*6dbdd20aSAndroid Build Coastguard Workergit tag -a -m "Perfetto vX.Y" vX.Y 135*6dbdd20aSAndroid Build Coastguard Workergit push origin vX.Y 136*6dbdd20aSAndroid Build Coastguard Worker``` 137*6dbdd20aSAndroid Build Coastguard Worker 138*6dbdd20aSAndroid Build Coastguard Worker5. Update the documentation to point to the latest release. 139*6dbdd20aSAndroid Build Coastguard Worker 140*6dbdd20aSAndroid Build Coastguard Worker - [docs/instrumentation/tracing-sdk.md](/docs/instrumentation/tracing-sdk.md) 141*6dbdd20aSAndroid Build Coastguard Worker - [examples/sdk/README.md](/examples/sdk/README.md) 142*6dbdd20aSAndroid Build Coastguard Worker 143*6dbdd20aSAndroid Build Coastguard Worker6. Send an email with the CHANGELOG to perfetto-dev@ (internal) and to the 144*6dbdd20aSAndroid Build Coastguard Worker [public perfetto-dev](https://groups.google.com/forum/#!forum/perfetto-dev). 145*6dbdd20aSAndroid Build Coastguard Worker 146*6dbdd20aSAndroid Build Coastguard Worker## Creating a GitHub release with prebuilts 147*6dbdd20aSAndroid Build Coastguard Worker 148*6dbdd20aSAndroid Build Coastguard Worker7. Within few mins the LUCI scheduler will trigger builds of prebuilt binaries 149*6dbdd20aSAndroid Build Coastguard Worker on https://luci-scheduler.appspot.com/jobs/perfetto . Wait for all the bots 150*6dbdd20aSAndroid Build Coastguard Worker to have completed successfully and be back into the WAITING state. 151*6dbdd20aSAndroid Build Coastguard Worker 152*6dbdd20aSAndroid Build Coastguard Worker8. Run `tools/package-prebuilts-for-github-release vX.Y`. It will pull the 153*6dbdd20aSAndroid Build Coastguard Worker prebuilts under `/tmp/perfetto-prebuilts-vX.Y`. 154*6dbdd20aSAndroid Build Coastguard Worker - There must be 10 zips in total: linux-{arm,arm64,amd64}, 155*6dbdd20aSAndroid Build Coastguard Worker android-{arm,arm64,x86,x64}, mac-{amd64,arm64}, win-amd64. 156*6dbdd20aSAndroid Build Coastguard Worker - If one or more are missing it means that one of the LUCI bots failed, 157*6dbdd20aSAndroid Build Coastguard Worker check the logs (follow the "Task URL: " link) from the invocation log. 158*6dbdd20aSAndroid Build Coastguard Worker - If this happens you'll need to respin a vX.(Y+1) release with the fix 159*6dbdd20aSAndroid Build Coastguard Worker (look at the history v20.1, where a Windows failure required a respin). 160*6dbdd20aSAndroid Build Coastguard Worker 161*6dbdd20aSAndroid Build Coastguard Worker9. Open https://github.com/google/perfetto/releases/new and 162*6dbdd20aSAndroid Build Coastguard Worker - Select "Choose Tag" -> vX.Y 163*6dbdd20aSAndroid Build Coastguard Worker - "Release title" -> "Perfetto vX.Y" 164*6dbdd20aSAndroid Build Coastguard Worker - "Describe release" -> Copy the CHANGELOG, wrapping it in triple backticks. 165*6dbdd20aSAndroid Build Coastguard Worker - "Attach binaries" -> Attach the ten .zip files from the previous step. 166*6dbdd20aSAndroid Build Coastguard Worker 167*6dbdd20aSAndroid Build Coastguard Worker10. Run `tools/roll-prebuilts vX.Y`. It will update the SHA256 into the various 168*6dbdd20aSAndroid Build Coastguard Worker scripts under `tools/`. Upload a CL with the changes. 169*6dbdd20aSAndroid Build Coastguard Worker 170*6dbdd20aSAndroid Build Coastguard Worker11. Phew, you're done! 171