release
GitHub自动化 macOS 应用发布流程,涵盖版本状态检查、补丁挑选、存储兼容性验证、发布说明整理及标签推送。
触发场景
安装
npx skills add TableProApp/TablePro --skill release -g -y
SKILL.md
Frontmatter
{
"name": "release",
"description": "Cuts a TablePro macOS release: a beta, a stable or a patch. Reads the release state, decides with the maintainer what ships and whether it is critical, runs the storage check, picks fixes onto a release\/X.Y line, curates the notes in the release PR, tags, watches the run and forward-ports the release. Use whenever the user says \"release\", \"cut a beta\", \"ship version\", \"tag a release\", \"promote the beta\", \"backport\", or gives a version number (\"\/release 0.83.0\", \"\/release 0.83.0-beta.2\"). Not for the blog post, newsletter or X posts (the announce skill in TableProApp\/web), and not for the iOS app."
}
Release
apple/RELEASING.md holds every command and rule. This skill is the order of decisions.
When the maintainer says to release, you run every release command yourself: picks, the release PR, creating release/X.Y, pushing the tag, the forward-port and re-runs. The maintainer decides what ships and whether it is critical: say which and why in one line, then wait for a yes.
1. Read the state
git fetch origin --tags
git -c versionsort.suffix=-beta tag -l 'v*' --sort=-v:refname | head
git ls-remote --heads origin 'release/*'
gh issue list --label regression --state open
gh release view vX.Y.0-beta.N --json publishedAt -q .publishedAt
scripts/ci/detect-changed-paths.sh --base vX.Y.0-beta.N --head origin/release/X.Y shipped
gh run list --workflow ci.yml --branch main --event push --limit 5
gh run list --workflow release-build.yml --branch main --limit 3
gh api --paginate 'repos/TableProApp/TablePro/dependabot/alerts?state=open&per_page=100' -q '.[].security_advisory.summary'
- The detector prints
truewhen shipped source landed after the newest beta: promote only after beta.N+1. git grep -c '^## \[X.Y.Z\]' origin/main -- apple/CHANGELOG.mdfinds the last stable's heading. Without it, the forward-port goes first.- A red Release Build is no gate, but the tag's
apporpluginsjob likely fails the same way.
2. Decide what ships
Apply apple/RELEASING.md, Train: a promotion, a beta.1, a beta.N for a line with new picks, a patch past the bar in Branches, or nothing. Ask about an X.0.0.
- Pick candidates:
fixPRs merged tomainsince the line was cut, for a bug the line has:gh pr list --state merged --base main --search "merged:>=<cut date>" --limit 1000 --json number,title,files. - Already picked:
gh pr list --base release/X.Y --state merged --limit 200. - A pick conflict that needs more than a mechanical fix goes back to the maintainer.
3. Storage check
Before beta.1, before every stable, and for a pick on its paths, run apple/RELEASING.md, Storage check, and read each commit it lists. A format the previous stable cannot read blocks the release.
4. Critical
For a stable or patch, name the fix and the reason, and ask. Only a security fix or data loss counts. An open Dependabot alert on a shipped dependency is a candidate.
5. Curate in the release PR
- Every user-visible PR in the release has a fragment, and no fragment says more than its PR did (
.claude/rules/changelog.md). - On
prep/vX.Y.Z, add or reword fragments beforenotes.py assemble. For an X.Y.0, write the lead in the reader's words (apple/RELEASING.md, Notes); a release of fixes only can go without one. - A beta's notes are the fragments as they stand:
.venv/bin/python apple/scripts/release/notes.py body X.Y.0-beta.Non the line head previews them.
6. Follow RELEASING
Run apple/RELEASING.md: Cutting a beta, or Cutting a stable or patch, then Forward-port. On a failure, When a run fails or Withdrawing a release.
- Watch the tag's run:
gh run list --workflow release.yml --limit 3, thengh run watch <id> --exit-status. - Then check the source:
gh api -H 'Accept: application/vnd.github.raw' 'repos/TableProApp/TablePro/contents/appcast.xml?ref=gh-pages' | grep -c '<sparkle:shortVersionString>X.Y.Z<'prints 1;gh release view vX.Y.Z --json assets -q '.assets | length'is 4 pluspython3 apple/scripts/release/registry.py targets | wc -l. - After an X.Y.0, the
announceskill in TableProApp/web is next.
版本历史
-
53c9aff
当前 2026-11-02 22:23
重构发布流程为更简洁模式;CI 改为单一工作流并检查自身运行结果;新增 Storage check 防止数据兼容问题。
-
70d0310
2026-10-19 05:27
优化发布决策逻辑,明确每周周一为稳定版发布时间表;将公告内容剥离至独立的 announce skill;改进 Changelog 片段命名规则;使用标准工具处理更新归档和插件清单。
-
8423ba1
2026-09-22 10:41
新增为每个 Changelog 条目标注 PR 和作者的功能;重构 Appcast 管道以使用经过测试的合并分支;在更新窗口中展示发布亮点而非完整日志。
-
75e848a
2026-08-27 19:22
合并博客与新闻稿指导至统一技能;优化 changelog 条目格式检查;修复 appcast 匹配问题;集成 Dameng 插件重发逻辑;增强 CI 安全策略。
-
a088129
2026-08-19 21:39
修复 CI 中 macOS 测试套件重复运行问题;修正 Agent 文档过期及验证包装器缺陷;保持证据不混入线程并修复损坏的 Skill 命令;统一使用 XcodeGen 从 project.yml 生成 Xcode 项目。
- a8650d4 2026-07-24 21:09


