Release Skill
Create a new version release using prefixed tag-based workflow for monorepo plugins.
When to Use
- •User explicitly asks to "release" or "create a release"
- •User asks to "publish" or "ship" a new version
- •User asks to "tag" a version
- •User says "let's release v0.2.0" or similar
Plugin Identification
This is a monorepo with multiple plugins. First, identify which plugin to release:
| Plugin | Version File | Tag Format | Example |
|---|---|---|---|
| Stash Downloader | plugins/stash-downloader/package.json | downloader-vX.Y.Z | downloader-v0.5.2 |
| Stash Browser | plugins/stash-browser/package.json | browser-vX.Y.Z | browser-v0.1.0 |
If the user doesn't specify, ask which plugin to release. If both changed, release each separately.
Pre-Release Checklist
Before creating a release, verify:
- •On dev branch:
git branch --show-current - •No uncommitted changes:
git status - •Type-check passes:
npm run type-check - •Lint passes:
npm run lint - •Tests pass:
npm test -- --run - •Build succeeds:
npm run build
Release Process (Tag-Based)
Step 1: Determine Version Bump
- •Check current version: Read the plugin's
package.jsonversion field - •Review commits since last tag:
git log $(git describe --tags --match "downloader-v*" --abbrev=0)..HEAD --oneline(orbrowser-v*for Browser) - •Determine bump type:
| Commit Types | Bump | Example |
|---|---|---|
Breaking changes (feat!:, BREAKING CHANGE) | MAJOR | 0.1.0 → 1.0.0 |
New features (feat:) | MINOR | 0.1.0 → 0.2.0 |
Bug fixes, patches (fix:, docs:, chore:) | PATCH | 0.1.0 → 0.1.1 |
Step 2: Merge dev to main and Release
For Stash Downloader:
bash
# From dev branch, checkout main and merge git checkout main git merge dev # Update version in plugin's package.json cd plugins/stash-downloader npm version patch # or minor/major # Commit the version bump git add . git commit -m "$(cat <<'COMMIT' 🔖 chore: release downloader-vX.Y.Z 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> COMMIT )" # Create and push tag (with downloader- prefix!) git tag downloader-vX.Y.Z git push origin main --tags
For Stash Browser:
bash
# From dev branch, checkout main and merge git checkout main git merge dev # Update version in plugin's package.json cd plugins/stash-browser npm version patch # or minor/major # Commit the version bump git add . git commit -m "$(cat <<'COMMIT' 🔖 chore: release browser-vX.Y.Z 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> COMMIT )" # Create and push tag (with browser- prefix!) git tag browser-vX.Y.Z git push origin main --tags
Step 3: Wait and Sync Dev
⚠️ CRITICAL: Do NOT push to dev immediately!
GitHub Pages uses a concurrency group. If you push to dev before the stable workflow finishes, the stable deploy gets CANCELLED.
bash
# 1. Wait for workflow to complete # Check: https://github.com/Codename-11/Stash-Downloader/actions # 2. AFTER workflow completes, sync dev with main git checkout dev git merge main git push origin dev
What Happens After Tag Push
GitHub Actions automatically:
- •Runs CI (type-check, lint, tests)
- •Builds the plugin
- •Updates GitHub Pages (Stash plugin index)
- •Generates AI release notes (if GOOGLE_API_KEY configured)
- •Creates GitHub Release with:
- •Auto-generated changelog
- •Installation instructions
- •ZIP file attached
If Release Was Cancelled
If you accidentally pushed to dev too early and cancelled the stable deploy:
bash
# Re-push the tag to trigger the workflow again git push origin --delete downloader-vX.Y.Z # or browser-vX.Y.Z git push origin downloader-vX.Y.Z
PR-Based Release (Optional)
For significant releases where you want Claude review before merging:
bash
# Create release branch from dev git checkout -b release/downloader-vX.Y.Z dev # Update version in plugin's package.json, commit cd plugins/stash-downloader npm version patch git add . git commit -m "🔖 chore: release downloader-vX.Y.Z" # Push and create PR to main git push -u origin release/downloader-vX.Y.Z gh pr create --base main --title "🔖 Release downloader-vX.Y.Z" --body "Release notes..." # After PR merge, checkout main and tag git checkout main git pull origin main git tag downloader-vX.Y.Z git push origin downloader-vX.Y.Z
Important Notes
- •Tag format MUST include plugin prefix:
downloader-vX.Y.Zorbrowser-vX.Y.Z - •Version in the plugin's
package.jsonmust match tag version (without prefix) - •Always start from dev branch - never commit directly to main
- •Wait for workflow to complete before syncing dev
- •Push to
mainwithout a tag triggers NOTHING - •Verify release succeeded in GitHub Actions after pushing tag
- •Release plugins separately - if both plugins changed, create separate tags