A release is cut from main by a maintainer, by hand. GitHub Actions cannot run for this
repository at the moment (billing), so the release workflow does not build binaries: the
only prebuilt binary is the macOS arm64 one built locally, and every other platform installs
from source (cargo install --git ... --tag vX.Y.Z seleniumbase-rs-cli) or through Homebrew.
Every push, tag, GitHub release and Homebrew commit is public. Run the whole gate on the exact commit you tag, and never force-push.
Start from a clean, current main
Set the version
cargo set-version (cargo-edit) also moves the CLI crate’s path dependency on the library;
Cargo.lock follows. Update the version pins in README.md and look for the old version in
other docs (rg -n 'OLD\.VERSION' -g '*.md' -g '*.toml' -g '*.rb', CHANGELOG files aside).
Close the changelog
Rename ## [Unreleased] in CHANGELOG.md to ## [X.Y.Z] - YYYY-MM-DD, open a new empty
## [Unreleased] above it, then write the docs page from it:
Regenerate what is generated
Commit everything as chore(release): X.Y.Z.
Gate the release commit
Publish main and the tag
In zsh write "${C}:refs/heads/main": $C:r would be read as a modifier.
Build the macOS binary
Archive target/release/sbrs and target/release/sbrs-mcp with the completion scripts as
seleniumbase-rs-vX.Y.Z-aarch64-apple-darwin.tgz, and write its SHA-256 next to it.
Create the GitHub release
The notes are the version’s CHANGELOG block, plus a line saying the prebuilt binary is for macOS arm64 only and how to install elsewhere.
Update the Homebrew formula
In the homebrew-tap repository, set url to the
tag’s source archive and sha256 to its checksum in Formula/sbrs.rb:
Commit sbrs X.Y.Z and push. brew upgrade sbrs then gives users the release.
Move the consumers
The companion extension’s end-to-end crate pins the library by tag: move it to vX.Y.Z.
The stealth workspace follows with cargo update -p seleniumbase-rs and its own gates.