Release
Automates the full release process for handoff-guard (TypeScript).
Arguments
- •
version(optional): The semver version to release, e.g./release 0.2.0
Step 1: Pre-flight checks
Run all checks in parallel where possible. Abort immediately on any failure.
- •
Typecheck:
codeBash: pnpm run typecheck
Abort if typecheck fails.
- •
Tests:
codeBash: pnpm test
Abort if tests fail.
- •
Build:
codeBash: pnpm run build
Abort if build fails.
- •
Clean working tree:
codeBash: git status --porcelain
Abort if output is non-empty (dirty tree).
- •
Read current version:
codeRead: package.json
Extract the
versionfield.
Step 2: Determine new version
- •If a version argument was provided (e.g.
/release 0.2.0), use it. - •If no argument, ask the user:
code
AskUserQuestion: "What version should this release be? Current version is {current_version}." - •Validate the version:
- •Must be valid semver (MAJOR.MINOR.PATCH)
- •Must be strictly greater than the current version
- •Abort with a clear message if validation fails
Step 3: Bump version
- •
Edit
package.json:codeEdit: package.json old_string: "version": "{current_version}" new_string: "version": "{new_version}" - •
Commit the change:
codeBash: git add package.json && git commit -m "v{version}: <summary>"- •If the user provided a summary, use it in the commit message.
- •Otherwise, generate a short summary from the commits since the last tag:
Use this to write a concise summary of what changed.code
Bash: git log $(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)..HEAD --oneline
- •Do NOT include
Co-Authored-Byin the commit message.
Step 4: Tag and push
code
Bash: git tag v{version}
Bash: git push origin main && git push origin v{version}
Step 5: Create GitHub Release
code
Bash: gh release create v{version} --generate-notes
This auto-generates release notes from commits since the previous tag.
Step 6: Wait and verify
- •
Find the publish workflow run:
codeBash: gh run list --workflow=publish.yml --limit=1 --json databaseId,status --jq '.[0]'
- •
Watch it:
codeBash: gh run watch {run_id} - •
Report result:
- •If the run succeeds, confirm to the user: "v{version} published to npm successfully."
- •If the run fails, show the logs:
And report the failure to the user.code
Bash: gh run view {run_id} --log-failed
Important Notes
- •Always run pre-flight checks before anything else — never skip them.
- •Never amend a previous commit; always create a new one.
- •The publish workflow (
publish.yml) is triggered by the GitHub Releasepublishedevent, so the release must be created for publishing to happen. - •Always use
pnpmfor all package operations.