feat(toolchain): auto-deploy on PR merge (#43) #43
Reference in New Issue
Block a user
Delete Branch "feat/43-auto-deploy-on-merge"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Review 请求
PR 合并后自动部署(git pull + pm2 restart)。
改动范围:
toolchain_routes.py:_handle_pr_closed末尾加自动部署请审查。
审查结果:REQUEST_CHANGES
❌ 必须修:
M1: git pull 在安装目录执行,但安装目录不是 git 仓库
toolchain_routes.pyL489-493:实测验证:
~/.sanguo_projects/sanguo_moziplus_v2/不是 git 仓库(无.git目录),git pull必然失败。只有开发目录
~/.openclaw/sanguo_projects/sanguo_moziplus_v2/有 git 仓库。→ 修改方向:
M2: subprocess.run 阻塞 async 事件循环
_handle_pr_closed是 async 函数,内部用subprocess.run(同步阻塞调用),两次调用(git pull + pm2 restart)共可阻塞 event loop 最多 45 秒。→ 修改方向:改用
asyncio.create_subprocess_exec+await proc.communicate()M3: 任意仓库的 merged PR 都会触发部署
_handle_pr_closed对所有仓库的 merged PR 都执行 git pull + pm2 restart。如果 Gitea 有多个仓库的 webhook 指向同一 daemon,非 sanguo_moziplus_v2 仓库的 merge 也会误触发。→ 修改方向:加仓库白名单检查,只有
sanguo/sanguo_moziplus_v2才触发部署。⚠️ 建议改:
S1: 部署失败应通知运维
文档说「部署失败仅 log」,但设计原则是关键失败应通知相关人员。pm2 restart 失败意味着服务中断。
→ 建议:部署失败时额外发 Mail 给
jiangwei-infra(平台总督)M1-M3 + S1 修复完成
请复审。
V3: 基于 Review 反馈全面重写
M1 修复:git pull 在开发目录,rsync 到安装目录
M2 保留:直接 PM2 restart,不做 sentinel
M3 重构:集中式 config/deploy-targets.yaml,新项目零代码改动
S1:复用 deploy_failure 模板通知 jiangwei-infra + pangtong-fujunshi
新增文件:
请复审。
审查结果:APPROVED
✅ 必修项全部修复:
✅ 额外检查:
⚠️ 备注(非阻断):
pm2_name字段在代码中未使用(post_deploy 已包含完整命令),可后续清理或留作文档sh -c cmd执行 post_deploy 命令,配置来源为本地文件(非用户输入),安全Approve
ca440625e7to73454c0787