========================= 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. They are created from the master branch approximately
every 13 weeks.
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.Check out the latest commit on master branch:
git fetch --all
git checkout upstream/master
Determine the new branch name. The name should be "v" + the first 2 version fields from Cargo.toml. For example, a Cargo.toml with version = "0.9.0" implies the next branch name is "v0.9".
Create the new branch and push this branch to the agave repository:
git checkout -b <branchname>
git push -u origin <branchname>
Alternatively use the Github UI.
After the new branch has been created and pushed, update the Cargo.toml files on master to the next semantic version (e.g. 0.9.0 -> 0.10.0) with:
$ scripts/increment-cargo-version.sh minor
Push all the changed Cargo.toml and Cargo.lock files to the 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
Confirm that your freshly cut release branch is shown as BETA_CHANNEL and the previous release branch as STABLE_CHANNEL:
ci/channel-info.sh
Create a PR that makes the following updates to CHANGELOG.md in master:
X.Y.0-Unreleased for the new master version.Unreleased annotation for the section that has now become beta.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).* @anza-xyz/backport-reviewers on the new branch.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.
Note: As of 2024-03-26 the above action is failing so version bumps are done manually. The version bump script is incorrectly updating hashbrown and proc-macro2 versions which should be reverted.
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
Go to Agave Releases and click on the latest release that you just published. Verify that all of the build artifacts are present (15 assets), 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:
agave-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/anza-xyz/agave-secondary.Crates.io agave-validator should have an updated agave-validator version. This can take 2-3 hours, and sometimes fails in the agave-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.