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 with v )
-
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 — Update metadata.version
-
Plugin manifests — Update version in each changed plugin's plugins/<cat>/<name>/.claude-plugin/plugin.json (only if that plugin changed)
Release Commit & Tag
$ 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 push does not push tags — always follow with git push --tags
-
Marketplace version: Easy to forget updating .claude-plugin/marketplace.json
alongside 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 , or alpha are 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