Release Process¶
This document outlines the canonical checklist for releasing new versions of Assay.
Checklist¶
1. Preparation¶
- Bump Versions: Update
versioninCargo.tomlfor all crates. - Root
Cargo.toml(workspace members inheritance) crates/assay-common/Cargo.toml(if not inherited)assay-python-sdk/Cargo.toml- Update Lockfile: Run
cargo check --workspaceto updateCargo.lock. - Changelog: Update
CHANGELOG.mdwith new features and fixes. - Lints: Run
cargo clippy --workspace --all-targetsto ensure no new warnings.
2. Permissions Check (Crucial)¶
- Trusted Publishing: Ensure GitHub Actions OIDC is enabled for the new version tag.
- Crate Ownership: Verify
crates.ioownership for all workspace members: assay-coreassay-cliassay-commonassay-monitorassay-ebpf(if published separately)assay-mcp-serverassay-metricsassay-policyassay-xtask- Token Scopes: If using a token fallback, ensure it has
publish-updatescope.
3. Execution¶
- Tag: Create and push the git tag.
- Watch CI: Monitor the
release.ymlworkflow. - Step:
Publish to Crates.io(usesscripts/ci/publish_idempotent.sh). - Step:
Create GitHub Release(upload binaries).
4. Verification¶
- Install Check:
cargo install assay-cli --version 2.2.3 - LSM Smoke Test: Manually dispatch the
lsm-smoke-testworkflow or runscripts/verify_lsm_docker.sh --release-tag v2.2.3.
Troubleshooting¶
HTTP 403 Forbidden¶
- Cause: Missing ownership or Trusted Publishing not configured for a specific crate.
- Fix: Go to crates.io settings for the failing crate and add the GitHub repository as a Trusted Publisher.
"Crate already uploaded"¶
- Cause: Partial failure in a previous run.
- Fix:
publish_idempotent.shhandles this automatically. Re-running the job is safe.