一键导入
release
Cut a new Rerun release — version bump, changelog, build, notarize, publish.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Cut a new Rerun release — version bump, changelog, build, notarize, publish.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | release |
| description | Cut a new Rerun release — version bump, changelog, build, notarize, publish. |
Cut a new Rerun release. This skill handles the human-judgment parts (version decision, changelog writing, version string updates) then hands off to scripts/release.sh for the mechanical work (build, sign, notarize, DMG, tag, GitHub release, appcast).
Arguments provided: $ARGUMENTS
If arguments are provided and look like a version number (e.g. 0.2.0), use that as the target version and skip the version suggestion in Step 2 (still confirm with the user).
Run these checks in order. Stop on the first failure and explain how to fix it.
.env exists: Check that .env exists at the repo root. If missing: "Copy .env.example to .env and fill in your credentials."xcrun notarytool history --keychain-profile "AC_PASSWORD". If it fails: "Set up notarytool credentials — see .env.example for instructions."git status --porcelain. If there is output: "Working tree is dirty. Commit or stash changes first."git branch --show-current. If not main: "Switch to the main branch before releasing."gh auth status. If it fails: "Run gh auth login to authenticate."Read current version from app/Sources/RerunCore/Rerun.swift — extract the string from public static let version = "...".
Find the latest release tag:
git describe --tags --abbrev=0 --match 'v*' 2>/dev/null
If no tags exist, note this is the first release.
Get commits since the last tag (or all commits if no tags):
git log <tag>..HEAD --oneline --no-merges
Inspect full commit subjects + bodies for semver signals using the same range:
git log <tag>..HEAD --no-merges --format='%s%n%b%x00'
If there are no tags yet, use git log --no-merges --format='%s%n%b%x00'.
Suggest a version based on conventional commit prefixes and bodies:
feat!: or fix!: → bump majorBREAKING CHANGE → bump majorfeat: → bump minorfix: → bump patchchore:, docs:, refactor:, test:, etc. → bump patchConfirm with the user using mcp__conductor__AskUserQuestion:
Edge case — same version: If the chosen version equals the current version in Rerun.swift (e.g., first release shipping 0.1.0), note that version string updates in Step 4 will be skipped since they already match.
Read commits since the last tag (use the subject list from Step 2.3 and the full subject/body scan from Step 2.4).
Draft user-facing changelog entries. Rewrite each commit message for humans:
feat:, fix:, chore:, etc.)feat: add floating chat panel with global hotkey (#14) → Floating chat panel accessible via global hotkeyGroup entries under Keep a Changelog categories. Only include categories that have entries:
### Added — new features### Changed — changes to existing functionality### Fixed — bug fixes### Removed — removed featuresConfirm with the user using mcp__conductor__AskUserQuestion:
Edit CHANGELOG.md using the Edit tool:
## [Unreleased]## [X.Y.Z] - YYYY-MM-DD (today's date), then the approved entries## [Unreleased] line stays at the top, untouchedIf the new version is different from the current version, update these four files using the Edit tool:
app/Sources/RerunCore/Rerun.swift
public static let version = "OLD" → public static let version = "NEW"app/bundle.sh
VERSION="${VERSION:-OLD}" → VERSION="${VERSION:-NEW}"app/dev.sh
<string>OLD</string> (the line after <key>CFBundleShortVersionString</key>) → <string>NEW</string>app/Tests/RerunCoreTests/RerunCoreTests.swift
#expect(Rerun.version == "OLD") → #expect(Rerun.version == "NEW")If the new version equals the current version, skip this step entirely.
Edit website/src/data/version.json to contain:
{ "version": "X.Y.Z" }
Stage all modified files explicitly — do not use git add -A or git add .:
git add CHANGELOG.md \
app/Sources/RerunCore/Rerun.swift \
app/bundle.sh \
app/dev.sh \
app/Tests/RerunCoreTests/RerunCoreTests.swift \
website/src/data/version.json
Commit:
git commit -m "chore: bump version to vX.Y.Z"
Push:
git push origin main
After pushing, verify the tree is clean with git status --porcelain. If not clean, stop and report.
./scripts/release.sh X.Y.Z
This is a long-running command (build + two rounds of notarization = several minutes). Let it run.
If the script exits non-zero, stop immediately. Report the error output. Do not retry, do not attempt to fix, do not continue.
Note: The release script will commit appcast.xml updates and try to update version.json (but will skip since it already matches). This is expected.
After the release script completes successfully, report:
https://github.com/usererun/rerun/releases/tag/vX.Y.Z