RELEASE.md
========================= master branch (edge channel) =======================>
\ \ \
\___v0.7.0 tag \ \
\ \ v0.9.0 tag__\
\ v0.8.0 tag__\ \
v0.7.1 tag__\ \ v0.9 branch (beta channel)
\___v0.7.2 tag \___v0.8.1 tag
\ \
\ \
v0.7 branch v0.8 branch (stable channel)
All new development occurs on the master branch.
Bug fixes that affect a vX.Y branch are first made on master. This is to
allow a fix some soak time on master before it is applied to one or more
stabilization branches.
Merging to master first also helps ensure that fixes applied to one release
are present for future releases. (Sometimes the joy of landing a critical
release blocker in a branch causes you to forget to propagate back to
master!)"
Once the bug fix lands on master it is cherry-picked into the vX.Y branch
and potentially the vX.Y-1 branch. The exception to this rule is when a bug
fix for vX.Y doesn't apply to master or vX.Y-1.
Immediately after a new stabilization branch is forged, the Cargo.toml minor
version (Y) in the master branch is incremented by the release engineer.
Incrementing the major version of the master branch is outside the scope of
this document.
These are stabilization branches for a given milestone. They are created off
the master branch as late as possible prior to the milestone release.
The release tags are created as desired by the owner of the given stabilization branch, and cause that X.Y.Z release to be shipped to https://crates.io
Immediately after a new vX.Y.Z branch tag has been created, the Cargo.toml
patch version number (Z) of the stabilization branch is incremented by the
release engineer.
Channels are used by end-users (humans and bots) to consume the branches described in the previous section, so they may automatically update to the most recent version matching their desired stability.
There are three release channels that map to branches as follows:
master branch, least stable.vX.Y stabilization branch, more stable.vX.Y stabilization branch, most stable.master branch:
git fetch --all
git checkout upstream/master
solana repository:
git checkout -b <branchname>
git push -u origin <branchname>
Alternatively use the Github UI.
$ scripts/increment-cargo-version.sh minor
master branch with something like:
git co -b version_update
git ls-files -m | xargs git add
git commit -m 'Bump version to X.Y+1.0'
git push -u origin version_update
BETA_CHANNEL and the previous release branch as STABLE_CHANNEL:
ci/channel-info.sh
splTokenCliVersion in scripts/spl-token-cli-version.sh to the latest release that depends on the stable branch (usually this will be the latest spl-token-cli release).version
field in /Cargo.toml prefixed by v.
git fetch locally.This action ensures that publishing a release will trigger the creation of a PR to update the Cargo.toml files on release branch to the next semantic version (e.g. 0.9.0 -> 0.9.1). Ensure that the created PR makes it through CI and gets submitted.
X.Y.Z+1 with empty release notes. This allows people to incrementally add new release notes until it's time for the next release
X.Y.Z+1, move over
unresolved issues still in the X.Y.Z milestone, then close the X.Y.Z milestone.Go to Solana Releases and click on the latest release that you just published. Verify that all of the build artifacts are present, then uncheck "This is a pre-release" for the release.
Build artifacts can take up to 60 minutes after creating the tag before appearing. To check for progress:
solana-secondary Buildkite pipeline handles creating the Linux and macOS release artifacts and updated crates. Look for a job under the tag name of the release: https://buildkite.com/solana-labs/solana-secondary.Crates.io should have an updated Solana version. This can take 2-3 hours, and sometimes fails in the solana-secondary job.
If this happens and the error is non-fatal, click "Retry" on the "publish crate" job
See the documentation at https://github.com/solana-labs/cluster-ops/. devnet.solana.com and mainnet-beta.solana.com run stable releases that have been tested on testnet. Do not update devnet or mainnet-beta with a beta release.