4.4 KiB
| name | about | title | labels | assignees |
|---|---|---|---|---|
| Release Checklist Template | Checklist of versioning to create a taggable commit for Zebra |
Initial Testing
- After any changes, test that the
cargo installcommand inREADME.mdworks (use--pathinstead of--gitlocally)
Versioning
Which Crates to Increment
To check if any of the top-level crates need version increments, go to the zebra GitHub code page: https://github.com/ZcashFoundation/zebra
- Increment the crates that have new commits since the last version update
- Increment any crates that depend on crates that have changed
- Use the
zebradcrate version in thezebradapp code andzebra-networkuser agent - Use the latest git tag in
README.md
How to Increment Versions
Zebra follows semantic versioning.
Semantic versions look like:
MAJOR.MINOR.PATCH[-TAG.PRE-RELEASE]
Pre-Release Crates
Pre-Release versions have a TAG like "alpha" or "beta".
For example: "1.0.0-alpha.0"
- Increment the
PRE-RELEASEversion for the crate.
Optionally, if a MINOR feature pre-release breaks MAJOR API compatibility:
2. Increment the MAJOR version, and reset all the other versions to zero
Unstable Crates
Unstable versions have a MAJOR version of zero.
For example: "0.1.0"
- Follow stable crate versioning, but increment the
MINORversion for breaking changes
Stable Crates
For example: "1.0.0"
Increment the first version component in this list, and reset the other components to zero:
- MAJOR versions for breaking public API changes and removals
- check for types from dependencies that appear in the public API
- MINOR versions for new features
- PATCH versions for bug fixes
- includes dependency updates that don't impact the public API
Version Locations
Once you know which versions you want to increment, you can find them in the:
- zebra*
Cargo.tomls - tower-*
Cargo.tomls zebradapp code: https://github.com/ZcashFoundation/zebra/blob/main/zebrad/src/components/tracing/component.rszebra-networkprotocol user agent: https://github.com/ZcashFoundation/zebra/blob/main/zebra-network/src/constants.rsREADME.md
Merge all these version increments as one commit, by squashing and rebasing the PR onto the main branch.
Version Tooling
You can use fastmod to interactively find and replace versions.
For example, for zebra-1.0.0-alpha-3, we did:
fastmod --extensions rs,toml,md --fixed-strings '1.0.0-alpha.3' '1.0.0-alpha.4'
fastmod --extensions rs,toml,md --fixed-strings '1.0.0-alpha.2' '1.0.0-alpha.3'
fastmod --extensions rs,toml,md --fixed-strings '0.2.0' '0.2.1' tower-batch
We skipped tower-fallback, because it hadn't changed since the last tag.
Change Log
We follow the Keep a Changelog format.
We use the Release Drafter workflow to automatically create a draft changelog.
To create the final change log:
- Delete any trivial changes
- Combine duplicate changes
- Edit change descriptions so they are consistent, and make sense to non-developers
- Check the category for each change
- prefer the "Fix" category if you're not sure
Change Categories
From "Keep a Changelog":
Addedfor new features.Changedfor changes in existing functionality.Deprecatedfor soon-to-be removed features.Removedfor now removed features.Fixedfor any bug fixes.Securityin case of vulnerabilities.
Important: Any merge into main while the Changelog is still in draft state will remove all the changes made and create a new raw list. Save your Changelog changes locally while in draft to avoid having to redo the list if that happens.
After merging this PR
- Update the draft release with the final changelog
- Point the draft release at the commit resulting from merging this PR, using the correct version tag name
- Mark the release as 'pre-release' (until we are no longer alpha/beta)
Final Testing
- After tagging the release, test that the exact
cargo installcommand works (--gitbehaves a bit differently to--path)
If the build fails after tagging:
- fix the build
- check if the fixes changed any extra crates, and do the required version increments
- update
README.mdwith a new git tag - tag another release