| # Making a new SDK release | 
 |  | 
 | This guide shows how to make a new Perfetto SDK release. | 
 |  | 
 | Before snapshotting a release, check that no [release-blockers](http://b/savedsearches/5776355) are | 
 | open. | 
 |  | 
 | Check out the code: | 
 |  | 
 | ```bash | 
 | git clone https://android.googlesource.com/platform/external/perfetto | 
 | cd perfetto | 
 | ``` | 
 |  | 
 | Next, decide the version number for the new release (vX.Y). | 
 | The major version number (X) is incremented on every release (monthly). | 
 | The minor version number is incremented only for minor changes / fixes on top of the monthly | 
 | release (cherry-picks on the releases/vN.x branch).  | 
 |  | 
 | Continue with the appropriate section below. | 
 |  | 
 | ## a) Creating a new major version | 
 |  | 
 | Create a release branch for the new major version ("v15.x" here): | 
 |  | 
 | ```bash | 
 | git fetch origin | 
 | git push origin origin/master:refs/heads/releases/v15.x | 
 | git fetch origin | 
 | git checkout -b releases/v15.x -t origin/releases/v15.x | 
 | ``` | 
 |  | 
 | Continue with [building the release](#building-and-tagging-the-release). | 
 |  | 
 | ## b) Bumping the minor version | 
 |  | 
 | Check out the existing release branch ("5.x" here) and merge in the desired | 
 | revision for the new release, resolving any conflicts you may encounter. | 
 |  | 
 | ```bash | 
 | git checkout -b releases/v15.x -t origin/releases/v15.x | 
 | ``` | 
 |  | 
 | If you only want to introduce one or two patches in the new release, consider | 
 | cherry-picking them individually: | 
 |  | 
 | ```bash | 
 | git cherry-pick <sha1> | 
 | ``` | 
 |  | 
 | Otherwise, you can do a full merge: | 
 |  | 
 | ```bash | 
 | git merge <sha1> | 
 | ``` | 
 |  | 
 | ## Building and tagging the release | 
 |  | 
 | 1. Generate and commit the amalgamated source files. | 
 |  | 
 | ```bash | 
 | tools/gen_amalgamated --output sdk/perfetto | 
 | git add sdk/perfetto.{cc,h} | 
 | git commit -m "Amalgamated source for vX.Y" | 
 | ``` | 
 |  | 
 | 2. Check that the SDK example code works with the new release. | 
 |  | 
 | ```bash | 
 | cd examples/sdk | 
 | cmake -B build | 
 | cmake --build build | 
 | ``` | 
 |  | 
 | 3. Upload the new release for review. | 
 |  | 
 | ```bash | 
 | git cl upload --no-squash | 
 | ``` | 
 |  | 
 | If you get an error about a missing Change-Id field (`remote: ERROR: commit | 
 | a7c7c4c: missing Change-Id in message footer`), install the commit-msg hook | 
 | script and amend the change to make sure that field is present: | 
 |  | 
 | ```bash | 
 | curl -Lo .git/hooks/commit-msg http://android-review.googlesource.com/tools/hooks/commit-msg | 
 | chmod u+x .git/hooks/commit-msg | 
 | git commit --amend | 
 | ``` | 
 |  | 
 | 4. Once the release has been reviewed and landed, create and push the tag for | 
 |    it ("vX.Y" being the new version). | 
 |  | 
 | ```bash | 
 | # This brings the branch up to date with the CL landed in the step above. | 
 | git pull | 
 |  | 
 | git status | 
 | # Should print: Your branch is up to date with 'origin/releases/v15.x'. | 
 | # Do NOT proceed if your branch has diverged from origin/releases/vX.X | 
 |  | 
 | git tag -a -m "Perfetto vX.Y" vX.Y | 
 | git push origin vX.Y | 
 | ``` | 
 |  | 
 | 5. Update the documentation to point to the latest release. | 
 |  | 
 |    - [docs/instrumentation/tracing-sdk.md](/docs/instrumentation/tracing-sdk.md) | 
 |    - [examples/sdk/README.md](/examples/sdk/README.md) | 
 |  | 
 | Phew, you're done! |