host: GitHub PR/CI line (github-workflow, pr, pr-checks, pr-merge with checks gate)

This commit is contained in:
host committed 2026-10-26 01:12:04 +08:00
1 parent 2f326f33f8
commit b97c34465f
4 files changed
+458

No files matched your search

+47
View File
@@ -438,3 +438,50 @@ tests/ 标准库 unittest,验收命令就是 `python3 -m unittest discover -s
`host.py --config <config> health`(无模型成本)和 /
或 `run-due`(到期才跑模型),需用户定间隔和是否允许
自动跑模型后才装。
## GitHub PR/CI 一条线(2026-10-26,用户选“先做 GitHub PR/CI 这一条线”)
- **只做代码和本地可测部分,真实 PR 本轮没跑**:本仓没有
git remote origin(`git remote -v` 为空),gh 未登录
(`gh auth status`:未登录)。按任务要求,不登录 GitHub、
不向真实 GitHub push 或建 PR,真实 PR 那一步留给用户以后
给仓库远端和 PAT 之后再跑;PAT 走 Secure Vault,绝不写进
文件、state、日志或聊天记录。
- **新增命令(都在 Server 创建之前,不跑模型)**:
- `github-workflow`:生成 `.github/workflows/host-verify.yml`
(checkout + setup-python 3.12 + `python3 -m unittest
discover -s tests -v`),幂等:已存在且内容相同则不改写。
临时仓库实测:第一次 changed=true,第二次 changed=false。
- `pr --task <名>`:校验任务(无 branch 或状态不是
completed/merged 就报错退出)→ 查 remote origin(无 remote
就明确报错,不静默失败)→ `git push origin <branch>` →
`gh pr create --title/--body/--head`(body 含任务名、提示摘要、
未解决评审评论)→ 成功后 pr_url/pr_number 写回任务记录并
保存 state;失败打印 gh/git 错误原文,不编造 URL。
- `pr-checks --task <名>`:调 `gh pr checks <number>`,解析
输出返回 {pr_url, checks: [{name, state}], all_pass},
all_pass 仅当 checks 非空且全部为 pass 时为真(空 checks
不算过,否则空 PR 也能合)。解析兼容制表符格式和
人类可读格式(✓ build pass / ✗ test fail)。
- `pr-merge --task <名>`:先调 pr-checks,未全过拒绝且不调
merge,并打印未过项;全过才 `gh pr merge --merge`,成功
后任务状态标 merged。**不动本地主分支**:合并由 GitHub
完成,和本地 merge_task()(直接合进本地主仓 + 自动验测
回滚)是两条线,一个任务不要两边都合。
- **gh 可注入**:全部 gh 调用走 `run_gh(args, cwd, runner)`,
单测注入假 gh,不依赖真实网络和登录;真实路径走 gh CLI。
- **单测**:tests 从 19 个涨到 27 个,全部通过。新增 8 个:
workflow 内容正确且幂等(含被改坏后恢复);pr-checks
解析 pass / fail / mixed / 空;pr-merge 未全过时拒绝且未
调 merge、全过时才调 merge 并标 merged;无 branch /
非 completed 状态被拒;无 remote 时 pr 报错含 remote;
本地 bare 远端 push 成功后假 gh 返回 PR URL(pr_number
42 写回任务,bare 远端里确有 host/t1 分支);CLI 层
`pr --task` 在无 remote 时退出码非零且输出含 remote。
- **未动的部分**:本地 merge/goal/review 行为未改;没有动
~/.codex/config.toml;没有动 wechat-bridge;没有提交
git commit,改动留在工作区。
- **真实 PR 仍缺什么**:仓库远端(`git remote add origin <url>`)
和 gh 登录(PAT 走 Secure Vault)。两者齐了之后的顺序:
github-workflow 生成并提交 workflow → 任务 completed 后
pr → pr-checks → pr-merge。