# Release Kaze

> Release the Kaze macOS app to GitHub using the kaze-release CLI tool. Use this skill whenever the user wants to publish a new version, create a release, ship an update, push a release to GitHub, or update the appcast. Also use when they mention DMG creation, Sparkle signing, or anything related to distributing a new Kaze version.

- Skill: `fayazara/release-kaze` (Agent Skill)
- Install (CLI): `npx skillmds@latest add fayazara/release-kaze`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fayazara/release-kaze/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: fayazara (https://skillmd.com/u/fayazara)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fayazara/release-kaze

---


# Release Kaze

This skill handles releasing new versions of Kaze to GitHub using a custom Go CLI tool.

## Prerequisites

Before releasing, the user must have:

1. **Exported Kaze.app** to `~/Downloads/Kaze.app` from Xcode (Archive > Export)
2. **Bumped version numbers** in Xcode (`MARKETING_VERSION` and `CURRENT_PROJECT_VERSION`)
3. The following tools installed: `create-dmg` (brew), `gh` (GitHub CLI), `git`
4. The Sparkle `sign_update` binary available in DerivedData (built automatically when the project is built in Xcode)

## The Release CLI

The release tool is a compiled Go binary located at:

```
/Users/fayazahmed/Developer/fayazara/mac/kaze-release/kaze-release
```

Source code is at `/Users/fayazahmed/Developer/fayazara/mac/kaze-release/main.go`.

### What it does (in order)

1. **Preflight checks** -- verifies `create-dmg`, `gh`, `git`, and Sparkle's `sign_update` are available
2. **Validates Kaze.app** -- reads version and build number from `~/Downloads/Kaze.app/Contents/Info.plist`, checks for Sparkle keys
3. **Collects release notes** -- prompts for bullet points (one per line, empty line to finish)
4. **Creates DMG** -- uses `create-dmg` to package `~/Downloads/Kaze.app` into `~/Downloads/Kaze.dmg`
5. **Signs DMG** -- runs Sparkle's `sign_update` to generate an EdDSA signature
6. **Updates appcast.xml** -- parses the existing appcast in the Kaze repo, prepends a new `<item>` entry with version info, signature, and download URL, then writes it back
7. **Git push** -- commits and pushes the updated `appcast.xml` to `main`
8. **Creates GitHub release** -- uses `gh release create` to create a tagged release with the DMG attached

### Running it

The tool is interactive (prompts for release notes and confirmation), so it needs to be run in a terminal the user can interact with. You cannot run it directly via a non-interactive shell.

Instead, guide the user to run:

```bash
/Users/fayazahmed/Developer/fayazara/mac/kaze-release/kaze-release
```

Or if the binary needs to be rebuilt first:

```bash
cd /Users/fayazahmed/Developer/fayazara/mac/kaze-release && go build -o kaze-release . && ./kaze-release
```

### Environment

- The tool auto-detects the Kaze repo at `~/Developer/fayazara/mac/Kaze`. Override with `KAZE_REPO` env var.
- GitHub repo target: `fayazara/Kaze`
- Git branch: `main`
- DMG volume name: `Kaze`

## Workflow Guide

When the user wants to release, walk them through this checklist:

1. Confirm they've bumped the version in Xcode
2. Confirm they've archived and exported `Kaze.app` to `~/Downloads/`
3. Have them run the release CLI
4. After it completes, verify the GitHub release was created successfully

If something goes wrong mid-release (e.g., signing fails, git push fails), help debug using the error output from the CLI. Common issues:
- **Kaze.app not found** -- they need to export from Xcode first
- **sign_update not found** -- they need to build the project in Xcode so DerivedData has the Sparkle artifacts
- **gh auth** -- they may need to run `gh auth login` first
- **Build already in appcast** -- they may have forgotten to bump the build number

