Skip to content

[自动合并 P2-6] post-merge 验证 + 自动 revert #91

Description

@randypanding

目标

建立 post-merge 验证 + 自动 revert 装置:合并到 main 后跑 smoke/canary 验证,失败则自动生成 revert PR 并 auto-merge。这是把"事前人审"换成"事后回滚"的核心装置——没有它,自动合并不成立(#81 结论:这是"敢不敢开"的两个前提之一)。

背景(源自 #81 §一 / §6)

一人公司的自动合并风险模型不是"坏代码进了 main",而是"坏代码进了 main 而我三天后才知道"。事前拦截永远有漏,事后快速回滚把爆炸半径从"天"压到"分钟"。本装置同时也是破玻璃回填超时(P3-2)和熔断机制的复用基础。

涉及文件

  • CI-Workflows/.github/workflows/release.yml 或新增 post-merge.yml(push to main 触发的 smoke 验证)
  • 各业务仓 smoke 测试定义(什么算"合并后健康":服务起得来 / 关键导入可用 / 健康检查通过——按仓声明)
  • revert 自动化(workflow 内:生成 revert PR → enable auto-merge → 开 issue 通知人)
  • governance/policy/(smoke 失败处置策略、熔断阈值)

执行步骤

  1. 为每个受管仓声明 smoke 验证内容(进 policy,机器可解析)。最小可行:构建通过 + 测试套件在 main 上重跑 + 仓特定的健康检查。
  2. 实现 post-merge workflow:push to main 触发 → 跑 smoke → 失败则:
    a. 用 AG-1 token 生成 revert PR(git revert 该 merge commit);
    b. 对该 revert PR enable auto-merge(走 P1-2 实测过的路径);
    c. 开 issue(打 P0 label)通知人,内容含被 revert 的 commit、smoke 失败日志链接。
  3. 熔断:连续 N 次(建议 3)自动 revert 后,自动暂停该仓 auto-merge(repository variable / 或开 P0 issue 要求人工介入),防"坏了合、合了 revert"的振荡烧额度。
  4. revert PR 本身必须过 gate(不能为 revert 开 bypass——revert 也可能是坏的)。

验收标准

  • 合入一个 smoke 必败的 commit 后,无需任何人工操作:main 在分钟级恢复绿,且产生 revert PR 记录 + P0 issue 通知。
  • revert PR 过 gate 才合并(gate 红时 revert 也不合并,开 P0 issue 升级叫人)。
  • 连续 3 次 revert 后该仓 auto-merge 自动暂停并有显式告警。

测试方法(预先指定)

T1 端到端自动 revert(核心):在测试仓 Use-up-Plan

  1. 先声明一个 smoke 检查(如 "main 上某脚本退出码为 0")。
  2. 开一个 PR 使该 smoke 必败(如让脚本 exit 1),走正常流程合并进 main。
  3. 断言(全程零人工):
    • post-merge workflow 在合并后自动触发且变红;
    • 10 分钟内出现自动生成的 revert PR(标题/body 含被 revert 的 commit SHA);
    • revert PR gate 绿后被 auto-merge;
    • main HEAD 上 smoke 重新变绿;
    • 存在一条 P0 issue,含 commit SHA 与失败 run 链接。

T2 revert 也要过 gate(负向):构造 revert PR 自身 gate 红的情形(可临时让 revert 内容触碰 C1 路径触发 adr-required)→ 断言 revert PR 不被合并,且出现升级通知(P0 issue 或追加评论)。

T3 熔断(负向):连续注入 3 次 smoke 必败合并(可用 workflow dispatch + 测试输入加速,不真等 3 个真实 PR)→ 断言:第 3 次后该仓 auto-merge 暂停标志被置位,后续自动 revert 流程不再尝试 auto-merge,而是直接开 P0 issue 叫人。测试后复位标志。

T4 不误报(正向):正常 PR 合并后 smoke 绿 → 断言不产生 revert PR、不产生 issue。

依赖

  • P1-1(auto-merge 已开)
  • P1-2(App token enable auto-merge 已实测——revert PR 的自动合并复用此路径)
  • P1-3(gate 可信,revert 过 gate 才有意义)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    auto-merge自动合并计划(#81)工作卡gateGate 工作流相关release发布流程相关

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions