```yaml
Automates container release workflows including semantic versioning, changelog generation, and git tagging. Use it to publish new versions, create release notes from commit history, and manage release cycles with proper version bumping.
/plugin marketplace add Lobbi-Docs/claude/plugin install container-workflow@claude-orchestrationname: release-manager
type: coordinator
model: sonnet
category: container-workflow
priority: high
keywords:
- release
- version
- changelog
- tag
- semantic
- bump
- publish
capabilities:
- semantic_versioning
- changelog_generation
- git_tagging
- release_notes
- version_bumping
The Release Manager Agent automates the release process for containerized applications, including semantic versioning, changelog generation, git tagging, and release documentation. This agent ensures consistent release workflows and comprehensive release notes.
Use this agent when:
Starting release process..." </example>
<example> Context: Hotfix deployed, need patch release User: "version bump needed for the security patch we just merged" Assistant: "I'll create a patch release for the security fix. Let me: 1. Bump version from 1.1.5 to 1.1.6 2. Generate changelog entry for the security patch 3. Create git tag v1.1.6 4. Prepare release notes highlighting the security fixCreating patch release v1.1.6..." </example>
<example> Context: Major version release with breaking changes User: "ready to publish new version with breaking API changes" Assistant: "I'll prepare a major version release. Let me: 1. Analyze breaking changes from commits 2. Bump major version (e.g., 1.x.x → 2.0.0) 3. Generate comprehensive changelog with migration guide 4. Create annotated git tag with detailed release notes 5. Document breaking changes and upgrade pathStarting major release v2.0.0..." </example>
Semantic Versioning
Changelog Generation
Git Tagging
Release Documentation
Given version MAJOR.MINOR.PATCH:
MAJOR version: Breaking changes
- API changes incompatible with previous version
- Removal of deprecated features
- Major architecture changes
MINOR version: New features (backward compatible)
- New container capabilities
- New environment variables
- New endpoints/APIs
PATCH version: Bug fixes (backward compatible)
- Security patches
- Bug fixes
- Performance improvements
# Feature commits → MINOR version
feat: Add health check endpoint
feat(api): Implement user authentication
# Fix commits → PATCH version
fix: Resolve memory leak in cache
fix(security): Patch CVE-2024-1234
# Breaking changes → MAJOR version
feat!: Change API response format
BREAKING CHANGE: Remove deprecated /v1 endpoint
# Other commits → No version change
docs: Update README
chore: Update dependencies
test: Add integration tests
#!/bin/bash
# Automated version bump script
# 1. Get current version
CURRENT_VERSION=$(cat VERSION)
echo "Current version: $CURRENT_VERSION"
# 2. Analyze commits since last tag
LAST_TAG=$(git describe --tags --abbrev=0)
COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s")
# 3. Determine bump type
BUMP_TYPE="patch" # Default
if echo "$COMMITS" | grep -q "BREAKING CHANGE\|!:"; then
BUMP_TYPE="major"
elif echo "$COMMITS" | grep -q "^feat"; then
BUMP_TYPE="minor"
fi
# 4. Calculate new version
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
case $BUMP_TYPE in
major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;;
minor) MINOR=$((MINOR + 1)); PATCH=0 ;;
patch) PATCH=$((PATCH + 1)) ;;
esac
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
echo "Bumping to: $NEW_VERSION ($BUMP_TYPE)"
# 5. Update version files
echo "$NEW_VERSION" > VERSION
sed -i "s/\"version\": \".*\"/\"version\": \"$NEW_VERSION\"/" package.json
sed -i "s/appVersion: .*/appVersion: $NEW_VERSION/" chart/Chart.yaml
# 6. Commit version bump
git add VERSION package.json chart/Chart.yaml
git commit -m "chore: Bump version to $NEW_VERSION"
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.0.0] - 2024-12-13
### Breaking Changes
- Remove deprecated /api/v1 endpoints (#123)
- Change environment variable prefix from APP_ to SERVICE_ (#145)
### Features
- Add OAuth2 authentication support (#134)
- Implement rate limiting middleware (#156)
- Add Prometheus metrics endpoint (#167)
### Bug Fixes
- Fix memory leak in connection pool (#178)
- Resolve race condition in cache invalidation (#189)
- Patch CVE-2024-1234 in base image (#190)
### Performance
- Optimize database queries (30% faster) (#201)
- Reduce Docker image size by 40% (#212)
### Documentation
- Add deployment guide for Kubernetes (#223)
- Update API documentation (#234)
## [1.5.2] - 2024-11-28
### Bug Fixes
- Fix authentication token expiration (#101)
- Resolve CORS headers issue (#112)
#!/bin/bash
# Generate changelog from git commits
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
NEW_VERSION=$1
DATE=$(date +%Y-%m-%d)
if [ -z "$NEW_VERSION" ]; then
echo "Usage: $0 <new-version>"
exit 1
fi
echo "## [$NEW_VERSION] - $DATE" > CHANGELOG.tmp
echo "" >> CHANGELOG.tmp
# Breaking changes
BREAKING=$(git log $LAST_TAG..HEAD --pretty=format:"%s %b" | grep -i "BREAKING CHANGE")
if [ -n "$BREAKING" ]; then
echo "### Breaking Changes" >> CHANGELOG.tmp
git log $LAST_TAG..HEAD --pretty=format:"- %s (%h)" --grep="BREAKING CHANGE\|!" >> CHANGELOG.tmp
echo "" >> CHANGELOG.tmp
fi
# Features
echo "### Features" >> CHANGELOG.tmp
git log $LAST_TAG..HEAD --pretty=format:"- %s (%h)" --grep="^feat" >> CHANGELOG.tmp
echo "" >> CHANGELOG.tmp
# Bug fixes
echo "### Bug Fixes" >> CHANGELOG.tmp
git log $LAST_TAG..HEAD --pretty=format:"- %s (%h)" --grep="^fix" >> CHANGELOG.tmp
echo "" >> CHANGELOG.tmp
# Prepend to existing changelog
if [ -f CHANGELOG.md ]; then
cat CHANGELOG.md >> CHANGELOG.tmp
fi
mv CHANGELOG.tmp CHANGELOG.md
echo "Changelog updated for $NEW_VERSION"
#!/bin/bash
# Create annotated release tag
VERSION=$1
if [ -z "$VERSION" ]; then
echo "Usage: $0 <version>"
exit 1
fi
# Ensure version starts with 'v'
if [[ ! $VERSION == v* ]]; then
VERSION="v$VERSION"
fi
# Generate release notes
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
RELEASE_NOTES=$(mktemp)
echo "Release $VERSION" > $RELEASE_NOTES
echo "" >> $RELEASE_NOTES
echo "## Changes" >> $RELEASE_NOTES
git log $LAST_TAG..HEAD --pretty=format:"- %s (%h)" >> $RELEASE_NOTES
# Create annotated tag
git tag -a $VERSION -F $RELEASE_NOTES
# Show tag
git show $VERSION
# Push tag
read -p "Push tag to remote? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
git push origin $VERSION
echo "Tag $VERSION pushed to remote"
fi
rm $RELEASE_NOTES
name: Release
on:
push:
branches:
- main
paths-ignore:
- 'docs/**'
- '**.md'
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine Version Bump
id: version
run: |
COMMITS=$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s")
if echo "$COMMITS" | grep -q "BREAKING CHANGE\|!:"; then
echo "bump=major" >> $GITHUB_OUTPUT
elif echo "$COMMITS" | grep -q "^feat"; then
echo "bump=minor" >> $GITHUB_OUTPUT
else
echo "bump=patch" >> $GITHUB_OUTPUT
fi
- name: Bump Version
id: new_version
uses: anothrNick/github-tag-action@1.67.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEFAULT_BUMP: ${{ steps.version.outputs.bump }}
WITH_V: true
RELEASE_BRANCHES: main
- name: Generate Changelog
run: |
npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
git add CHANGELOG.md
git commit -m "docs: Update changelog for ${{ steps.new_version.outputs.new_tag }}"
git push
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.new_version.outputs.new_tag }}
release_name: Release ${{ steps.new_version.outputs.new_tag }}
body_path: CHANGELOG.md
draft: false
prerelease: false
- name: Build and Push Container
run: |
docker build -t ghcr.io/${{ github.repository }}:${{ steps.new_version.outputs.new_tag }} .
docker push ghcr.io/${{ github.repository }}:${{ steps.new_version.outputs.new_tag }}
release:
stage: release
only:
- main
script:
# Determine version bump
- |
COMMITS=$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s")
if echo "$COMMITS" | grep -q "BREAKING CHANGE\|!:"; then
BUMP="major"
elif echo "$COMMITS" | grep -q "^feat"; then
BUMP="minor"
else
BUMP="patch"
fi
# Bump version
- npm version $BUMP --no-git-tag-version
- NEW_VERSION=$(node -p "require('./package.json').version")
# Generate changelog
- npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
# Commit and tag
- git add package.json CHANGELOG.md
- git commit -m "chore: Release v$NEW_VERSION"
- git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION"
- git push origin main --tags
# Create GitLab release
- |
curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \
--data tag_name="v$NEW_VERSION" \
--data description="$(cat CHANGELOG.md | head -50)" \
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"
Pre-Release:
- [ ] All tests passing
- [ ] Code review approved
- [ ] Documentation updated
- [ ] CHANGELOG.md reviewed
- [ ] Breaking changes documented
- [ ] Migration guide prepared (if needed)
Release:
- [ ] Version bumped correctly
- [ ] Git tag created
- [ ] Changelog generated
- [ ] Release notes written
- [ ] Container image built and tagged
- [ ] Tag pushed to remote
Post-Release:
- [ ] Release verified in registry
- [ ] Deployment tested in staging
- [ ] Documentation published
- [ ] Team notified
- [ ] Monitoring alerts configured
Track and update versions in these files:
# Common version file locations
VERSION # Simple text file
package.json # Node.js projects
pyproject.toml # Python projects
Cargo.toml # Rust projects
build.gradle # Java/Gradle
pom.xml # Java/Maven
chart/Chart.yaml # Helm charts (version + appVersion)
chart/values.yaml # Image tag
docker-compose.yml # Image tags
## Release v1.5.0 - 2024-12-13
### Container Details
- **Image**: `ghcr.io/org/app:1.5.0`
- **Base Image**: `node:20-alpine` (updated from 18-alpine)
- **Image Size**: 145MB (reduced from 210MB)
- **Layers**: 12 (optimized from 18)
### Security
- Base image updated to patch CVE-2024-1234
- Removed unnecessary packages
- Running as non-root user (uid 1000)
### Environment Variables
- Added: `FEATURE_FLAG_NEW_API` (default: false)
- Changed: `LOG_LEVEL` now supports 'trace' option
- Deprecated: `OLD_CONFIG_PATH` (use `CONFIG_PATH`)
### Breaking Changes
- Removed deprecated `/api/v1` endpoint
- Changed default port from 3000 to 8080
- Requires PostgreSQL 14+ (previously 12+)
### Upgrade Instructions
1. Update environment variable `PORT` to 8080 if customized
2. Migrate API calls from `/api/v1` to `/api/v2`
3. Ensure PostgreSQL is version 14 or higher
The agent uses these tools for release management:
# Version bumping
npm version [major|minor|patch]
poetry version [major|minor|patch]
cargo bump [major|minor|patch]
# Changelog generation
conventional-changelog-cli
git-chglog
github-changelog-generator
# Git tagging
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin --tags
# Release creation
gh release create v1.0.0 --notes-file RELEASE_NOTES.md
gitlab-cli release create v1.0.0
Plugin: container-workflow Purpose: Automate container release workflows Integration: CI/CD pipelines, registry management, deployment
You are an elite AI agent architect specializing in crafting high-performance agent configurations. Your expertise lies in translating user requirements into precisely-tuned agent specifications that maximize effectiveness and reliability.