Release Workflow
Project-specific release conventions for lunar-claude. For the interactive
release workflow, use the /generate-changelog command from the git-workflow
plugin.
Current Release State
- •Latest tag: !
git describe --tags --abbrev=0 2>/dev/null || echo "No tags yet" - •Marketplace version: !
jq -r '.metadata.version' .claude-plugin/marketplace.json - •Unreleased commits: !
git log --oneline $(git describe --tags --abbrev=0 2>/dev/null)..HEAD 2>/dev/null | wc -l | tr -d ' '
Version Scheme
- •Semantic versioning:
MAJOR.MINOR.PATCH - •Tag format:
v0.x.y(prefixed withv) - •Marketplace and plugin manifests track versions independently
Version Bump Decision
| Commit types present | Bump level |
|---|---|
BREAKING CHANGE: in footer or ! after type | Major |
feat: (new features) | Minor |
fix:, docs:, refactor:, perf:, test:, chore: only | Patch |
Commit → Changelog Group Mapping
git-cliff (cliff.toml) maps conventional commits to changelog groups:
| Commit prefix | Changelog group |
|---|---|
feat | 🚀 Features |
fix | 🐛 Bug Fixes |
refactor | 🚜 Refactor |
doc | 📚 Documentation |
perf | ⚡ Performance |
style | 🎨 Styling |
test | 🧪 Testing |
chore, ci | ⚙️ Miscellaneous Tasks |
| body contains "security" | 🛡️ Security |
revert | ◀️ Revert |
Auto-Skipped Commits
These are filtered out of the changelog automatically:
- •
chore(release): prepare for— release prep commits - •
chore(deps*)— dependency updates (Renovate/Dependabot) - •
chore(pr)/chore(pull)— PR merge housekeeping
Files to Update on Release
- •CHANGELOG.md — Generated by
git-cliff --tag vX.Y.Z -o CHANGELOG.md - •
.claude-plugin/marketplace.json— Updatemetadata.version - •Plugin manifests — Update
versionin each changed plugin'splugins/<cat>/<name>/.claude-plugin/plugin.json(only if that plugin changed)
Release Commit & Tag
bash
$ git add CHANGELOG.md .claude-plugin/marketplace.json $ git commit -m "docs: update changelog for vX.Y.Z" $ git tag -a vX.Y.Z -m "Release vX.Y.Z" $ git push && git push --tags
GitHub Actions (release.yml) automatically creates the GitHub release from
the tag, generating release notes via git-cliff.
Gotchas
- •Push tags separately:
git pushdoes not push tags — always follow withgit push --tags - •Marketplace version: Easy to forget updating
.claude-plugin/marketplace.jsonalongside CHANGELOG.md - •Plugin versions are independent: Only bump a plugin's version if that plugin had changes — not every release bumps every plugin
- •Pre-release tags: Tags containing
rc,beta, oralphaare marked as pre-release in GitHub automatically - •Dependency commits vanish: Renovate/Dependabot commits are auto-skipped in the changelog — this is intentional, not a bug