passlane-release

star 25

Publish a new version of passlane — determine the next semantic version, update CHANGELOG.md and Cargo.toml, commit, and create the git tag (vX.Y.Z) that triggers the GitHub release build. Use when the user wants to release, publish, ship, cut, or tag a new version of passlane, or bump its version.

anssip By anssip schedule Updated 6/2/2026

name: passlane-release description: Publish a new version of passlane — determine the next semantic version, update CHANGELOG.md and Cargo.toml, commit, and create the git tag (vX.Y.Z) that triggers the GitHub release build. Use when the user wants to release, publish, ship, cut, or tag a new version of passlane, or bump its version. allowed-tools: Bash(git:), Bash(cargo:), Bash(gh:*), Read, Edit

passlane-release

Cut and publish a new passlane release. Releases are driven entirely by git tags: pushing a tag matching v[0-9]+.* triggers .github/workflows/release.yml, which creates a GitHub Release (with notes parsed from CHANGELOG.md) and builds + uploads binaries for macOS, Windows, and Linux.

So a release is: pick the next version → update CHANGELOG.md and Cargo.toml → commit → tag vX.Y.Z → push the tag. CI does the rest.

Work through the steps below in order. Pushing the tag publishes a public release and starts binary builds — confirm with the user before that step.

1. Preflight

git rev-parse --abbrev-ref HEAD     # expect: master
git status --short                  # expect: clean (or only intended release changes)
git fetch --tags

If the branch isn't master or the tree has unrelated changes, stop and surface it — don't release from a dirty or unexpected state.

2. Find the current version and the changes since it

LATEST=$(git tag --sort=-v:refname | head -1)   # e.g. v3.0.2
git log "$LATEST"..HEAD --oneline               # commits to be released

Cross-check that Cargo.toml's version matches $LATEST without the v (it should — the repo keeps them in lockstep). The tag is the source of truth for "latest released version".

3. Determine the next version

Tags are vMAJOR.MINOR.PATCH. Decide the bump from the commits since $LATEST:

  • patch (v3.0.2v3.0.3) — only bug fixes / internal changes.
  • minor (v3.0.2v3.1.0) — new user-facing features, backward-compatible.
  • major (v3.0.2v4.0.0) — breaking changes to the CLI, vault format, or behavior.

If the user named a bump level or explicit version, use it. Otherwise propose one based on the commit log and confirm the target version with the user before changing files.

4. Update CHANGELOG.md

Insert a new section at the top of the list, immediately after the # Changelog heading and above the previous latest section. Match the existing format exactly — ## [X.Y.Z] (no v prefix, square brackets), a blank line, then terse bullet points:

# Changelog

## [3.1.0]

- Add scriptable TOTP code retrieval (`list --code`, `show -o --once`)
- Add a Claude agent skill for using passlane in automations
- Fix: <user-facing description>

## [3.0.2]
...

Guidelines for the bullets:

  • Rewrite commit subjects into user-facing entries — describe what changed for users, not the internal mechanics. Group related commits.
  • Keep the project's voice: imperative bullets, Add ... for features, Fix: ... / Fix to ... for fixes, backtick-quote commands and flags.
  • Skip non-user-facing commits — internal docs, refactors with no behavior change, change proposals, CI tweaks. (e.g. a "change proposal" commit does not belong in the changelog.)
  • The release workflow parses this section by version, so the ## [X.Y.Z] heading must contain the exact version that the tag refers to.

5. Bump Cargo.toml (and Cargo.lock)

Edit the version = "X.Y.Z" line in Cargo.toml to the new version. Then refresh the lockfile so its passlane entry matches (avoids a dirty lockfile on the next build):

cargo update -p passlane --precise X.Y.Z 2>/dev/null || cargo build

6. Commit

Stage the release files and commit:

git add CHANGELOG.md Cargo.toml Cargo.lock
git commit -m "Release vX.Y.Z"

7. Tag

Existing tags are lightweight and point straight at the release commit. Match that:

git tag vX.Y.Z

8. Push (publishes the release — confirm first)

Pushing the tag triggers the GitHub Actions release build and a public GitHub Release. Confirm with the user, then push the commit and the tag together:

git push origin master
git push origin vX.Y.Z

9. Verify

The Release workflow now runs. Watch it and confirm the release and binaries land:

gh run watch          # or: gh run list --workflow=release.yml
gh release view vX.Y.Z

If the workflow fails, report what failed — the tag is already public, so fixes go in a follow-up patch release rather than by re-tagging.

Quick reference

Step Command
Latest released version git tag --sort=-v:refname | head -1
Changes since release git log "$(git tag --sort=-v:refname | head -1)"..HEAD --oneline
Tag git tag vX.Y.Z
Publish git push origin master && git push origin vX.Y.Z
Watch build gh run watch
Install via CLI
npx skills add https://github.com/anssip/passlane --skill passlane-release
Repository Details
star Stars 25
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator