9.4 KiB
name | about | title | labels | assignees |
---|---|---|---|---|
Release Checklist Template | Checklist of versioning to create a taggable commit for Zebra |
Versioning
How to Increment Versions
Zebra follows semantic versioning. Semantic versions look like: MAJOR.
MINOR.
PATCH[-
TAG.
PRE-RELEASE]
The draft zebrad
changelog will have an automatic version bump. This version is based on the labels on the PRs in the release.
Check that the automatic zebrad
version increment matches the changes in the release:
If we're releasing a mainnet network upgrade, it is a major
release:
- Increment the
major
version of all the Zebra crates. - Increment the
patch
version of the tower crates.
If we're not releasing a mainnet network upgrade, check for features, major changes, deprecations, and removals. If this release has any, it is a minor
release:
- Increment the
minor
version ofzebrad
. - Increment the
pre-release
version of the other crates. - Increment the
patch
version of the tower crates.
Otherwise, it is a patch
release:
- Increment the
patch
version ofzebrad
. - Increment the
pre-release
version of the other crates. - Increment the
patch
version of the tower crates.
Zebra's Rust API is not stable or supported, so we keep all the crates on the same beta pre-release
version.
Version Locations
Once you know which versions you want to increment, you can find them in the:
zebrad (rc):
- zebrad
Cargo.toml
README.md
book/src/user/docker.md
crates (beta):
- zebra-*
Cargo.toml
s
tower (patch):
- tower-*
Cargo.toml
s
auto-generated:
Cargo.lock
: runcargo build
after updating all theCargo.toml
s
Version Tooling
You can use fastmod
to interactively find and replace versions.
For example, you can do something like:
fastmod --extensions rs,toml,md --fixed-strings '1.0.0-rc.0' '1.0.0-rc.1' zebrad README.md zebra-network/src/constants.rs book/src/user/docker.md
fastmod --extensions rs,toml,md --fixed-strings '1.0.0-beta.15' '1.0.0-beta.16' zebra-*
fastmod --extensions rs,toml,md --fixed-strings '0.2.30' '0.2.31' tower-batch tower-fallback
cargo build
If you use fastmod
, don't update versions in CHANGELOG.md
or zebra-dependencies-for-audit.md
.
README
Update the README to:
- Remove any "Known Issues" that have been fixed
- Update the "Build and Run Instructions" with any new dependencies.
Check for changes in the
Dockerfile
since the last tag:git diff <previous-release-tag> docker/Dockerfile
. - If Zebra has started using newer Rust language features or standard library APIs, update the known working Rust version in the README, book, and
Cargo.toml
s
You can use a command like:
fastmod --fixed-strings '1.58' '1.65'
Checkpoints
For performance and security, we want to update the Zebra checkpoints in every release. You can copy the latest checkpoints from CI by following the zebra-checkpoints README.
Missed Dependency Updates
Sometimes dependabot
misses some dependency updates, or we accidentally turned them off.
Here's how we make sure we got everything:
- Run
cargo update
on the latestmain
branch, and keep the output - If needed, update deny.toml
- Open a separate PR with the changes, and add the output of
cargo update
to that PR as a comment
Change Log
Important: Any merge into main
deletes any edits to the draft changelog.
Once you are ready to tag a release, copy the draft changelog into CHANGELOG.md
.
We use the Release Drafter workflow to automatically create a draft changelog. We follow the Keep a Changelog format.
To create the final change log:
- Copy the latest draft changelog into
CHANGELOG.md
(there can be multiple draft releases) - Delete any trivial changes. Keep the list of those, to include in the PR
- 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":
Added
for new features.Changed
for changes in existing functionality.Deprecated
for soon-to-be removed features.Removed
for now removed features.Fixed
for any bug fixes.Security
in case of vulnerabilities.
Release support constants
Needed for the end of support feature. Please update the following constants in this file:
-
ESTIMATED_RELEASE_HEIGHT
(required) - Replace with the estimated height you estimate the release will be tagged.- Find where the Zcash blockchain tip is now by using a Zcash explorer or other tool. - Consider there are aprox1152
blocks per day (with the current Zcash75
seconds spacing). - So for example if you think the release will be tagged somewhere in the next 3 days you can add1152 * 3
to the current tip height and use that value here. -
EOS_PANIC_AFTER
(optional) - Replace if you want the release to be valid for a different numbers of days into the future. The default here is 120 days.
Create the Release
Create the Release PR
After you have the version increments, the updated checkpoints, any missed dependency updates, and the updated changelog:
- Make sure the PRs with the new checkpoint hashes and missed dependencies are already merged
- Push the version increments, the updated changelog and the release constants into a branch
(for example:
bump-v1.0.0-rc.0
- this needs to be different to the tag name) - Create a release PR by adding
&template=release-checklist.md
to the comparing url (Example).- Add the list of deleted changelog entries as a comment to make reviewing easier.
- Freeze the
batched
queue using Mergify. - Mark all the release PRs as
Critical
priority, so they go in theurgent
Mergify queue.
Create the Release
- Once the PR has been merged, create a new release using the draft release as a base, by clicking the Edit icon in the draft release
- Set the tag name to the version tag,
for example:
v1.0.0-rc.0
- Set the release to target the
main
branch - Set the release title to
Zebra
followed by the version tag, for example:Zebra 1.0.0-rc.0
- Replace the prepopulated draft changelog in the release description with the final changelog you created;
starting just after the title
## [Zebra ...
of the current version being released, and ending just before the title of the previous release. - Mark the release as 'pre-release', until it has been built and tested
- Publish the pre-release to GitHub using "Publish Release"
- Delete all the draft releases from the list of releases
Binary Testing
- Wait until the Docker binaries have been built on
main
, and the quick tests have passed. (You can ignore the full sync andlightwalletd
tests, because they take about a day to run.) - Wait until the pre-release deployment machines have successfully launched
- Publish the release to GitHub by disabling 'pre-release', then clicking "Set as the latest release"
- Wait until the Docker images have been published
- Test the Docker image using
docker run --tty --interactive zfnd/zebra:1.0.0-rc.<version>
, and put the output in a comment on the PR - Un-freeze the
batched
queue using Mergify.
Telling Zebra Users
- Post a summary of the important changes in the release in the
#arborist
and#communications
Slack channels
If the release contains new features (major
or minor
), or high-priority bug fixes:
- Ask the team about doing a blog post
Release Failures
If building or running fails after tagging:
- Fix the bug that caused the failure
- Increment versions again, following these instructions from the start
- Update the code and documentation with a new git tag
- Update
CHANGELOG.md
with details about the fix - Tag a new release