Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs(release): add information on how we tag and release #5392

Merged
merged 5 commits into from
Oct 19, 2022
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 47 additions & 19 deletions book/src/dev/release-process.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ This document contains the practices that we follow to provide you with a leadin
We strive to ensure that future changes are always introduced in a predictable way.
We want everyone who depends on Zebra to know when and how new features are added, and to be well-prepared when obsolete ones are removed.

<a id="versioning"></a>
Before reading, you should understand [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and how a [Trunk-based development](https://www.atlassian.com/continuous-delivery/continuous-integration/trunk-based-development) works

## Zebra versioning
<a id="versioning"></a>

Zebra version numbers indicate the level of changes that are introduced by the release.
This use of [semantic versioning](https://semver.org/ "Semantic Versioning Specification") helps you understand the potential impact of updating to a new version.
## Zebra versioning {#zebra-versioning}

Zebra version numbers have three parts: `major.minor.patch`.
Zebra version numbers indicate the level of changes that are introduced by the release and are composed of three parts: `major.minor.patch`.
gustavovalverde marked this conversation as resolved.
Show resolved Hide resolved
For example, version `3.1.11` indicates major version 3, minor version 1, and patch level 11.

The version number is incremented based on the level of change included in the release.
Expand All @@ -32,43 +31,54 @@ The pre-release version is denoted by appending a hyphen and a series of dot sep

<a id="supported-releases"></a>

### Supported Releases

Older Zebra versions are always supported until:
* the next Zebra major, minor or patch release.
### Supported Releases {#supported-releases}

Initially, we can only guarantee support for the latest Zebra release. We might be able to provide support for earlier releases, or we might ask you to upgrade to the latest release.
Older Zebra versions are always supported until the next Zebra major, minor or patch release. Initially, we can only guarantee support for the latest Zebra release.
We might be able to provide support for earlier releases, or we might ask you to upgrade to the latest release.

Our support periods will be extended as we gain experience with supporting Zebra releases.

Older Zebra versions that only support previous network upgrades will never be supported, because they are operating on an unsupported Zcash chain fork.

<a id="updating"></a>

### Supported update paths
### Supported update paths {#supported-update-paths}

You can update to any version of Zebra, provided that the following criteria are met:

* The version you want to update *to* is supported.
* The version you want to update *from* is within one major version of the version you want to
upgrade to.
* The version you want to update *from* is within one major version of the version you want to upgrade to.

See [Keeping Up-to-Date](guide/updating "Updating your projects") for more information about updating your Zebra projects to the most recent version.

<a id="previews"></a>

### Preview releases
### Preview releases {#preview-releases}

We let you preview what's coming by providing Release Candidate \(`rc`\) pre-releases for some major releases:

| Pre-release type | Details |
|:--- |:--- |
| Beta | The release that is under active development and testing. The beta release is indicated by a release tag appended with the `-beta` identifier, such as `8.1.0-beta.0`. |
| Beta | The release that is under active development and testing. The beta release is indicated by a release tag appended with the `-beta` identifier, such as `8.1.0-beta.0`. |
| Release candidate | A release for final testing of new features. A release candidate is indicated by a release tag appended with the `-rc` identifier, such as version `8.1.0-rc.0`. |

### Distribution tags {#distribution-tags}

Zebras's tagging relates directly to versions published on Docker. We will reference these [Docker Hub distribution tags](https://hub.docker.com/r/zfnd/zebra/tags) throughout:

| Tag | Description |
|:--- |:--- |
| latest | The most recent stable version. |
| beta | The most recent pre-release version of Zebra for testing. May not always exist. |
| rc | The most recent release candidate of Zebra, meant to become a stable version. |
gustavovalverde marked this conversation as resolved.
Show resolved Hide resolved

### Feature Flags {#feature-flags}

To keep the `main` branch in a releasable state, breaking changes and experimental features must be gated behind a [feature flag](https://doc.rust-lang.org/cargo/reference/features.html).
gustavovalverde marked this conversation as resolved.
Show resolved Hide resolved

<a id="frequency"></a>

## Release frequency
## Release frequency {#release-frequency}

We work toward a regular schedule of releases, so that you can plan and coordinate your updates with the continuing evolution of Zebra.

Expand All @@ -88,7 +98,7 @@ This cadence of releases gives eager developers access to new features as soon a

<a id="deprecation"></a>

## Deprecation practices
## Deprecation practices {#deprecation-practices}

Sometimes "breaking changes", such as the removal of support for RPCs, APIs, and features, are necessary to:

Expand All @@ -109,10 +119,28 @@ To help ensure that you have sufficient time and a clear path to update, this is
|:--- |:--- |
| Announcement | We announce deprecated RPCs and features in the [change log](https://github.com/ZcashFoundation/zebra/blob/main/CHANGELOG.md "Zebra change log"). When we announce a deprecation, we also announce a recommended update path. |
| Deprecation period | When a RPC or a feature is deprecated, it is still present until the next major release. A deprecation can be announced in any release, but the removal of a deprecated RPC or feature happens only in major release. Until a deprecated RPC or feature is removed, it is maintained according to the Tier 1 support policy, meaning that only critical and security issues are fixed. |
| Rust APIs | The Rust APIs of the Zebra crates are currently unstable and unsupported. Use the `zebrad` commands or JSON-RPCs to interact with Zebra. |
| Rust APIs | The Rust APIs of the Zebra crates are currently unstable and unsupported. Use the `zebrad` commands or JSON-RPCs to interact with Zebra. |

<a id="process"></a>

## Release candidate & release process
## Release candidate & release process {#release-process}

Our release checklist is available as a template, which defines each step our team needs to follow to create a new pre-release or release, and to also build and push the binaries to the official channels [Release Checklist Template](https://github.com/ZcashFoundation/zebra/blob/main/.github/PULL_REQUEST_TEMPLATE/release-checklist.md).

## Decision making
teor2345 marked this conversation as resolved.
Show resolved Hide resolved

| Rust Features | Feature Branches | Stable Branch | Audit Branch | Audit/Release Tag |
|:--- |:--- |:--- |:--- |:--- |
|Simple git/branch management |✅ | ❌ | ❌ | ❓ | ❌ |
|Simple Mergify config | ✅ | ❌ | ❌ | ✅ | ✅ |
|Fewer Test Workflows | ✅ | ❌ | ❌ | ❓ | ✅ |
|Testing Costs | ✅ | ❌ | ❌ | ❓ | ✅ |
|Simple builds on the command-line | ❓ | ✅ | ✅ | ✅ | ✅ |
|It's clear what code is being run | ❓ | ✅ | ✅ | ✅ | ✅ |
|It's easy to merge code | ✅ | ❓ | ❌ | ❓ | ✅ |
|Deciding where to target a PR | ✅ | ❓ | ❌ | ❓ | ✅ |
|Security updates | ✅ | ✅ | ❓ | ✅ | ❌ |
|Organising code for features/backports/fixes | ❓ | ✅ | ❓ | ❓ |✅ |
|Something users might want | ✅ | ❓| ✅ | ❓ | ✅ |
|Auditors can understand it |❌ | ❌| ❓ | ✅ | ✅ |
|Making audit fixes and getting them re-audited | ❌ | ❓ | ❓ | ✅ | ❓ |