| name | github-release |
| description | Use this skill when the user asks to "create a GitHub release", "publish a release", "make a release", "draft release notes", or needs guidance on using gh CLI to manage GitHub releases. This skill specializes in creating comprehensive, well-formatted GitHub releases using the GitHub CLI (gh). |
| version | 1.0.0 |
| license | MIT |
GitHub Release Creation Skill
This skill helps you create professional, comprehensive GitHub releases using the gh CLI tool. It covers release notes drafting, version management, and best practices for open-source release communication.
When to Use This Skill
Trigger this skill when you encounter requests like:
- "Create a GitHub release for version X.Y.Z"
- "Help me draft release notes"
- "Publish a release with these changes"
- "Compare version A.B.C and version X.Y.Z"
- "Make a release for this project"
Prerequisites
GitHub CLI (gh) must be installed and authenticated
gh auth statusShould show:
✓ Logged in to github.com account <username>Git repository should be properly tagged
git tag -l "v*"
Core Concepts
Version Numbering (Semantic Versioning)
- Major (X.0.0): Breaking changes, major features
- Minor (x.Y.0): New features, backward compatible
- Patch (x.y.Z): Bug fixes, small improvements
Release Types
- Stable Release: Final production-ready version (e.g., v4.0.0)
- Pre-release: Alpha, beta, or RC versions (e.g., v4.0.0-rc.1)
- Draft Release: Work-in-progress release notes
Step-by-Step Release Creation Process
Step 1: Analyze Changes Since Last Release
Identify the base version to compare against:
# Get latest tags
git tag -l "v*" --sort=-version:refname | head -5
# Get commits since last release
git log v3.3.0..HEAD --oneline
# Get detailed commit messages
git log v3.3.0..HEAD --pretty=format:"%h|%ad|%s" --date=short
Key information to extract:
- Commit count since last release
- Major features added
- Bug fixes and improvements
- Breaking changes (if any)
- Performance improvements
- Documentation updates
Step 2: Determine Version Number
Guidelines for choosing version numbers:
| Scenario | Version Bump | Example |
|---|---|---|
| New major features or breaking changes | Major | v3.3.0 → v4.0.0 |
| New backward-compatible features | Minor | v3.3.0 → v3.4.0 |
| Bug fixes and minor improvements | Patch | v3.3.0 → v3.3.1 |
| Pre-release versions | Suffix | v4.0.0-beta.1, v4.0.0-rc.1 |
Questions to ask:
- Does this introduce breaking changes? → Major bump
- Are there significant new features? → Minor bump
- Is it primarily bug fixes? → Patch bump
Step 3: Draft Release Notes
Structure professional release notes with these sections:
1. Overview (2-3 sentences)
- High-level summary of the release
- Key theme or focus area
- Version significance (major/minor/patch)
2. What's New (categorized changes)
Organize changes by type:
- ✨ Features: New functionality
- 🔧 Performance: Speed/resource improvements
- 🐛 Bug Fixes: Resolved issues
- 📚 Documentation: Doc updates
- 💥 Breaking Changes: Incompatible changes (if any)
- ♻️ Refactoring: Code quality improvements
3. Comparison with Previous Version
Create comparison tables showing behavior changes:
- Before (vX.Y.Z) → After (vX.Y.Z)
- Performance metrics
- Feature additions
- Configuration changes
4. Migration Guide (if applicable)
- Configuration changes needed
- Breaking changes and how to adapt
- Deprecated features
- Upgrade steps
5. Installation Instructions
# Docker
docker pull user/repo:version
# Build from source
git clone https://github.com/user/repo.git
cd repo
git checkout vX.Y.Z
go build -o binary ./cmd/
# Download binaries
# Link to release assets
6. Full Changelog
List all commits with hashes and dates:
### Commits since v3.3.0
- `9a8ebda` - Fix: Bypass internal HTTP proxy server (2026-01-09)
- `680f785` - Feat: Add SOCKS5 Direct Mode (2025-12-15)
7. Additional Sections (as needed)
- Known Issues
- Credits/Contributors
- License information
- Related links
Step 4: Create Git Tag
# Create annotated tag
git tag -a v4.0.0 -m "Release v4.0.0: Major performance improvements"
# Or create lightweight tag
git tag v4.0.0
# Push tag to GitHub
git push origin v4.0.0
# Or push all tags
git push origin --tags
Step 5: Create GitHub Release Using gh CLI
Basic Release Creation
gh release create v4.0.0 \
--title "v4.0.0 - Major Performance Release" \
--notes "Release notes here..."
Advanced Options
# Create release from notes file
gh release create v4.0.0 \
--title "v4.0.0" \
--notes-file RELEASE_NOTES.md
# Create draft release (not published yet)
gh release create v4.0.0 \
--title "v4.0.0" \
--notes "Draft notes" \
--draft
# Create pre-release
gh release create v4.0.0-beta.1 \
--title "v4.0.0-beta.1" \
--notes "Beta release notes" \
--prerelease
# Release with target commit
gh release create v4.0.0 \
--target main \
--title "v4.0.0" \
--notes "Release notes"
# Release from existing tag notes
gh release create v4.0.0 \
--notes-tag \
--title "v4.0.0"
Release with Assets
# Attach binaries
gh release create v4.0.0 \
--title "v4.0.0" \
--notes "Release notes" \
./dist/binary-linux-amd64 \
./dist/binary-darwin-amd64 \
./dist/binary-windows-amd64.exe
# Attach all files from directory
gh release create v4.0.0 \
--title "v4.0.0" \
--notes "Release notes" \
./dist/*
Step 6: Publish and Verify
# View release
gh release view v4.0.0
# List all releases
gh release list
# Open in browser
gh browse --release v4.0.0
# Edit if needed
gh release edit v4.0.0 --notes "Updated notes"
Release Notes Template
# [Project Name] v[VERSION]
## 🎉 Overview
[2-3 sentence summary of the release]
## 🚀 What's New
### ✨ Features
- **Feature name**: Description of the feature
- Technical details
- Benefits for users
### 🔧 Performance Improvements
| Metric | Previous Version | This Version | Improvement |
|--------|-----------------|--------------|-------------|
| Latency | ~100ms | ~50ms | 50% ↓ |
| Memory | 100MB | 85MB | 15% ↓ |
### 🐛 Bug Fixes
- Fixed issue where [description]
- Resolved [problem] by [solution]
### 📚 Documentation
- Updated [file] with [information]
- Added guide for [topic]
## 📊 Comparison with v[PREVIOUS_VERSION]
### Behavior Changes
| Scenario | v[PREVIOUS] | v[CURRENT] |
|----------|-------------|------------|
| Feature A | Old behavior | **New behavior** |
### Technical Details
- **Architecture**: [description of changes]
- **Modified Files**:
- [file1](link) - Change description
- [file2](link) - Change description
## 🔄 Migration from v[PREVIOUS]
### ✅ No Configuration Changes Required
[If applicable: "This release is 100% backward compatible"]
### Breaking Changes
[If any: List breaking changes and migration steps]
## 🛠️ Installation
### Docker
```bash
docker pull user/repo:v[VERSION]
Build from Source
git clone https://github.com/user/repo.git
cd repo
git checkout v[VERSION]
[build commands]
Download Binaries
Download from Releases page.
📋 Full Changelog
Commits since v[PREVIOUS]
hash- Type: Description (date)hash- Type: Description (date)
🐛 Known Issues
[List any known issues or "None reported"]
🙏 Credits
Contributors:
- @username1
- @username2
📄 License
[License information]
🔗 Links
Full Changelog: https://github.com/user/repo/compare/v[PREVIOUS]...v[CURRENT]
## Best Practices
### DO ✅
1. **Use semantic versioning** consistently
2. **Write comprehensive release notes** that stand alone
3. **Include installation instructions** for common use cases
4. **Highlight breaking changes** prominently
5. **Credit contributors** who helped with the release
6. **Link to related issues/PRs** when relevant
7. **Use consistent formatting** (Markdown tables, code blocks)
8. **Test the release process** on a test repository first
9. **Keep release notes concise but complete**
10. **Include comparison data** for performance changes
### DON'T ❌
1. **NEVER create releases without proper tagging**
2. **NEVER skip authentication check** before creating releases
3. **NEVER publish release notes without review**
4. **DON'T use internal jargon** without explanation
5. **DON'T forget to verify** the release after creation
6. **DON'T create major releases** for trivial changes
7. **DON'T skip backward compatibility notes** for breaking changes
8. **DON'T forget to push tags** to remote repository
9. **DON'T use vague commit messages** (improves changelog quality)
10. **NEVER release untested code** to production
## Common Workflows
### Workflow 1: Regular Feature Release
```bash
# 1. Checkout main branch
git checkout main
git pull
# 2. Review changes since last release
git tag -l "v*" --sort=-version:refname | head -1
git log v3.3.0..HEAD --oneline
# 3. Determine version (e.g., v3.4.0 for new features)
# 4. Create tag
git tag -a v3.4.0 -m "Release v3.4.0: New features and improvements"
git push origin v3.4.0
# 5. Create release (from prepared notes file)
gh release create v3.4.0 \
--title "v3.4.0 - New Features" \
--notes-file RELEASE_NOTES.md
Workflow 2: Hotfix Patch Release
# 1. Create hotfix branch
git checkout -b hotfix/critical-bug-fix
# 2. Make fix and commit
git commit -m "fix: Critical security vulnerability"
# 3. Create patch tag
git tag -a v3.3.1 -m "Release v3.3.1: Critical security fix"
git push origin hotfix/critical-bug-fix v3.3.1
# 4. Create release with urgent notes
gh release create v3.3.1 \
--title "v3.3.1 - Security Fix" \
--notes "## 🚨 Security Fix
This release addresses a critical security vulnerability.
**Upgrade immediately if you are affected.**
[Fix details]"
Workflow 3: Major Version Release
# 1. Comprehensive changelog analysis
git log v3.0.0..HEAD --pretty=format:"%h|%ad|%s" --date=short > changes.txt
# 2. Create migration guide
# Write MIGRATION.md with breaking changes
# 3. Create major tag
git tag -a v4.0.0 -m "Release v4.0.0: Major architecture improvements"
git push origin v4.0.0
# 4. Create comprehensive release
gh release create v4.0.0 \
--title "v4.0.0 - Major Release" \
--notes-file COMPREHENSIVE_NOTES.md \
--draft
# 5. Review and publish
gh release view v4.0.0 --web
# (Review in browser, then publish when ready)
Workflow 4: Pre-release (Beta/RC)
# 1. Create pre-release tag
git tag -a v4.0.0-beta.1 -m "Beta 1 for v4.0.0"
git push origin v4.0.0-beta.1
# 2. Create pre-release
gh release create v4.0.0-beta.1 \
--title "v4.0.0-beta.1 - Testing Release" \
--notes "## 🧪 Beta Release
This is a pre-release for testing purposes.
**Not recommended for production use.**
[Features to test]" \
--prerelease
# 3. After testing, create final release
git tag -a v4.0.0 -m "Release v4.0.0"
git push origin v4.0.0
gh release create v4.0.0 --notes "Final release notes"
Troubleshooting
Issue: "gh not authenticated"
Solution:
gh auth login
gh auth status # Verify
Issue: "Tag not found"
Solution:
# Push tag first
git push origin <tag-name>
# Or verify tag exists
git tag -l | grep <tag-name>
Issue: "Release already exists"
Solution:
# Delete existing release
gh release delete <tag-name> --yes
# Or edit existing release
gh release edit <tag-name> --notes "New notes"
Issue: "Permission denied"
Solution:
- Verify repository permissions:
gh repo view - Check authentication:
gh auth status - Ensure you have admin/write access
Additional Resources
Tips for High-Quality Releases
- Start Early: Begin drafting release notes during development
- Track Features: Maintain a CHANGELOG.md file
- Communicate: Use issues/PRs to discuss release plans
- Test Thoroughly: Test installation instructions
- Be Honest: Clearly document known issues
- Celebrate: Highlight community contributions
- Stay Organized: Use consistent structure across releases
- Provide Context: Explain why changes matter to users
- Include Metrics: Use data to demonstrate improvements
- Link Forward: Point to next version or roadmap
Example Commands Reference
# View all gh release commands
gh release --help
# Create release from stdin
echo "Release notes" | gh release create v1.0.0
# Create release with discussion
gh release create v1.0.0 \
--discussion "Discuss v1.0.0 release"
# Delete release
gh release delete v1.0.0 --yes
# Download release assets
gh release download v1.0.0 \
--dir ./downloads \
--pattern "*.zip"
# List releases
gh release list \
--limit 20 \
--json name,tagName,publishedAt
Remember: Good releases communicate value, build trust, and make users excited about your project!