deploy
整理并提交当前任务工作,创建 PR、按仓库规则尝试合并,然后同步并切回项目主分支,直接部署并核验。用于用户要求提交发布、合并后上线或调用 deploy 的交付流程;仅创建技能、修改代码或本地预览不触发发布。
SKILL.mdskills/deploy/SKILL.md
GitHubDeploy
把当前任务交付到已核验的线上版本。顺序为:整理改动 → 验证并提交 → 创建 PR → 尝试合并 → 同步并切回主分支 → 直接部署 → 核验。
先确定范围和发布状态
- 读取当前仓库的
AGENTS.md,确认项目要求的运行时、构建命令、主分支、部署命令与环境。这里的“主分支”是项目实际集成分支,不一定叫main。 - 检查
git status --short、当前分支、worktree 和远端。按当前会话的任务范围确认待交付文件,不用git add -A把其他任务的工作顺带提交。 - 如果工作位于共享目录或主分支,必要时使用独立功能分支/worktree。不要自动 stash、reset、clean 或丢弃他人未完成修改来获得干净目录。
- 核对正在进行的发布及线上运行 SHA。其他发布未结束时先等待或协调;若线上有目标分支尚未包含的修复,先整合,避免覆盖。
- 用户调用 deploy 或要求完整提交发布流程时,默认允许尝试合并本次任务的 PR。用户明确要求“仅创建 PR”或“等待他人合并”时遵循该限制。仅创建/修改本技能不代表授权合并或发布;迁移和其他超出发布范围的操作继续遵循项目规则。
整理当前工作、提交并创建 PR
- Fetch 最新主分支;将当前任务与最新代码整合,处理本任务范围内的冲突,保留必要的线上修复。
- 检查最终 diff,运行适合本次变更的测试和项目要求的完整本地构建。构建失败时先修复,不跳过项目门禁。
- 仅暂存本任务文件,核对
git diff --cached后提交。推送功能分支,不默认直接 push 集成主分支到 origin。 - 如已有对应 PR,更新它;否则创建新 PR。标题和描述以最终行为为准,包含验证结果、明确未验证/未配置的项目及发布所需事项。使用结构化参数或
gh ... --body-file保留真实换行。 - 向用户提供 PR 链接,核对状态并按仓库规则尝试合并。
尝试合并与等待
- 通过
gh pr view <编号> --json state,mergeCommit,baseRefName,headRefOid,statusCheckRollup核实状态,不把审批通过或检查通过当作已合并。 - 本地验证通过后,确认 PR 的目标分支和 head 提交与本次已验证版本一致,检查合并条件,再主动调用
gh pr merge,采用仓库允许的合并方式,无需再次请求合并许可。不得使用管理员绕过、关闭分支保护或跳过必需检查。 - 若缺少必需审批、检查未完成或仓库拒绝合并,报告具体原因并进入有限等待;不要反复重试、绕过限制或自动启用后台合并。存在冲突或失败检查时,先在任务范围内修复并重新验证,再尝试合并。
- PR 仍为 OPEN 时,可在本轮短暂、有限地等待,每次等待不超过 60 秒并保持进度沟通。若仍待合并,报告 PR 链接与等待状态,结束本轮;不创建后台持续轮询或部署调度。
- 后续用户说“已合并”时复核 PR,然后继续已授权的部署流程,不再重复询问发布许可。
- PR 被关闭且未合并,或目标分支改变时,停止该 PR 的部署,说明实际状态。
合并后同步并切回主分支
- Fetch 远端主分支,取得 PR 的真实合并 SHA。
- 安全切回本地主分支,并用
git merge --ff-only origin/<主分支>同步;不要用硬重置覆盖本地工作。主分支已在另一个 worktree 使用时,先核对该目录状态,不抢占分支。 - 确认发布目标包含该 PR 的合并 SHA,也包含必须保留的线上修复。记录准备发布的完整 SHA。
- 若主分支多了先前没有验证的改动,按变更范围补充验证并完成项目要求的本地构建。完全相同的代码树可复用已有构建证据。
- 原主工作目录存在无法安全切换的其他改动时,保留它们,在干净发布 worktree 验证主分支的准确提交,并明确说明目录/分支状态,不能声称已切换原目录。
直接部署与核验
- 部署前再确认没有其他发布进程、线上修复未被遗漏、目标 SHA 与已验证版本一致。若状态变化,先重新整合;不清除别人的部署锁。
- 使用仓库规定的直接部署方式,不默认改走 GitHub Actions、预发布环境或另外一套流水线。
- 推送返回失败、连接断开或结果不明时,先查询部署进程、运行容器 SHA 和站点状态,再决定下一步;不盲目重复发布或强制回退。
- 等到部署结束,核对进程运行、健康检查、运行容器的真实 SHA,以及本次变更页面/接口的实际返回和关键行为。HTTP 200 或配置变量改变本身不足以证明新版已生效。
- 失败时区分构建失败、未切换成功、已切换但后置步骤出错。保留实际错误,报告仍未完成的检查,不把尝试发布当作成功。
BlackSail Webapp
仅在当前仓库为 BlackSail Webapp 且其规则仍一致时使用本段;如有变化,以当前 AGENTS.md 为准。
集成主分支为
develop,部署远端分支为 Dokku 的main,两者不要混淆。在执行 pnpm、测试、代码生成或构建前确认 Node 22;优先加载用户 nvm,不硬编码 patch 版本路径。
本地完整构建:
make build-web。合并并同步主分支后,默认在 monorepo 根目录执行
make deploy-web-direct。需要独立发布 worktree 时,使用仓库支持的DEPLOY_BRANCH明确指定与最新 develop 完全一致的已合并提交/分支,并解释实际发布源。核验命令:
ssh dokku@dokku.me ps:report web ssh dokku@dokku.me enter web web printenv GIT_REV正式站为
https://blksails.cn。检查与本次改动有关的地址;受保护页面需要登录时,不将登录页的 200 当作目标功能验证成功。git:report的 Git sha、config:get的版本可能与当前运行容器不同,以运行容器GIT_REV和实际页面内容核实切换结果。
最终汇报
说明提交/PR 链接、合并与主分支同步状态、实际部署 SHA、构建和测试结果、线上核验结果及仍待处理的事项。尚在等待合并时,只报告等待状态,不宣称已完成发布。