|
1 | 1 | # Release Checklist |
2 | 2 |
|
| 3 | +## Trust Model |
| 4 | +Release tags are published through GitHub Releases, not by a personal |
| 5 | +maintainer signing key. This project treats the canonical GitHub repository as |
| 6 | +the release authority: GitHub creates the release tag, release immutability |
| 7 | +locks the tag and assets after publication, and GitHub generates the release |
| 8 | +attestation for consumers who want platform-backed provenance. |
| 9 | + |
| 10 | +This is intentionally different from an OpenPGP-signed Git tag. Do not promise |
| 11 | +Arch-style `?signed#tag=` verification unless the project later adopts a |
| 12 | +separate tag-signing key. |
| 13 | + |
3 | 14 | ## Prep |
4 | 15 | - Update `CHANGELOG.md` with release notes and date. |
5 | 16 | - Bump versions in `Cargo.toml` (workspace and crates) as needed. |
6 | 17 | - Ensure `Cargo.lock` is updated and committed. |
7 | 18 | - Confirm vendor/picoquic is at the intended commit and submodules are initialized. |
| 19 | +- Ensure release immutability is enabled for the repository before publishing |
| 20 | + the release: |
| 21 | + https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/preventing-changes-to-your-releases |
| 22 | +- Confirm the release tag does not already exist on `origin`: |
| 23 | + `git ls-remote --exit-code --tags origin refs/tags/vX.Y.Z` |
8 | 24 |
|
9 | 25 | ## Validation |
10 | 26 | - `cargo fmt` |
|
18 | 34 | `./scripts/gen_vectors.sh`, `docs/protocol.md`, `docs/dns-codec.md`. |
19 | 35 |
|
20 | 36 | ## Release |
21 | | -- Tag the release and push tags. |
22 | | -- Publish artifacts if applicable. |
| 37 | +- For a source-only release, create the GitHub Release and let GitHub create |
| 38 | + the tag: |
| 39 | + |
| 40 | + ```sh |
| 41 | + gh release create vX.Y.Z \ |
| 42 | + --repo Mygod/slipstream-rust \ |
| 43 | + --target COMMIT_SHA \ |
| 44 | + --title vX.Y.Z \ |
| 45 | + --notes-file RELEASE_NOTES.md |
| 46 | + ``` |
| 47 | + |
| 48 | + Use the exact commit SHA that passed validation. Do not create or push a |
| 49 | + local Git tag first for this workflow. |
| 50 | +- For a release with attached assets, create a draft first, upload all assets, |
| 51 | + then publish it: |
| 52 | + |
| 53 | + ```sh |
| 54 | + gh release create vX.Y.Z \ |
| 55 | + --repo Mygod/slipstream-rust \ |
| 56 | + --target COMMIT_SHA \ |
| 57 | + --title vX.Y.Z \ |
| 58 | + --notes-file RELEASE_NOTES.md \ |
| 59 | + --draft |
| 60 | + gh release upload vX.Y.Z dist/* --repo Mygod/slipstream-rust |
| 61 | + gh release edit vX.Y.Z --repo Mygod/slipstream-rust --draft=false |
| 62 | + ``` |
| 63 | + |
| 64 | + Release immutability only locks the tag and assets after the release is |
| 65 | + published. |
| 66 | +- Verify the published release: |
| 67 | + |
| 68 | + ```sh |
| 69 | + gh release verify vX.Y.Z --repo Mygod/slipstream-rust |
| 70 | + git ls-remote --tags origin refs/tags/vX.Y.Z |
| 71 | + ``` |
| 72 | + |
| 73 | +- Fetch the tag locally after publication if needed: |
| 74 | + |
| 75 | + ```sh |
| 76 | + git fetch --tags origin |
| 77 | + ``` |
| 78 | + |
| 79 | +## Packager Notes |
| 80 | +- Source packages can track `vX.Y.Z` tags from the canonical GitHub repository. |
| 81 | +- GitHub release verification uses GitHub's release attestation and immutable |
| 82 | + release state: |
| 83 | + https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/verifying-the-integrity-of-a-release |
| 84 | +- GitHub-generated source archives are created on download, so verify the |
| 85 | + release/tag identity rather than treating those archives as pre-attached |
| 86 | + release assets. |
0 commit comments