用途
Deploy Flow 用于运行项目自己在 rules/git-workflow-project.md 的 Deploy Workflow 一节中声明的发布流程。它只运行声明中存在的步骤,不运行任何未声明的步骤,也不在缺少逐步骤授权的情况下执行任何步骤。
主要能力
可执行的步骤类型包括:
- 合并步骤:对声明的合并步骤可运行 git switch 与 git merge。
- 脚本步骤:仅当项目设置 Run Steps: execute 时,才运行声明的脚本。每次执行前,都会由一次 AskUserQuestion 授权明确指定该步骤。
该技能本身从不运行 git push。声明的脚本可能自行推送,这是项目主动选择并承担的运行脚本风险,每次执行确认提问中都会明确说明这一点。
授权范围是逐步骤、逐取值的:一次授权只覆盖它指定的那一个步骤,并且只在该步骤指定的取值范围内有效——合并步骤覆盖两个 OID,脚本步骤覆盖 HEAD 提交与脚本的 blob 哈希,其他内容不在授权范围内。
使用方式
执行前需先阅读 @skills/push-ci/references/authorization-contract.md,了解每步骤授权所覆盖的效力边界以及涉及 push 的安全说明;若该读取失败,则停止并报告,不执行任何步骤。
触发关键词:deploy、release、promote、deploy workflow、run the release flow、部署、發佈。
不适用场景:推送分支用 /push-ci;提交改动用 /smart-commit --execute;合并堆叠的 PR 链用 /epic-merge、/gh-stack;项目未声明 Deploy Workflow 时,应说明情况并建议用 /install-rules --customize git-workflow 生成一份。
可执行部分通过一个签入仓库的脚本 deploy-flow.sh 完成,所有 git 调用与脚本运行都经过它,以确保授权所指定的内容就是实际运行的内容。Phase 0 会先一次性定位该辅助脚本并复制到私有临时文件,之后每个 shell 环节都按字面路径调用这份副本,而不再重新定位。脚本子命令包括:parse(打印声明步骤与 Run Steps 模式,解析错误返回 2)、candidates(列出模式可绑定的本地分支)、resolve(返回分支当前 OID)、merge(拒绝未声明步骤或脏工作区,复核两个 OID,切换目标分支并合并已批准对象)、run-plan(打印 HEAD 与脚本 blob 哈希)、run(仅在 execute 模式、干净工作区且 HEAD 与脚本内容符合批准值时运行)、clean(检查整个工作区含未跟踪文件)。
流程分三个阶段:
- Phase 0 读取声明:先运行 clean 再运行 parse;工作区不干净则停止;parse 返回 2 则报告错误行并停止;无步骤则说明项目未声明并停止;否则展示步骤与 Run Steps 模式。
- Phase 1 按声明顺序逐步执行:每步前重新运行 parse,输出与 Phase 0 不同则说明声明在流程中被改变,停止流程;任何被拒绝、被否决或非零退出的步骤都会中止后续步骤。
- 合并步骤:对 <prefix>/* 形式的分支模式,由用户在 AskUserQuestion 的选项中挑选候选(不会新建分支);用 resolve 解析双方 OID;用一次 AskUserQuestion 明确步骤、源、目标、形式与两个完整 OID,只有选择 Merge 才继续;随后执行 merge 子命令。--no-ff(默认)使用固定模板消息 Merge branch '<src>' into <tgt>,由 commit-msg-guard.sh 在合并前检查消息、合并后检查记录的提交,并断言父提交恰为 <tgt-oid> <src-oid>;--ff-only 不创建提交,改为验证新 HEAD 为 <src-oid> 且 <tgt-oid> 是其祖先。按退出码报告结果:退出 4 指出 OID 并停止流程(不做 amend);退出 5 表示合并已中止、未合并。
- 脚本步骤:Run Steps: print(默认)只打印确切命令,不运行;Run Steps: execute 先运行 run-plan 取得 HEAD 提交与脚本 blob 哈希,再用一次 AskUserQuestion 指定确切命令、两个取值,并原文陈述运行脚本的风险(脚本以你的凭据运行,可提交、推送、合并、发布或部署,绕过 harness 自身检查;git 钩子可能仍会运行,但脚本可跳过钩子或运行在未安装钩子的环境)。只有选择 Run 才以批准时命名的值执行 run 子命令;若批准后 HEAD 或脚本发生变化,脚本以退出 3 拒绝且不运行任何内容。
- Phase 2 流程结束后:该技能不发起也不提供任何 push;是否提供后续操作取决于 rules/git-workflow.md 的 Proactive Offer 条件,受保护目标不会出现 push 菜单。
限制与禁止事项
- 不得运行声明中不存在的步骤,或缺少自身授权的步骤。
- 不得在批准 OID 后按分支名合并——脚本合并的是已批准的对象。
- 不得编写或编辑合并消息、修改合并提交或传入 --ai-co-author。
- 不得运行 git push 或提出推送。
- 在 Run Steps: print 下不得运行脚本步骤,不得将步骤参数通过 shell 字符串传递。
- 用户要求运行流程时,不得只打印命令让其复制——应先询问再运行。