release-swift

Generates categorized changelogs, tags versions, and publishes GitHub Releases for a Swift macOS app.

4.0k|410|Updated Feb 1, 2026
One-click install
npx skills add https://github.com/robinebers/openusage --skill release-swift
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: release-swift
Source: https://github.com/robinebers/openusage/tree/main/.agents/skills/release-swift
Command: npx skills add https://github.com/robinebers/openusage --skill release-swift

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Releasing a Swift macOS app involves coordinating version tags, categorized changelogs, GitHub Releases, and Sparkle appcast updates across beta and stable channels, and doing any step wrong leaves blank release notes or broken update feeds.

Core Features & Use Cases

  • Channel-aware changelog generation: Collects commits since the previous release in the same channel (stable rolls up the whole beta series) and categorizes them into New Features, Bug Fixes, Refactor, and Chores with author attribution via the GitHub CLI.
  • Tag-driven release workflow: Creates annotated v* tags on main that trigger CI to build, sign, notarize, and attach the DMG, then publishes the approved notes onto the release.
  • Release verification: Confirms the release is non-draft, has the correct prerelease flag and DMG asset, and that the Sparkle appcast.xml on gh-pages and the live site contain the new version, with recovery steps for stuck Pages deployments and leftover drafts.
  • Use Case: After merging a week of fixes, ask the assistant to cut v0.7.1; it drafts the changelog for your approval, commits it to CHANGELOG.md, pushes the tag, and publishes the release notes once CI finishes.

Quick Start

Cut a new stable release of OpenUsage by generating the changelog since the last stable tag, then tag and publish the GitHub Release with notes.

Frequently Asked Questions about release-swift

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I generate a changelog from git commits for a GitHub Release?

Collect commits since the previous release in the same channel and categorize them by prefix: feat maps to New Features, fix to Bug Fixes, refactor to Refactor, and chore/docs/ci to Chores. Look up each author's GitHub login with gh pr view or the commits API, then format entries with PR links.

How do I publish release notes to a GitHub Release created by CI?

Wait for the CI workflow to finish with gh run watch, confirm the release exists with gh release view, then attach notes using gh release edit with the --notes-file flag. CI creates the release with an empty body, so the notes must be added afterward.

What is the difference between beta and stable release tags?

Beta tags carry a suffix like v0.7.1-beta.1 and are marked as GitHub pre-releases in Sparkle's beta channel, visible only to Early Access users. Stable tags like v0.7.1 become the GitHub Latest release and ship to all users.

Why is my Sparkle appcast not updating after a release?

Publishing is two hops: the Release workflow pushes appcast.xml to the gh-pages branch, then deploy-pages.yml on main deploys it to the live site. If the branch has the version but the live URL does not, re-run the deploy workflow with gh workflow run deploy-pages.yml --ref main.

How do I handle a leftover draft release for the same tag?

Only delete the draft after confirming a separate published release exists for that tag. Check isDraft with gh release view, then list draft releases via the API and delete matching IDs; never delete the draft if no published release exists yet.