Skip to content
Development
Command

/release

Create and publish a new release

From plugin
subtask
3381 skill1 command
Install
> /plugin marketplace add zippoxer/subtask
> /plugin install subtask@subtask

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/release

Context preview

What this command does when you run it.

Create and publish a new release

Command definition

release.md
allowed-tools: Bash(git:*), Bash(gh:*)
argument-hint: [optional - will prompt interactively]
description: Create and publish a new release

Context

  • Latest stable: !`git tag -l 'v[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | grep -v '-' | head -1 || echo "none"`
  • Latest beta: !`git tag -l 'v*-beta*' --sort=-v:refname | head -1 || echo "none"`
  • Current branch: !`git branch --show-current`
  • Git status: !`git status --short`
  • Commits since last tag: !`git log $(git describe --tags --abbrev=0 2>/dev/null)..HEAD --oneline 2>/dev/null || git log --oneline -5`

Task

Create a new release.

Steps

1. **Show current state** to the user:

  • Latest stable version
  • Latest beta version (if any)
  • What versions each release type would create

2. **Ask user what release to create** using AskUserQuestion:

  • Calculate and show concrete version numbers for each option
  • Example options (adjust based on current state):
  • "v0.2.0 (minor)" — requires `main` branch
  • "v0.1.2 (patch)" — requires `main` branch
  • "v1.0.0 (major)" — requires `main` branch
  • "v0.2.0-beta.1 (new beta)" — requires `dev` branch
  • "v0.2.0-beta.2 (next beta)" — only if beta exists, requires `dev` branch
  • If argument was provided (e.g., `/release patch`), skip the question and use it

3. **Check prerequisites**:

  • Working directory is clean
  • Tests pass: `go test ./...`
  • **IMPORTANT - Branch rules:**
  • **Stable releases (major/minor/patch)**: MUST be on `main` branch
  • **Beta releases**: MUST be on `dev` branch
  • If on wrong branch, stop and tell the user to switch branches first

4. **Create and push tag**:

   VERSION=vX.Y.Z  # or vX.Y.Z-beta.N for beta
   git tag "$VERSION"
   git push origin "$VERSION"

5. **Monitor release workflow**:

   gh run watch --workflow release.yml --interval 10

6. **Mark as prerelease** (beta only):

   gh release edit "$VERSION" --prerelease

This ensures the beta won't be picked up by auto-update (which uses `/releases/latest`).

7. **Verify release**:

   gh release view "$VERSION"
   gh release view "$VERSION" --json assets --jq '.assets[].name'

8. **Add release notes**:

  • Read the commit history since the last release
  • Group changes by type (Features, Fixes, Improvements, etc.)
  • Write a concise summary highlighting the most important changes
  • Update the release notes:
   gh release edit "$VERSION" --notes "$(cat <<'EOF'
   ## What's New

   ### Features
   - Feature 1
   - Feature 2

   ### Fixes
   - Fix 1
   - Fix 2

   ### Improvements
   - Improvement 1

   **Full Changelog**: https://github.com/zippoxer/subtask/compare/vPREVIOUS...$VERSION
   EOF
   )"

9. **Verify Homebrew tap updated** (stable releases only - skip for beta):

   gh api "repos/zippoxer/homebrew-tap/contents/Formula/subtask.rb?ref=main" --jq .content \
     | base64 --decode \
     | rg "version|url|sha256" -n

10. **Test Homebrew install** (stable releases only - skip for beta):

    brew fetch --force zippoxer/tap/subtask

This downloads the tarball and verifies the checksum matches the formula.

Note: Do NOT update the local installation. The user tests with local builds (`go install ./cmd/subtask`), not Homebrew.

Beta Release Notes

For beta releases, keep notes concise and focused on what to test:

gh release edit "$VERSION" --prerelease --notes "$(cat <<'EOF'
## Beta Release

This is a **prerelease** for testing. Not recommended for production.

### Changes
- Change 1
- Change 2

### Testing
Please report issues at https://github.com/zippoxer/subtask/issues
EOF
)"

Troubleshooting

If release workflow fails:

gh run list --workflow release.yml --limit 5
gh run view --log-failed <run-id>

Fix the issue, then create a NEW tag (don't reuse).

To undo a bad release:

git tag -d "$VERSION"
git push origin ":refs/tags/$VERSION"
gh release delete "$VERSION" -y
Read more
Ships withsubtask

Subtask gives Claude Code a Skill and CLI to create tasks, spawn subagents, track progress, review and request changes. Each task gets a Git worktree, so they can be done in parallel safely Claude can interrupt and talk with subagents!

Get the whole plugin
Stats
338
Stars
31
Forks
Maintained
Maintenance
Go
Language
MIT
License
3mo ago
Last commit
7mo ago
Created

Repo: zippoxer/subtask