Execute git commit, tag, and push operations for releases
Executes git commit, tag, and push operations for releases
/plugin marketplace add jayteealao/agent-skills/plugin install release-automation@agent-skills-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Executes the git operations for a release: staging modified files, creating a commit with proper formatting and attribution, creating an annotated git tag, and preparing for push. This skill handles the final git workflow step of the release process.
Requires:
Stage all files that were modified during the release process:
git add {file1} {file2} {file3} ...
Files typically include:
Verify staging succeeded:
git status --short
Create commit with the provided message, ensuring proper formatting and attribution:
git commit -m "$(cat <<'EOF'
{commit-message}
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
EOF
)"
Commit message format:
Release {scope} v{version}
{changelog-body}
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Important: Use heredoc (<<'EOF') to preserve formatting and handle multi-line messages correctly.
Capture commit hash:
git rev-parse HEAD
Create an annotated tag (not lightweight) following the scope-based naming pattern:
Tag naming:
marketplace-v{version}{plugin-name}-v{version}variants-v{version}git tag -a "{scope}-v{version}" -m "Release {scope} v{version}"
Annotation message should be concise:
Release {scope} v{version}
Verify tag created:
git tag -l "{scope}-v{version}"
Do NOT automatically push. Instead, prepare information for the command to display:
# Get remote URL
git remote get-url origin
# Get current branch
git branch --show-current
# Show what will be pushed
git log origin/{branch}..HEAD --oneline
Return push command for user to execute:
git push origin {branch} --follow-tags
Or if using --force-with-lease after rebase:
git push origin {branch} --follow-tags --force-with-lease
Collect information for post-release summary:
Return:
{
"commit_hash": "a1b2c3d",
"commit_hash_full": "a1b2c3d4e5f6g7h8i9j0",
"tag_name": "daily-carry-v1.2.0",
"files_committed": [
"plugins/daily-carry/.claude-plugin/plugin.json",
"plugins/daily-carry/CHANGELOG.md",
".claude-plugin/marketplace.json"
],
"files_count": 3,
"branch": "master",
"remote_url": "https://github.com/jayteealao/agent-skills.git",
"push_command": "git push origin master --follow-tags",
"success": true
}
Input:
plugin:daily-carry1.2.0Release plugin:daily-carry v1.2.0
Added:
- New deployment command
Fixed:
- Git push error handling
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
["plugins/daily-carry/.claude-plugin/plugin.json", "plugins/daily-carry/CHANGELOG.md", ".claude-plugin/marketplace.json"]Operations:
# Stage files
git add plugins/daily-carry/.claude-plugin/plugin.json
git add plugins/daily-carry/CHANGELOG.md
git add .claude-plugin/marketplace.json
# Create commit
git commit -m "$(cat <<'EOF'
Release plugin:daily-carry v1.2.0
Added:
- New deployment command
Fixed:
- Git push error handling
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
EOF
)"
# Create tag
git tag -a "daily-carry-v1.2.0" -m "Release plugin:daily-carry v1.2.0"
Output:
{
"commit_hash": "f7e8d9c",
"commit_hash_full": "f7e8d9c6b5a4e3d2c1b0a9f8e7d6c5b4",
"tag_name": "daily-carry-v1.2.0",
"files_committed": [
"plugins/daily-carry/.claude-plugin/plugin.json",
"plugins/daily-carry/CHANGELOG.md",
".claude-plugin/marketplace.json"
],
"files_count": 3,
"branch": "master",
"remote_url": "https://github.com/jayteealao/agent-skills.git",
"push_command": "git push origin master --follow-tags",
"success": true
}
Input:
marketplace1.1.0[".claude-plugin/marketplace.json", "CHANGELOG.md", "README.md"]Tag created: marketplace-v1.1.0
Output:
{
"commit_hash": "b4c5d6e",
"tag_name": "marketplace-v1.1.0",
"files_count": 3,
"branch": "master",
"push_command": "git push origin master --follow-tags",
"success": true
}
Input:
variants2.0.0["variants/variants.json", "variants/CHANGELOG.md"]Tag created: variants-v2.0.0
Error: File doesn't exist or permission denied
Response:
{
"success": false,
"error": "Failed to stage files",
"details": "git add failed: {error-message}",
"suggestion": "Verify files exist and are writable"
}
Error: Nothing to commit, commit hook failed, etc.
Response:
{
"success": false,
"error": "Failed to create commit",
"details": "{git-error-message}",
"suggestion": "Check git status and pre-commit hooks"
}
Rollback: If commit fails, unstage files:
git reset HEAD
Error: Tag already exists, invalid tag name, etc.
Response:
{
"success": false,
"error": "Failed to create tag",
"details": "{git-error-message}",
"commit_hash": "f7e8d9c",
"suggestion": "Tag may already exist. Use 'git tag -d {tag}' to delete or choose different version"
}
Rollback: Offer to undo commit:
git reset --soft HEAD~1
Warning: (non-blocking)
Response:
{
"success": true,
"commit_hash": "f7e8d9c",
"tag_name": "daily-carry-v1.2.0",
"remote_url": null,
"push_command": null,
"warning": "No git remote configured - cannot push"
}
This skill is invoked by the /release command in Phase 6. The command will:
git push origin {branch} --follow-tags
-a flag) for releases (contains metadata)--follow-tags when pushing to include annotated tags--force-with-leaseTo maintain linear git history:
git merge --no-ffThis skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.