| name | release |
| description | Release a new version of Loom โ bumps version, runs checks, tags, and pushes |
| argument-hint | <version> |
| disable-model-invocation | true |
| allowed-tools | Bash, Read, Edit, Grep, Glob |
Release Loom
Cut a new release of Loom. The version argument must be a valid semver string (e.g. 0.2.0).
Steps
-
Validate version argument. The argument must match ^[0-9]+\.[0-9]+\.[0-9]+$ (no leading v). Abort with a clear error if it doesn't.
-
Check preconditions. All of these must pass โ abort on failure:
- On the
main branch
- Working tree is clean (
git status --porcelain is empty)
- Tag
v<version> does not already exist (git tag -l v<version>)
- Pull latest:
git pull --ff-only origin main
-
Bump version. Edit the workspace Cargo.toml at the repo root โ change version = "..." in [workspace.package] to the new version. This is the single source of truth; crates inherit via version.workspace = true.
-
Sync lockfile. Run cargo generate-lockfile to update Cargo.lock.
-
Run checks. All must pass:
cargo fmt --all --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --locked
-
Commit. Stage Cargo.toml and Cargo.lock, then:
git commit -m "release: v<version>"
-
Tag.
git tag v<version>
-
Push.
git push origin main
git push origin v<version>
-
Wait for the release workflow. Poll until complete:
- Find the workflow run:
gh run list --workflow=release.yml --limit=1 --json databaseId,status --jq '.[0]'
- Poll with
gh run view <run-id> every 30 seconds until the status is completed
- If the conclusion is
success, print a success message with the release URL: https://github.com/acartine/loom/releases/tag/v<version>
- If the conclusion is
failure, print the failure details from gh run view <run-id> --log-failed and abort
-
Smoke-test. Print the smoke-test command for the user to run:
curl -fsSL https://raw.githubusercontent.com/acartine/loom/main/install.sh | sh && loom --version