xref: /aosp_15_r20/external/perfetto/docs/contributing/sdk-releasing.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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