Release Runbook
This repo uses Git tags + GitHub Releases. Follow this order to avoid broken/partial releases.Preconditions
- Local worktree is clean:
git status - CI is green on
main - You have GitHub permissions to push tags and create releases
- Optional distribution secrets (for full npm + Homebrew automation):
NPM_TOKENHOMEBREW_TAP_PUSH_TOKENGH_PAT_AUREUMAcan act as fallback for the Homebrew tap update when it has push access toAureuma/homebrew-si
1. Decide Version
- Pick next semver tag, e.g.
vX.Y.Z. - Keep
v0.x.yconsistent with prior tags in this repo.
2. Update Changelog
- Edit
CHANGELOG.md. - Add a new top section for the version/date, e.g.:
## [vX.Y.Z] - YYYY-MM-DD
- Add bullets grouped by area (CLI, Image, Docs, Vault, Providers, etc.).
- Ensure the items are user-facing (what changed) and include important migration notes.
- Update root
Cargo.toml:workspace.package.version = "X.Y.Z"
3. Commit
- Commit release prep changes:
git add CHANGELOG.md Cargo.tomlgit commit -m "release: vX.Y.Z"
4. Tag
- Create an annotated tag:
git tag -a vX.Y.Z -m "vX.Y.Z"
5. Push
- Push commit(s):
git push origin main
- Push tag:
git push origin vX.Y.Z
5.5 Local release-assets preflight
- Run:
./.artifacts/cargo-target/release/si-rs build self assets --version vX.Y.Z --out-dir .artifacts/release-preflight./.artifacts/cargo-target/release/si-rs build self verify --version vX.Y.Z --out-dir .artifacts/release-preflight
- Confirms archive packaging/checksum generation before publishing a GitHub Release.
6. Publish GitHub release
- Preferred SI CLI path:
si orbit github release create Aureuma/si --tag vX.Y.Z --title "vX.Y.Z - <short title>" --notes-file release-notes.md --draft
- If the remote tag does not exist yet, create the release with an explicit target:
si orbit github release create Aureuma/si --tag vX.Y.Z --title "vX.Y.Z - <short title>" --notes-file release-notes.md --target "$(git rev-parse HEAD)" --draft
- Confirm the remote tag exists:
git ls-remote --tags origin
- Review the draft release in GitHub UI and publish.
- SI now creates the git tag ref first when
--targetis provided and the requested tag is missing on the remote. - If the tag is missing and
--targetis omitted, the command fails instead of creating a malformed release flow. - For draft releases, GitHub may still show an
untagged-...draft URL even whentag_nameand the remote git ref are correct. Publish-time resolution is GitHub-side.
7. Post-release Checks
- Local version:
si version
- Image version:
si build imagedocker run --rm aureuma/si:local si version
- Codex smoke:
HOME=/home/<user> si codex spawn --profile <profile> --workspace "$PWD"HOME=/home/<user> si codex listHOME=/home/<user> si codex remove --profile <profile>
- Viva compatibility smoke when the change touches
si viva, Viva settings, or shared orchestration/config paths:si viva config show --format jsonsi viva config set --repo /home/<user>/Development/viva --build truesi viva -- versionsi viva -- doctor- confirm
/home/<user>/Development/viva/.github/workflows/ci.ymland/home/<user>/Development/viva/.github/workflows/release.ymlstill match the current SI release discipline
- Release assets:
gh run list --workflow "CLI Release Assets" --limit 1gh release view vX.Y.Z --json assets --jq '.assets[].name'- Confirm these files exist:
si_<version>_linux_amd64.tar.gzsi_<version>_linux_arm64.tar.gzsi_<version>_linux_armv7.tar.gzsi_<version>_darwin_amd64.tar.gzsi_<version>_darwin_arm64.tar.gzchecksums.txt
- npm package:
npm view @aureuma/si version- Expect returned version to match
X.Y.Z. npm install --global --prefix "$RUNNER_TEMP/si-npm-verify" @aureuma/si@X.Y.ZSI_NPM_RELEASE_BASE_URL="https://github.com/Aureuma/si/releases/download/vX.Y.Z" "$RUNNER_TEMP/si-npm-verify/bin/si" version
- npm publish using SI vault-managed token:
si build npm vault --version vX.Y.Z- default token key:
NPM_GAT_AUREUMA_VANGUARDA
- Homebrew tap:
curl -fsSL https://raw.githubusercontent.com/Aureuma/homebrew-si/main/Formula/si.rb | grep 'version \"'- Formula version should match
X.Y.Z. - local smoke:
si build installer smoke-homebrew
.github/workflows/cli-release-assets.yml now performs a final
distribution verification job that checks:
- locally built release archives pass Rust-owned archive/checksum/content verification before upload
- required GitHub release assets are present
- npm package visibility/version plus installed-launcher verification against the published release assets (when
NPM_TOKENis configured) - Homebrew tap version sync (when
HOMEBREW_TAP_PUSH_TOKENor fallbackGH_PAT_AUREUMAis configured) - and a separate macOS Homebrew smoke job exercises
si build installer smoke-homebrewon a brew-capable runner before the final gate

