This document describes the automated release process for claude4ops.
Releases are fully automated using GitHub Actions. When changes are merged to the main branch, the release workflow:
- ✅ Validates plugin configuration
- 🔍 Analyzes commits using conventional commit format
- 📦 Determines version bump (major/minor/patch)
- 📝 Generates changelog
- 🏷️ Creates git tag
- 🚀 Publishes GitHub release
The release system uses Conventional Commits to automatically determine version bumps.
<type>(<scope>): <description>
[optional body]
[optional footer]
| Type | Version Bump | Example |
|---|---|---|
feat: |
MINOR | feat(k8s): add new deployment validation |
fix: |
PATCH | fix(terraform): correct cost calculation |
perf: |
PATCH | perf(cicd): optimize pipeline execution |
BREAKING CHANGE: |
MAJOR | feat!: redesign command structure |
docs: |
None | docs: update installation guide |
chore: |
None | chore: update dependencies |
refactor: |
None | refactor: simplify validation logic |
Minor version bump (new feature):
git commit -m "feat(observability): add SLO calculator command
Add new command to help teams calculate SLO targets and error budgets
based on availability requirements and traffic patterns."Patch version bump (bug fix):
git commit -m "fix(k8s): handle empty namespace in validation
Fixes issue where validation would fail when namespace is not specified
in manifest files."Major version bump (breaking change):
git commit -m "feat(cicd)!: redesign pipeline command structure
BREAKING CHANGE: Pipeline commands now require explicit stage definitions.
Users must update existing pipeline configurations to use the new format."No version bump:
git commit -m "docs: update README with new examples"
git commit -m "chore: update GitHub Actions workflow"-
Develop on feature branch:
git checkout -b feature/add-new-command # Make changes git add . git commit -m "feat(k8s): add rollback command"
-
Create pull request:
- Open PR from your feature branch to
main - PR will be reviewed and merged
- Open PR from your feature branch to
-
Automatic release on merge:
- When PR is merged to
main, GitHub Actions automatically:- Analyzes commits
- Determines version bump
- Generates changelog
- Creates release
- When PR is merged to
-
Monitor release:
- Check GitHub Actions for workflow status
- New release appears in Releases
Release is created when:
- Commits with
feat:,fix:, orperf:prefixes are merged tomain - Commits contain
BREAKING CHANGE:in the message
No release is created when:
- Only
docs:,chore:,refactor:,style:, ortest:commits are merged - No conventional commits are found
When a release is created, the workflow automatically:
-
Updates version in:
.claude-plugin/plugin.json
-
Generates/updates:
CHANGELOG.mdwith categorized changes
-
Creates:
- Git tag (e.g.,
v1.2.0) - GitHub release with notes
- Git tag (e.g.,
-
Commits back to main:
- Version bump commit
- Changelog update
The automated changelog follows Keep a Changelog format:
# Changelog
## [1.2.0] - 2025-11-09
### ✨ Features
- **k8s**: add new deployment validation
- **observability**: add SLO calculator
### 🐛 Bug Fixes
- **terraform**: correct cost calculation for GCP
### 📚 Documentation
- update installation guideclaude4ops follows Semantic Versioning (SemVer):
Format: MAJOR.MINOR.PATCH
- MAJOR: Breaking changes (e.g.,
1.0.0→2.0.0) - MINOR: New features, backward compatible (e.g.,
1.0.0→1.1.0) - PATCH: Bug fixes, backward compatible (e.g.,
1.0.0→1.0.1)
Check:
-
Do commits follow conventional commit format?
- ✅
feat: add featureorfix: bug fix - ❌
add featureorbug fix
- ✅
-
Are commits of types that trigger releases?
- ✅
feat:,fix:,perf:,BREAKING CHANGE: - ❌
docs:,chore:,refactor:
- ✅
-
Check GitHub Actions logs
- Check GitHub Actions logs for errors
- Common issues:
- Invalid JSON in
plugin.json - Missing YAML frontmatter in command files
- Git conflicts (rarely happens)
- Invalid JSON in
Use commit types that don't trigger releases:
git commit -m "docs: update README"
git commit -m "chore: update dependencies"If automation fails, you can manually create a release:
-
Update version:
# Edit .claude-plugin/plugin.json # Update "version" field
-
Update changelog:
# Edit CHANGELOG.md # Add new version section
-
Commit and tag:
git add .claude-plugin/plugin.json CHANGELOG.md git commit -m "chore(release): bump version to v1.2.0" git tag -a v1.2.0 -m "Release v1.2.0" git push origin main git push origin v1.2.0
-
Create GitHub release:
gh release create v1.2.0 \ --title "v1.2.0" \ --notes "See CHANGELOG.md for details"
-
Write clear commit messages:
- Use conventional commit format
- Include scope when applicable
- Explain why, not just what
-
Keep commits focused:
- One logical change per commit
- Easier to review and understand
-
Use breaking changes sparingly:
- Plan major versions carefully
- Document migration path
-
Review changelog before release:
- Ensure changes are properly categorized
- Verify nothing sensitive is exposed
.github/workflows/release.yml
.github/scripts/validate-plugin.sh- Plugin validation.github/scripts/determine-version.sh- Version bump logic.github/scripts/update-versions.sh- Update version files.github/scripts/generate-changelog.sh- Changelog generation.github/scripts/create-release.sh- GitHub release creation
The workflow requires these GitHub permissions:
contents: write- To push commits and tagspull-requests: write- To comment on PRs (future enhancement)
No additional secrets required - uses built-in GITHUB_TOKEN
Planned improvements:
- PR comment with preview of changes and version bump
- Auto-update marketplace.json
- Plugin validation in PRs
- Release notes templates
- Slack/Discord notifications
- Automated plugin publishing to Claude Code marketplace