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:
- Exported Kaze.app to
~/Downloads/Kaze.appfrom Xcode (Archive > Export) - Bumped version numbers in Xcode (
MARKETING_VERSIONandCURRENT_PROJECT_VERSION) - The following tools installed:
create-dmg(brew),gh(GitHub CLI),git - The Sparkle
sign_updatebinary 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)
- Preflight checks -- verifies
create-dmg,gh,git, and Sparkle'ssign_updateare available - Validates Kaze.app -- reads version and build number from
~/Downloads/Kaze.app/Contents/Info.plist, checks for Sparkle keys - Collects release notes -- prompts for bullet points (one per line, empty line to finish)
- Creates DMG -- uses
create-dmgto package~/Downloads/Kaze.appinto~/Downloads/Kaze.dmg - Signs DMG -- runs Sparkle's
sign_updateto generate an EdDSA signature - 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 - Git push -- commits and pushes the updated
appcast.xmltomain - Creates GitHub release -- uses
gh release createto 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:
/Users/fayazahmed/Developer/fayazara/mac/kaze-release/kaze-release
Or if the binary needs to be rebuilt first:
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 withKAZE_REPOenv 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:
- Confirm they've bumped the version in Xcode
- Confirm they've archived and exported
Kaze.appto~/Downloads/ - Have them run the release CLI
- 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 loginfirst - Build already in appcast -- they may have forgotten to bump the build number