Create a new version release with git tag and GitHub Release. Use when user asks to release, publish, create a new version, or ship a release. (project)
Content & Writing
85 Stars
2 Forks
Updated Jan 19, 2026, 04:39 AM
Why Use This
This skill provides specialized capabilities for aiskillstore's codebase.
Use Cases
Developing new features in the aiskillstore repository
Refactoring existing code to follow aiskillstore standards
Understanding and working with aiskillstore's codebase structure
---
name: release
description: Create a new version release with git tag and GitHub Release. Use when user asks to release, publish, create a new version, or ship a release. (project)
---
# 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:
1. On dev branch: `git branch --show-current`
2. No uncommitted changes: `git status`
3. Type-check passes: `npm run type-check`
4. Lint passes: `npm run lint`
5. Tests pass: `npm test -- --run`
6. Build succeeds: `npm run build`
## Release Process (Tag-Based)
### Step 1: Determine Version Bump
1. **Check current version**: Read the plugin's `package.json` version field
2. **Review commits since last tag**: `git log $(git describe --tags --match "downloader-v*" --abbrev=0)..HEAD --oneline` (or `browser-v*` for Browser)
3. **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 <[email protected]>
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 <[email protected]>
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:
1. Runs CI (type-check, lint, tests)
2. Builds the plugin
3. Updates GitHub Pages (Stash plugin index)
4. Generates AI release notes (if GOOGLE_API_KEY configured)
5. 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.Z` or `browser-vX.Y.Z`
- Version in the plugin's `package.json` must 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 `main` without a tag triggers NOTHING
- Verify release succeeded in GitHub Actions after pushing tag
- **Release plugins separately** - if both plugins changed, create separate tags