deploy

整理并提交当前任务工作,创建 PR、按仓库规则尝试合并,然后同步并切回项目主分支,直接部署并核验。用于用户要求提交发布、合并后上线或调用 deploy 的交付流程;仅创建技能、修改代码或本地预览不触发发布。

SKILL.md

GitHub

Deploy

把当前任务交付到已核验的线上版本。顺序为:整理改动 → 验证并提交 → 创建 PR → 尝试合并 → 同步并切回主分支 → 直接部署 → 核验。

先确定范围和发布状态

  • 读取当前仓库的 AGENTS.md,确认项目要求的运行时、构建命令、主分支、部署命令与环境。这里的“主分支”是项目实际集成分支,不一定叫 main。
  • 检查 git status --short、当前分支、worktree 和远端。按当前会话的任务范围确认待交付文件,不用 git add -A 把其他任务的工作顺带提交。
  • 如果工作位于共享目录或主分支,必要时使用独立功能分支/worktree。不要自动 stash、reset、clean 或丢弃他人未完成修改来获得干净目录。
  • 核对正在进行的发布及线上运行 SHA。其他发布未结束时先等待或协调;若线上有目标分支尚未包含的修复,先整合,避免覆盖。
  • 用户调用 deploy 或要求完整提交发布流程时,默认允许尝试合并本次任务的 PR。用户明确要求“仅创建 PR”或“等待他人合并”时遵循该限制。仅创建/修改本技能不代表授权合并或发布;迁移和其他超出发布范围的操作继续遵循项目规则。

整理当前工作、提交并创建 PR

  1. Fetch 最新主分支;将当前任务与最新代码整合,处理本任务范围内的冲突,保留必要的线上修复。
  2. 检查最终 diff,运行适合本次变更的测试和项目要求的完整本地构建。构建失败时先修复,不跳过项目门禁。
  3. 仅暂存本任务文件,核对 git diff --cached 后提交。推送功能分支,不默认直接 push 集成主分支到 origin。
  4. 如已有对应 PR,更新它;否则创建新 PR。标题和描述以最终行为为准,包含验证结果、明确未验证/未配置的项目及发布所需事项。使用结构化参数或 gh ... --body-file 保留真实换行。
  5. 向用户提供 PR 链接,核对状态并按仓库规则尝试合并。

尝试合并与等待

  • 通过 gh pr view <编号> --json state,mergeCommit,baseRefName,headRefOid,statusCheckRollup 核实状态,不把审批通过或检查通过当作已合并。
  • 本地验证通过后,确认 PR 的目标分支和 head 提交与本次已验证版本一致,检查合并条件,再主动调用 gh pr merge,采用仓库允许的合并方式,无需再次请求合并许可。不得使用管理员绕过、关闭分支保护或跳过必需检查。
  • 若缺少必需审批、检查未完成或仓库拒绝合并,报告具体原因并进入有限等待;不要反复重试、绕过限制或自动启用后台合并。存在冲突或失败检查时,先在任务范围内修复并重新验证,再尝试合并。
  • PR 仍为 OPEN 时,可在本轮短暂、有限地等待,每次等待不超过 60 秒并保持进度沟通。若仍待合并,报告 PR 链接与等待状态,结束本轮;不创建后台持续轮询或部署调度。
  • 后续用户说“已合并”时复核 PR,然后继续已授权的部署流程,不再重复询问发布许可。
  • PR 被关闭且未合并,或目标分支改变时,停止该 PR 的部署,说明实际状态。

合并后同步并切回主分支

  1. Fetch 远端主分支,取得 PR 的真实合并 SHA。
  2. 安全切回本地主分支,并用 git merge --ff-only origin/<主分支> 同步;不要用硬重置覆盖本地工作。主分支已在另一个 worktree 使用时,先核对该目录状态,不抢占分支。
  3. 确认发布目标包含该 PR 的合并 SHA,也包含必须保留的线上修复。记录准备发布的完整 SHA。
  4. 若主分支多了先前没有验证的改动,按变更范围补充验证并完成项目要求的本地构建。完全相同的代码树可复用已有构建证据。
  5. 原主工作目录存在无法安全切换的其他改动时,保留它们,在干净发布 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、构建和测试结果、线上核验结果及仍待处理的事项。尚在等待合并时,只报告等待状态,不宣称已完成发布。