Release Swift
robinebers/openusage
Cut a release of OpenUsage (Swift menu-bar app): pick a version, generate a categorized changelog, tag from main, and publish the GitHub Release with notes.
Analyze merged PRs since the last release, determine the next version, update the changelog, open the PR, and populate the draft GitHub release notes for a new swift-mocking release.
$ npx skills add fetch-rewards/swift-mocking --skill prepare-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install fetch-rewards/swift-mocking prepare-release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/fetch-rewards/swift-mocking.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/prepare-release .claude/skills/prepare-release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "prepare-release" agent skill from https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-release into .claude/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add fetch-rewards/swift-mocking --skill prepare-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install fetch-rewards/swift-mocking prepare-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fetch-rewards/swift-mocking.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/prepare-release .agents/skills/prepare-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "prepare-release" agent skill from https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-release into .agents/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fetch-rewards/swift-mocking --skill prepare-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install fetch-rewards/swift-mocking prepare-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fetch-rewards/swift-mocking.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/prepare-release .cursor/skills/prepare-release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "prepare-release" agent skill from https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-release into .cursor/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/fetch-rewards/swift-mocking.git --path .claude/skills/prepare-release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add fetch-rewards/swift-mocking --skill prepare-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install fetch-rewards/swift-mocking prepare-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fetch-rewards/swift-mocking.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/prepare-release .gemini/skills/prepare-release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "prepare-release" agent skill from https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-release into .gemini/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install fetch-rewards/swift-mocking prepare-releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add fetch-rewards/swift-mocking --skill prepare-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/fetch-rewards/swift-mocking.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/prepare-release .github/skills/prepare-release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "prepare-release" agent skill from https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-release into .github/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fetch-rewards/swift-mocking --skill prepare-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install fetch-rewards/swift-mocking prepare-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fetch-rewards/swift-mocking.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/prepare-release .opencode/skills/prepare-release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "prepare-release" agent skill from https://github.com/fetch-rewards/swift-mocking/tree/main/.claude/skills/prepare-release into .opencode/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
prepare-releaseAnalyze merged PRs since the last release, determine the next version, update the changelog, open the PR, and populate the draft GitHub release notes for a new swift-mocking release.
Prepare Release is an agent skill from fetch-rewards/swift-mocking. Analyze merged PRs since the last release, determine the next version, update the changelog, open the PR, and populate the draft GitHub release notes for a new swift-mocking release.
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts.
It sits in Development, covering Changelog and release notes and iOS development. It works with GitHub. The repository describes itself as: Swift macros for generating mocks. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 762fdd1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
gitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Prepare Release loads about 2k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 965 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from fetch-rewards/swift-mocking at commit 762fdd1, republished under its MIT licence (© fetch-rewards). 965 words, ~2,024 tokens.
.claude/skills/prepare-release/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Runs generate-release-info to collect PR data and compute the next version, then creates the changelog branch, updates CHANGELOG.md, opens a documentation PR, and populates the draft GitHub release notes.
The computed version is a default, not a mandate: if the user asks for a specific target version when invoking the skill (e.g. "bump to 1.0.0"), that overrides the computed value — see step 5.
When done, report the PR URL and tell the user to invoke /publish-release once the PR is merged.
Fetch origin — including tags — and hard-reset to origin/main. Do not use git pull — it can produce merge commits that the repo's branch protection rules reject on push.
Fetch tags explicitly with --tags: generate-release-info derives last_version from local tags, and publish-release creates each release tag on GitHub (via gh release edit --draft=false), so a just-published tag exists remotely but not locally until fetched. A bare git fetch only follows tags reachable from fetched branches; --tags guarantees every release tag is present, so last_version is never computed from a stale local tag.
git fetch origin --tags
git checkout main
git reset --hard origin/main.claude/skills/prepare-release/scripts/generate-release-infoThis outputs one of two things:
### ⚠️ Needs Label section — no version or changelog sections. Handle this in step 3 before proceeding.last_version and next_version on the first line(s), followed by pre-formatted changelog sections ready to paste directly into CHANGELOG.md and the release notes. When the current version is pre-1.0 and the release contains a breaking change, two extra lines appear after next_version (breaking_change_pre_1_0: true and major_version_option: 1.0.0) — resolve them in step 5 before using next_version.PRs labeled breaking changes appear in their categorization section with a ⚠️ **[BREAKING]** prefix. A breaking change bumps the major version (e.g. 1.4.2 → 2.0.0) — except when the current version is pre-1.0 (0.x.y), where the public API is considered unstable and a breaking change is only a minor bump by default (e.g. 0.3.0 → 0.4.0). See step 5.
If the script exited with ### ⚠️ Needs Label, those PRs had no categorization label. The script produces no version number or changelog output until this is resolved — do not proceed to later steps.
For each unlabeled PR, present its title and number, then ask the user to pick a label:
1. enhancement
2. bug
3. documentation
4. testing
5. refactoring
6. formatting
7. dependencies
8. ci
9. choreApply the chosen label:
gh pr edit <number> --repo fetch-rewards/swift-mocking --add-label <label>Once all unlabeled PRs have been labeled, re-run the script. Repeat until the script exits successfully, then continue to the next step.
Scan the most recent script output for any entry whose title contains "changelog" (case-insensitive). The script already filters PRs from documentation/changelog-* branches, but one may slip through if the branch was named differently.
For each flagged entry, ask the user: "PR #NNN ('title') looks like a changelog update — exclude it?" Do not proceed until the user has confirmed or dismissed each one. Remove any confirmed changelog PRs from the output before using it in subsequent steps. If no entries are flagged, continue immediately to step 5.
The script's computed next_version is the default, but it can be superseded. Resolve the final version in this priority order, then use it as next_version for every subsequent step. The changelog sections are identical regardless of the version chosen — only the version number changes.
a. Explicit user override (highest priority). If the user requested a specific target version when invoking the skill (e.g. "bump to 1.0.0", "release 0.5.0"), honor it — this overrides both the computed next_version and the pre-1.0 prompt below. Validate it first:
X.Y.Z version and strictly greater than last_version. If it is equal to or less than last_version, or not a valid version, tell the user and ask for a valid target instead of proceeding.1.0.0 is valid even with no breaking change label — it is a deliberate stability commitment. Likewise a version that skips numbers (e.g. 0.3.0 → 0.5.0) is allowed since it was explicitly requested; if the jump looks unintentional, confirm with the user before continuing.Once validated, use the requested version and skip the rest of this step.
b. Pre-1.0 breaking change. Only when there was no explicit override and the script output includes breaking_change_pre_1_0: true: the release contains a breaking change but the current version is pre-1.0 (0.x.y). By SemVer convention the default is a minor bump (the printed next_version, e.g. 0.4.0), but the user may instead choose to graduate to the major_version_option (1.0.0) to signal a stable public API. Prompt the user to choose:
next_version (e.g. 0.4.0).major_version_option (1.0.0).c. Default. Otherwise, use the printed next_version as-is.
Branch name convention: documentation/changelog-<next_version>
git checkout -b documentation/changelog-<next_version> origin/mainInsert a new section above the previous version entry. The version header format is:
## 🚀 [Version <next_version>](https://github.com/fetch-rewards/swift-mocking/releases/tag/<next_version>) - <Month Day, Year> ([Full Changelog](https://github.com/fetch-rewards/swift-mocking/compare/<last_version>...<next_version>))Paste the sections from the script output (with any entries removed per step 4) beneath it verbatim.
git add CHANGELOG.md
git commit -m "Update changelog for Version <next_version>"
git push -u origin documentation/changelog-<next_version>Update changelogmaindocumentationgraycampbellUse the repo's PR template at .github/pull_request_template.md. Set the summary to "Updated CHANGELOG.md for Version <next_version>.", check the Documentation checkbox, and check all Checklist items. Write the body to a temp file and pass it via --body-file to avoid multiline escaping issues.
Assemble the notes body: the script's section output (no version header line, with any entries removed per step 4), followed by the full-changelog link. The script output already ends with a blank line, so append the link directly. The assembled body looks like:
### ✨ Features
- Example entry ([#NNN](https://github.com/fetch-rewards/swift-mocking/pull/NNN))
[Full Changelog](https://github.com/fetch-rewards/swift-mocking/compare/<last_version>...<next_version>)Write the assembled body to a temp file, then check whether a release already exists for <next_version>:
gh release list --repo fetch-rewards/swift-mockinggh release edit <next_version> --repo fetch-rewards/swift-mocking --notes-file <path>gh release create <next_version> --repo fetch-rewards/swift-mocking --draft --title "Version <next_version>" --notes-file <path>© fetch-rewards, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in .claude/skills/prepare-release of fetch-rewards/swift-mocking.
Open the folder on GitHubat commit 762fdd1
Prepare Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Prepare Release this skillfetch-rewards/swift-mocking | 100 | — | ~2k | Automated safety check: Pass | MIT | |
| Release Swiftrobinebers/openusage | 4.3k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Releasef-is-h/Usage4Claude | 400 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT |
robinebers/openusage
Cut a release of OpenUsage (Swift menu-bar app): pick a version, generate a categorized changelog, tag from main, and publish the GitHub Release with notes.
f-is-h/Usage4Claude
发布 Usage4Claude 新版本时使用。当用户说“发布新版本 / 发版 / 出新版 / release / 打 tag 发布 / 准备发版材料”等,用本 skill 引导完成从收集变更、编写 CHANGELOG 与 RELEASENOTES、更新版本号、编译验证,到发版 commit、CI 自动发布的完整流程。
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
fetch-rewards/swift-mocking
Publish the draft GitHub release for swift-mocking after the changelog PR has been merged.
Works with
Categories
Analyze merged PRs since the last release, determine the next version, update the changelog, open the PR, and populate the draft GitHub release notes for a new swift-mocking release. Prepare Release is an agent skill from fetch-rewards/swift-mocking. Analyze merged PRs since the last release, determine the next version, update the changelog, open the PR, and populate the draft GitHub release notes for a new swift-mocking release.
Prepare Release fits situations like: tasks that involve Changelog and release notes; tasks that involve iOS development.
Run `npx skills add fetch-rewards/swift-mocking --skill prepare-release -a claude-code`. Or copy the skill folder (.claude/skills/prepare-release in fetch-rewards/swift-mocking) into .claude/skills/prepare-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add fetch-rewards/swift-mocking --skill prepare-release -a codex`. Or copy the skill folder (.claude/skills/prepare-release in fetch-rewards/swift-mocking) into .agents/skills/prepare-release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add fetch-rewards/swift-mocking --skill prepare-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/prepare-release, .gemini/skills/prepare-release, .github/skills/prepare-release and .opencode/skills/prepare-release in your project.
Going by SKILL.md and its folder, Prepare Release needs the command-line tools its instructions call (git and gh).
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Prepare Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Prepare Release: Release Swift (robinebers/openusage, 4.3k stars), Release (f-is-h/Usage4Claude, 400 stars), Cutting A Release (TriliumNext/Trilium, 38k stars) and Mole CLI Release Flow (tw93/Mole, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
fetch-rewards (a GitHub organization) maintains it in fetch-rewards/swift-mocking, which has 100 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on July 14, 2026.
Source: fetch-rewards/swift-mocking on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.