Host rehearsal no longer needs Node on the production machine, and a failed cleanup now stops with the rehearsal database name. Docs-only staging heads no longer block rollback. Tests no longer hardcode Windows paths, and a trailing slash on the production site still refuses the test code. pytest 12 passed; tsc exit 0; lint 0 errors; identity tests 9 passed, 0 cancelled. test:db was not run. Co-Authored-By: Grok (agent loop)
3.4 KiB
3.4 KiB
PROGRESS · 发布通路第 1 次打回(2026-10-14)
- 分支:
codex/release-path-production-20261014 - 被打回的提交:
00e6efdbfa3d97b0aad764865321bc00fb1cee13 - 已把当时的
origin/staging合并进来,合并提交0dc1d8fa。没有改写已经推过的历史,也没有变基。 - 没有点任何生产按钮,没有推
staging或main。
做了什么
- 发布修订测试改为用当前 Python。Windows 上如果找到的是系统自带的 bash,就改用 Git Bash。Linux 不再去找写死的
python.exe。 - 主机上的迁移演练:计数、冒烟、删库都在 postgres 容器里做;迁移仍在 web 容器里做。主机上不再调用本机 node。演练库删不掉时退出码不是 0,并写出「演练库未删除,请手动 DROP DATABASE rehearse_…」。本地连接串只要带
?就拒绝。恢复演练库时保留备份里的授权,再把对象属主改成schema_owner。退出码 4 的意思是:演练库跑完迁移后,服务角色仍然不能读人物表。不是去问正在服务的生产库。 - 生产回滚的控制器改成和正向发布同一条规则:最近一次门禁通过的修订。要回滚的那个版本自己的门禁、必须落在已审查的 main 历史里,这两条没有放宽。
- 三个生产工作流的合同测试锁住发布门禁开关。生产网址末尾多一个斜杠时,测试验证码仍然拒绝启动。
- 恢复点工作流没有再改成用门禁产物里的路径清单。原因:改路径清单或纯文档判断脚本本身就会触发门禁,所以测试环境头上的那份和发布修订上的那份是同一份,除非正在发布的就是这两份文件。恢复点只给正在服务的库做快照,不跑迁移、不换镜像。真正改库和换镜像的两步,仍然用发布修订的产物再核对一次。
自测
| 命令 | 结果 |
|---|---|
pytest tests/test_resolve_release_revision.py tests/test_rehearse_production_migrations.py -q |
12 通过,退出码 0 |
两个脚本 bash -n |
通过 |
tsc --noEmit -p frontend |
退出码 0 |
npm run lint --prefix frontend |
0 error,123 条原有 warning |
| 身份配置测试 | 9 通过,0 失败,0 取消 |
| 工作流合同测试整文件 | 44 条:39 通过,5 失败,0 取消 |
npm run test:db |
未跑。本轮没有改表 |
整文件里失败的 5 条都是这台 Windows 机器的环境,和上一轮进度里记的是同一类:python 占位退出码 9009、缺 rsync 两条、临时目录改权限被拒绝、纯文档判断脚本找不到 python3 退出码 49。生产部署、恢复点、生产迁移这三条合同测试是通过的,里面包含新加的发布门禁开关和回滚发现模式。部署脚本的语法检查也通过。
偏离
- 假主机测试跳过文件锁。这台机器上的 Git Bash 对
flock -n会一直卡住。正式主机仍然要拿到锁,拿不到就退出 75。 - 复制迁移文件改成每个目录一次复制。选中的文件和以前相同。逐个启动复制在这台机器上要几十秒,正式 Linux 主机不受影响。
docs/BUG_HISTORY.md里本来就有两份标题。合并时保持测试环境那份全文,只在末尾补了 BUG-1348、BUG-1349。没有去重。- 63 条清单表没有重写。表上方的说明改了一句:服务角色授权在后来的
20261014010000文件里,会进第二批。退出码 4 仍表示演练库跑完后还是没有这项授权。