|
1 | 1 | # Release procedure |
2 | 2 |
|
3 | | -- Update [version_history.md](docs/root/version_history.md). |
| 3 | +## Preparation |
| 4 | + |
| 5 | +- Consolidate the [release notes](docs/root/version_history.md). |
4 | 6 | - Make sure breaking changes are explicitly called out. |
5 | 7 | Ideally these have been tracked on the go but it does not hurt to ask around and double |
6 | 8 | check. Running the python integration tests of the previous release with the latest binaries could serve as a double check for this. |
7 | 9 | - Ensure the release notes are complete. Ideally these have been tracked on the go. |
8 | | -- Perform some thorough testing to double down on stability. |
| 10 | +- Based on our [semantic versioning](https://semver.org/spec/v2.0.0.html) strategy, our release numbers look like `MAJOR.MINOR.PATCH`. Determine the release type to come up with what the next version should look like: |
| 11 | + - Breaking changes increment `MAJOR`, and reset `MINOR.PATCH` to `0.0` |
| 12 | + - Added functionality which is backwards compatible increments `MINOR`, and resets `PATCH` to `0` |
| 13 | + - Bug fixes increment `PATCH` |
| 14 | + |
| 15 | +## Release steps |
| 16 | + |
| 17 | +1. Speculatively bump the version in [version.h](include/nighthawk/common/version.h) to the version you determined earlier. This may result in version gaps if a release attempt fails, but avoids having to freeze merges to master and/or having to work with release branches. In short it helps keeping the release procedure lean and mean and eliminates the need for blocking others while this procedure is in-flight. |
| 18 | +2. Draft a [GitHub tagged release](https://github.com/envoyproxy/nighthawk/releases/new). Earlier releases are tagged like `v0.1`, but as of `0.3.0`we are using [semantic versioning](https://semver.org/spec/v2.0.0.html) |
| 19 | +3. Perform thorough testing of the targeted revision to double down on stability [1] |
| 20 | +4. Create an optimized build for comparing with the previous release. Changes in performance |
| 21 | + and/or measurement accuracy may need to be considered breaking. If in doubt, discuss! |
| 22 | +5. If things look good, [File an issue](https://github.com/envoyproxy/nighthawk/issues/new?title=[VOTE]+Release+v0.x&body=Release%20X%20is%20ready%20for%20review.%20Please%20take%20a%20look%20and%20vote!) to raise a vote on publishing the drafted release, and point contributors to that. |
| 23 | +6. Allow sufficient time to transpire for others to provide feedback, before moving on to the next step. If nobody raises blocking issues, it is time to go ahead and publish the drafted release. |
| 24 | +7. |o/ Announce the new release on Slack, Twitter |
| 25 | + |
| 26 | +In case any of the steps above prevent shipping: |
| 27 | + |
| 28 | +1. Discard the draft release tag, if any |
| 29 | +2. Close the voting issue, if any. If needed share context in the issue so everyone has context. |
| 30 | +3. Subsequently re-spin the full procedure from the top after the blocking issue is resolved |
| 31 | + |
| 32 | +[1] Consider running the unit tests and integration tests repeatedly and concurrently for while. |
| 33 | +It's worth noting that some of the integration tests have not been designed for this, so that part |
| 34 | +is not tried and proven yet. (some of the integration tests are sensitive to timing, and may get |
| 35 | +unstable when slowed down due to concurrent runs). A sample command to do this: |
9 | 36 |
|
10 | 37 | ```bash |
11 | 38 | bazel test --cache_test_results=no --test_env=ENVOY_IP_TEST_VERSIONS=all --runs_per_test=1000 --jobs 50 -c dbg --local_resources 20000,20,0.25 //test:* |
12 | 39 | ``` |
13 | | - |
14 | | -- Draft a [GitHub tagged release](https://github.com/envoyproxy/nighthawk/releases/new) using the [current version number on master]((include/nighthawk/common/version.h)). Earlier releases are tagged like `v0.1` so currently we use that as a naming convention. |
15 | | -- [File an issue](https://github.com/envoyproxy/nighthawk/issues/new?title=[VOTE]+Release+v0.x&body=Release%20X%20is%20ready%20for%20review.%20Please%20take%20a%20look%20and%20vote!) to raise a vote on publishing the drafted release and point contributors to that. |
16 | | -- If nobody raises blocking issues, it's time to go ahead and publish the drafted release! |
17 | | -- Bump `MAJOR_VERSION` / `MINOR_VERSION` in [version.h](include/nighthawk/common/version.h) to the next version. |
|
0 commit comments