-
For a major or minor release, create a release branch.
Release branches are initialized with a commit from
main
, and namedrelease-x.y
wherex.y
is the major and minor version. Patch version changes are committed to the release branch matching their major and minor version. -
Create two version bump PRs:
-
One PR should be to the
release-x.y
branch and do the following:- Bump the version of all crates in the workspace to
x.y.z
. Workspace crate versions are specified in./Cargo.toml
. - Update the version string in contracts that contain it:
contracts/src/groth16/RiscZeroGroth16Verifier.sol
- Remove the note at the top of
README.md
about being on themain
branch. - Update
risc0
crate dependencies. In all workspaces:You can find the workspaces with
grep -R '\[workspace\]' --include Cargo.toml -l .
- Change the reference for
risc0
crates (e.g.risc0-zkvm
,bonsai-sdk
) to the latest monorepo release.
- Run
cargo update
.
- Change the reference for
- Remove
Cargo.lock
from.gitignore
and commit all lock files.
- Bump the version of all crates in the workspace to
-
The other PR should:
- Bump the version on the
main
branch to the next, unreleased, minor versionx.y+1.0-alpha.1
. - Update the version string in contracts that contain it:
contracts/src/groth16/RiscZeroGroth16Verifier.sol
- Bump the version on the
-
-
Tag the release as
vX.Y.Z
, and add release on GitHub.Also tag the release as
steel-v0.X.Y
, as long as Steel is pre-1.0 and so on a different version than the rest of the crates.Include a summary of the changes in the release notes.
-
Publish crates to
crates.io
Crates currently published to
crates.io
are:risc0-steel
risc0-build-ethereum
NOTE: We intend to publish more of the crates in the future. Blocking issue is that the other crates depend on building Solidity smart contracts as part of a
build.rs
script, which makes it incompatible withcrates.io
.# Log in to crates.io. Create a token that is restricted to what you need to do (e.g. publish update) and set an expiry. cargo login # Dry run to check that the package will publish. Look through the output, e.g. at version numbers, to confirm it makes sense. cargo publish -p $PKG --dry-run # Actually publish the crate cargo publish -p $PKG
See the Cargo docs for more details.
-
When changes have been made to the verifier contract, deploy a new verifier contract.
-
Deploy the contract to Sepolia, and verify the source code.
Set the
ETHERSCAN_API_KEY
andETH_WALLET_PRIVATE_KEY
environment variables to a valid Etherscan API key and Sepolia private key respectively.# In the contracts directory forge script script/DeployVerifier.s.sol:DeployVerifier --rpc-url $ALCHEMY_API_URL --broadcast --verify -vvvv
-
Document the new address and version in the
dev.risczero.com
docs.https://dev.risczero.com/api/blockchain-integration/contracts/verifier
-
-
Open a PR to risc0-foundry-template updating the references in
Cargo.toml
and in thelib/risc0
submodule to point to the new release branch.