用途:面向 CodexBar 这类已签名、已公证的 macOS 应用发布流程,尤其适合使用 Sparkle appcast 与 Homebrew cask 的仓库。工作目录默认在应用仓库内,除非另有要求。
主要能力:检查仓库状态、当前版本、最新 tag/release 与发布文档脚本;确认 CHANGELOG.md 完整、面向用户、无重复且标注日期;优先使用仓库发布脚本;支持构建签名与公证、生成 appcast、更新 Homebrew cask 与 formula;发布后递增补丁版本并重启本地应用核对版本。
关键材料处理:使用 1Password 管理密钥,op 仅在 tmux 或持久 shell 中运行;不打印密钥材料,1Password 引用与本地密钥路径仅作引用。App Store Connect 需 private_key_p8、key_id、issuer_id 三字段来自同一 1Password 条目;Sparkle 私钥以 SPARKLE_PRIVATE_KEY_FILE 传入。可先加载 $release-private 再解析归属 Peter 的凭据定位。
CodexBar 路径:仓库 ~/Projects/codexbar;发布脚本 Scripts/release.sh;签名公证 Scripts/sign-and-notarize.sh;appcast 脚本 Scripts/make_appcast.sh 与 appcast.xml;发布产物 CodexBar-macos-universal-<version>.zip 及同名 .dSYM.zip;版本文件 version.env;更新日志 CHANGELOG.md;Homebrew tap 位于 ~/Projects/homebrew-tap,cask 为 Casks/codexbar.rb,formula 为 Formula/codexbar.rb;CLI 发布工作流 .github/workflows/release-cli.yml。
常规发布命令:tmux new-session -d -s codexbar-release 'op run --account my.1password.com --env-file /tmp/codexbar-release-op.env -- Scripts/release.sh' 然后 tmux attach -t codexbar-release。若公证报 401 Unauthenticated,改用同一 1Password 条目中的三个 App Store Connect 字段重试,~/.profile 中不匹配的 key_id/issuer_id 可能导致该错误。若 widget 元数据生成超时,可将 CODEXBAR_WIDGET_METADATA_TIMEOUT_SECONDS=600 作为下限。CLI tarball 不由 release.sh 生成,而由 GitHub release 事件触发 release-cli.yml 构建上传 arm64/x86_64 的 macOS 与 aarch64/x86_64 的 Linux 包及 .sha256。若仅 update-homebrew-tap 因 GitHub API 限流失败,可能 CLI 资产已上传,需确认后按校验和手动更新 formula。
校验:发布需确认发布链完整,使用 gh release view 检查 tag、名称、草稿、预发布、URL、资产与正文,运行 Scripts/check-release-assets.sh,解析 appcast.xml 核对版本、短版本、URL、长度与签名,运行 codesign --verify --deep --strict --verbose=2 CodexBar.app 与 spctl --assess --type execute --verbose CodexBar.app。Homebrew 侧用 shasum -a 256 校验 zip,再用 update_formula.py 更新 formula,并 brew fetch cask 与 formula;仅当存在对应版本独立 CLI tarball 时才更新 formula。
限制:资料未提供未列出的平台、收费、价格或效果说明;密钥不得打印或扫描环境,临时 env 文件用后删除;tap audit 可能受无关 formula 干扰,应保留与 cask 相关的具体证据。