From github-releases
Create GitHub releases with intelligent version determination and release notes generation. Use when user says "create a release", "tag a release", "publish a release", "cut a release", "release version X", "new release", "ship it", or wants to create a new GitHub release with proper versioning and notes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/github-releases:createThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Creates releases with intelligent version suggestion and release notes generation. Drafts by default.
Creates releases with intelligent version suggestion and release notes generation. Drafts by default.
skills/shared/references/cross-cutting.mdgit tag --list "TAG"--json flags for structured outputgh auth status
git describe --tags --abbrev=0 2>/dev/null || echo "No tags found"
Step 1: Gather context
# Existing tags and naming convention
git tag --sort=-v:refname | head -10
# Latest tag
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
# Commits since last tag (or all commits if no tags)
git log ${LATEST_TAG:+${LATEST_TAG}..}HEAD --oneline --no-merges
# PRs merged since last tag
gh pr list --state merged --search "merged:>LAST_RELEASE_DATE" --json number,title,labels,author --limit 50
# Check for .github/release.yml
git ls-files .github/release.yml
# Default branch
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
Step 2: Suggest version
Read references/version-strategy.md for detailed version detection logic.
Analyze commits and PRs to suggest version bump:
references/conventional-commits.md for commit parsing rulesStep 3: Generate release notes
Read references/release-notes-templates.md for note templates.
Three strategies (in priority order):
.github/release.yml exists, use --generate-notes:
gh api repos/{owner}/{repo}/releases/generate-notes \
-f tag_name="TAG" \
-f target_commitish="BRANCH" \
-f previous_tag_name="PREV_TAG" \
--jq '.body'
Step 4: Preview release
Present the complete release to the user:
Wait for explicit user approval before proceeding.
Step 5: Create the release
gh release create TAG \
--title "TITLE" \
--notes "NOTES" \
--draft \
--target BRANCH
If the user wants to attach assets:
gh release create TAG \
--title "TITLE" \
--notes "NOTES" \
--draft \
--target BRANCH \
file1.zip file2.tar.gz
If the user explicitly requests a published (non-draft) release:
gh release create TAG \
--title "TITLE" \
--notes "NOTES" \
--target BRANCH
After creation: Report the release URL.
Same workflow as above, with --prerelease flag:
gh release create TAG \
--title "TITLE" \
--notes "NOTES" \
--draft \
--prerelease \
--target BRANCH
Pre-release tag convention: append identifier to version (e.g., v1.2.0-beta.1, v1.2.0-rc.1).
When no tags exist, read references/version-strategy.md for first-release heuristics.
Special considerations:
v0.1.0 for new/experimental projects, v1.0.0 for stable projects.github/release.yml for future releasesTag already exists:
git tag --list "TAG". If it exists, suggest the next version or ask if the user wants to use a different tag.No commits since last tag:
Release notes generation fails:
Permission denied:
gh repo view --json viewerPermissionnpx claudepluginhub ondrasek/cc-plugins --plugin github-releasesAutomates releases on GitHub, GitLab, or Gitea: detects platform, computes semver bump, generates notes from PRs/commits, previews before tagging/publishing.
Creates a GitHub release with semantic versioning, changelog generation, release notes, and optional build artifacts via tags and GitHub CLI.
Automates GitHub releases with gh CLI including semantic versioning, changelog generation from PRs, tagging, and asset management. Use for creating, editing, or verifying releases.