用途:Release Guard 是一个严格的 GitHub 发布守门技能,用于阻止过早或不安全的发布,确保发布流程符合规范。
主要能力:
- 强制发布只能来自 main 分支,且对应 PR 已合并(state=CLOSED,baseRefName=main)。
- 要求所有 CI 任务必须 COMPLETE + SUCCESS,不允许存在排队中的任务。
- 校验分支保护是否要求状态检查。
- 创建发布前,版本号必须与标签匹配(cargo-dist 要求)。
- 提供失败响应,明确列出违规项与修复步骤。
使用方式:
- PR 检查:gh pr view $PR_NUM --json state,baseRefName,必须 state=CLOSED 且 baseRefName=main。
- 分支检查:git branch --show-current 与 gh repo view --json default_branch,非 main 则失败。
- CI 检查:gh run list --branch main --limit 5 --json status,conclusion,全部需 completed + success。
- 工作区检查:git status 需干净。
- 版本检查:grep '^version =' Cargo.toml 必须与标签一致(不含 v 前缀)。
- 通过后:执行 cargo semver-checks check-release --workspace,打语义化标签 vMAJOR.MINOR.PATCH,优先使用 cargo release patch|minor|major,或回退 gh release create v1.2.3 --generate-notes --target main,执行前需确认。
适用场景:适用于 Rust 项目在 GitHub 上发布新版本前的自动化守门,尤其配合 cargo-dist 使用。
限制:资料未提供安装方式、收费信息、平台支持范围及具体效果数据。需要安装 gh CLI。版本不匹配会导致 cargo-dist 失败,例如标签 v0.1.22 与 Cargo.toml 中 0.1.21 不一致时,会报错 "This workspace doesn't have anything for dist to Release!"。修复方法是始终在推送标签前先提升版本,可使用 cargo release patch|minor|major 原子化处理。