home / skills / basher83 / lunar-claude / release-workflow
This skill helps you manage release workflow by guiding version bumps, changelog updates, and tag creation aligned with semantic versioning.
npx playbooks add skill basher83/lunar-claude --skill release-workflowReview the files below or copy the command above to add this skill to your agents.
---
name: release-workflow
description: >
Release conventions and changelog configuration for lunar-claude.
Use when the user asks to "prepare a release", "bump the version",
"update the changelog", "create a release tag", "what version should
this be", or needs to understand the changelog/release process.
---
# 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
1. **CHANGELOG.md** โ Generated by `git-cliff --tag vX.Y.Z -o CHANGELOG.md`
2. **`.claude-plugin/marketplace.json`** โ Update `metadata.version`
3. **Plugin manifests** โ Update `version` in each changed plugin's
`plugins/<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 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
This skill codifies the release conventions and changelog workflow for the lunar-claude repo. It guides version decisions, changelog generation, and which files to update for a release. Use it to prepare a release, bump versions, or create tags consistently.
It inspects git history and conventional commit types to determine whether a major, minor, or patch bump is required. It uses git-cliff to map commits into changelog groups and generate CHANGELOG.md, and it updates the marketplace and plugin manifest versions when appropriate. The workflow culminates in committing the changelog and metadata, tagging the release (vMAJOR.MINOR.PATCH), and pushing commits and tags so CI creates the GitHub release.
How is the version bump level determined?
Major if a BREAKING CHANGE footer or ! after type is present; minor for feat:; patch for fix:, docs:, refactor:, perf:, test:, chore: only.
Do I need to bump every plugin manifest on each release?
No. Only update a plugin's version if that specific plugin had code or manifest changes; marketplace version is tracked separately.