homebrew-release

Create a new version release for a Homebrew formula in the homebrew-tools tap. Handles git tagging, GitHub releases, SHA256 computation, and formula updates. Use when the user wants to publish a new version of a tool in their Homebrew tap.

16 stars

Best use case

homebrew-release is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Create a new version release for a Homebrew formula in the homebrew-tools tap. Handles git tagging, GitHub releases, SHA256 computation, and formula updates. Use when the user wants to publish a new version of a tool in their Homebrew tap.

Teams using homebrew-release should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/homebrew-release/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/cli-automation/homebrew-release/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/homebrew-release/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How homebrew-release Compares

Feature / Agenthomebrew-releaseStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Create a new version release for a Homebrew formula in the homebrew-tools tap. Handles git tagging, GitHub releases, SHA256 computation, and formula updates. Use when the user wants to publish a new version of a tool in their Homebrew tap.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Homebrew Formula Release

Automate the complete release process for Homebrew formulae in the `homebrew-tools` tap.

## When to Use This Skill

Use this skill when:
- User wants to publish a new version of a tool (e.g., "release v0.2.0 of mistral-ocr")
- User wants to create a new release after making changes to a tool
- User says "create a release", "publish new version", "bump version", etc.
- Changes have been committed to main and are ready for release

**Do NOT use this skill when:**
- User just wants to commit changes (use regular git workflow)
- User wants to update their local installation (use `brew upgrade`)
- No formula exists yet (tool needs to be added to tap first)

## Prerequisites

Before running this skill, verify:
1. User is in the `homebrew-tools` repository directory
2. Changes are committed to the main branch
3. User has `gh` CLI installed and authenticated (`gh auth status`)
4. Formula file exists in `Formula/` directory

## Workflow

### Step 1: Gather Information

Ask the user for required information:

```bash
# Identify the formula to release
# Example questions:
# - "Which tool are you releasing?" (e.g., mistral-ocr)
# - "What version number?" (e.g., v0.2.0, must start with 'v')
# - "Release notes / changelog?" (brief description of changes)
```

**Validation:**
- Version must follow format: `v{major}.{minor}.{patch}` (e.g., v0.1.1, v1.0.0)
- Formula file must exist at `Formula/{tool-name}.rb`
- Current directory must be a git repository

**Tag Naming Convention:**
Since the homebrew-tools tap contains multiple tools with independent version lifecycles, use tool-specific tags:
- Format: `{tool-name}-v{version}`
- Example: `mistral-ocr-v0.1.1`, `tool2-v1.0.0`
- This allows each tool to have its own version history
- Alternative: Use simple `v{version}` tags if releasing the entire tap as a single versioned unit (less common)

### Step 2: Create Git Tag and Push

```bash
# Create annotated tag with tool-specific version
git tag -a {tool-name}-v{version} -m "{tool-name} v{version}"

# Push tag to GitHub
git push origin {tool-name}-v{version}
```

**Error Handling:**
- If tag already exists: Ask user if they want to delete and recreate
- If push fails: Check git remote configuration and authentication

### Step 3: Create GitHub Release

```bash
# Create release using gh CLI with tool-specific tag
gh release create {tool-name}-v{version} \
  --title "{tool-name} v{version}" \
  --notes "{release-notes}"
```

**Example release notes format:**
```
Fix CLI help text to show correct command name
- Update all references from 'python script.py' to 'tool-name'
- Improve error messages
```

**Error Handling:**
- If `gh` not installed: Provide installation instructions
- If authentication fails: Run `gh auth login`
- If release already exists: Ask to delete or skip

### Step 4: Download Release Tarball and Compute SHA256

```bash
# Download the auto-generated tarball from GitHub using tool-specific tag
curl -L https://github.com/mhismail3/homebrew-tools/archive/refs/tags/{tool-name}-v{version}.tar.gz -o {tool-name}-v{version}.tar.gz

# Compute SHA256 checksum
shasum -a 256 {tool-name}-v{version}.tar.gz
```

**Expected output format:**
```
{64-character-hex-hash}  {tool-name}-v{version}.tar.gz
```

**Important:**
- Extract ONLY the hash (first 64 characters before the space)
- Store this for formula update in next step

### Step 5: Update Formula File

Update the formula file at `Formula/{tool-name}.rb`:

**Find and replace:**
```ruby
# OLD
url "https://github.com/mhismail3/homebrew-tools/archive/refs/tags/{tool-name}-v{old-version}.tar.gz"
sha256 "{old-sha256}"

# NEW
url "https://github.com/mhismail3/homebrew-tools/archive/refs/tags/{tool-name}-v{new-version}.tar.gz"
sha256 "{new-sha256}"
```

**Important:**
- Update BOTH the URL and SHA256
- Keep all other formula content unchanged
- Preserve exact Ruby formatting and indentation

### Step 6: Clean Up and Commit

```bash
# Remove downloaded tarball
rm -f {tool-name}-v{version}.tar.gz

# Stage formula changes
git add Formula/{tool-name}.rb

# Commit with clear message
git commit -m "Bump {tool-name} to v{version}

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"

# Push to GitHub
git push
```

### Step 7: Verify Release

After pushing, verify the release is available:

```bash
# Update Homebrew tap
brew update

# Check formula info shows new version
brew info mhismail3/tools/{tool-name}
```

**Expected output should show:**
- New version number
- Correct SHA256
- Formula is installable

## Example Usage

### User Request:
"Release v0.1.1 of mistral-ocr with the help text fixes"

### Skill Execution:

1. **Gather info:**
   - Tool: mistral-ocr
   - Version: v0.1.1
   - Tag: mistral-ocr-v0.1.1
   - Notes: "Fix CLI help text to show 'mistral-ocr' instead of 'python ocr.py'"

2. **Create tag:**
   ```bash
   git tag -a mistral-ocr-v0.1.1 -m "mistral-ocr v0.1.1"
   git push origin mistral-ocr-v0.1.1
   ```

3. **Create GitHub release:**
   ```bash
   gh release create mistral-ocr-v0.1.1 \
     --title "mistral-ocr v0.1.1" \
     --notes "Fix CLI help text to show 'mistral-ocr' instead of 'python ocr.py'"
   ```

4. **Get SHA256:**
   ```bash
   curl -L https://github.com/mhismail3/homebrew-tools/archive/refs/tags/mistral-ocr-v0.1.1.tar.gz -o mistral-ocr-v0.1.1.tar.gz
   shasum -a 256 mistral-ocr-v0.1.1.tar.gz
   # Output: 64046b76c347bc1cfc69acd932725ac74ca10b776d6aa36b3795ee88a034cfd6
   ```

5. **Update formula:**
   ```ruby
   # In Formula/mistral-ocr.rb
   url "https://github.com/mhismail3/homebrew-tools/archive/refs/tags/mistral-ocr-v0.1.1.tar.gz"
   sha256 "64046b76c347bc1cfc69acd932725ac74ca10b776d6aa36b3795ee88a034cfd6"
   ```

6. **Commit and push:**
   ```bash
   rm -f mistral-ocr-v0.1.1.tar.gz
   git add Formula/mistral-ocr.rb
   git commit -m "Bump mistral-ocr to v0.1.1"
   git push
   ```

7. **Verify:**
   ```bash
   brew update
   brew info mhismail3/tools/mistral-ocr
   ```

## Error Recovery

### Tag Already Exists
```bash
# Delete local tag
git tag -d {tool-name}-v{version}

# Delete remote tag
git push origin :refs/tags/{tool-name}-v{version}

# Recreate tag
git tag -a {tool-name}-v{version} -m "{tool-name} v{version}"
git push origin {tool-name}-v{version}
```

### Release Already Exists
```bash
# Delete existing release
gh release delete {tool-name}-v{version} --yes

# Recreate release
gh release create {tool-name}-v{version} --title "{tool-name} v{version}" --notes "..."
```

### Wrong SHA256
```bash
# Re-download tarball (GitHub may have cached old version)
curl -L https://github.com/mhismail3/homebrew-tools/archive/refs/tags/{tool-name}-v{version}.tar.gz -o {tool-name}-v{version}.tar.gz

# Recompute
shasum -a 256 {tool-name}-v{version}.tar.gz
```

### Formula Update Failed
- Verify formula file path is correct
- Check Ruby syntax with `ruby -c Formula/{tool-name}.rb`
- Ensure URL and SHA256 are on separate lines
- Preserve exact indentation (2 spaces in Homebrew formulae)

## Post-Release Checklist

After successful release, inform the user:

1. ✅ Version v{version} released to GitHub
2. ✅ Formula updated with new SHA256
3. ✅ Changes pushed to homebrew-tools repository
4. 📝 Users can now install with: `brew upgrade {tool-name}`
5. 📝 New installations will automatically get v{version}

## Notes

- **Do NOT include** steps for updating the user's local installation - they can do that separately with `brew upgrade`
- Always use annotated tags (`git tag -a`) not lightweight tags
- SHA256 must be exactly 64 hexadecimal characters
- GitHub auto-generates release tarballs from tags - we don't manually upload anything
- The formula URL should always point to `/archive/refs/tags/v{version}.tar.gz`
- Users can check their tap's status with: `brew tap-info mhismail3/tools`

## Troubleshooting

### "gh: command not found"
```bash
# Install GitHub CLI
brew install gh

# Authenticate
gh auth login
```

### "permission denied" on git push
```bash
# Check authentication
gh auth status

# Or check SSH keys
ssh -T git@github.com
```

### Formula won't install after update
```bash
# Test formula syntax
brew audit --strict mhismail3/tools/{tool-name}

# Try installing from source
brew install --build-from-source mhismail3/tools/{tool-name}
```

### SHA256 mismatch during user installation
- Verify the SHA256 was computed from the correct tarball
- Ensure GitHub release was created successfully
- Check that the tag points to the correct commit
- Re-download the tarball and recompute SHA256

Related Skills

release-automation

16
from diegosouzapw/awesome-omni-skill

Automate complete release process with versioning and publishing

github-release-management

16
from diegosouzapw/awesome-omni-skill

Comprehensive GitHub release orchestration with AI swarm coordination for automated versioning, testing, deployment, and rollback management

claw-release

16
from diegosouzapw/awesome-omni-skill

Release automation for Claw skills and website. Guides through version bumping, tagging, and release verification.

ARW Release Manager

16
from diegosouzapw/awesome-omni-skill

Build and release manager for ARW CLI package. Handles local development, testing, building, documentation, version tagging, and publishing to npm and crates.io. Use when developing locally, running tests, building packages, releasing new versions, or publishing packages.

release

16
from diegosouzapw/awesome-omni-skill

Commit, push, tag, and release timesheetz

Release Checklist Gate

16
from diegosouzapw/awesome-omni-skill

Checklist gate for production release - must pass all items before deploying to production.

Standard release process

16
from diegosouzapw/awesome-omni-skill

General SOP for common requests related to developer, mode, it.

agent-release-swarm

16
from diegosouzapw/awesome-omni-skill

Agent skill for release-swarm - invoke with $agent-release-swarm

bgo

10
from diegosouzapw/awesome-omni-skill

Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.

Coding & Development

large-data-with-dask

16
from diegosouzapw/awesome-omni-skill

Specific optimization strategies for Python scripts working with larger-than-memory datasets via Dask.

langsmith-fetch

16
from diegosouzapw/awesome-omni-skill

Debug LangChain and LangGraph agents by fetching execution traces from LangSmith Studio. Use when debugging agent behavior, investigating errors, analyzing tool calls, checking memory operations, or examining agent performance. Automatically fetches recent traces and analyzes execution patterns. Requires langsmith-fetch CLI installed.

langchain-tool-calling

16
from diegosouzapw/awesome-omni-skill

How chat models call tools - includes bind_tools, tool choice strategies, parallel tool calling, and tool message handling