Skip to content

[自动合并 P2-7] merge queue 接入 #92

Description

@randypanding

目标

启用 merge queue:多 agent 并发时"各自对 main 绿、合起来红"的问题由队列串行化验证解决,同时消除"分支需 up-to-date"导致的反复手动 update branch。

背景(源自 #81 §6)

多 agent 并发提 PR 后,每个 PR 都基于旧 main 验证通过,合并顺序不同时语义冲突直接进 main。merge queue 把 PR 排队、按"队列前缀 + 本 PR"的虚拟合并重新验证,绿才落地。硬性前提:gate workflow 必须订阅 merge_group 事件,否则 required check 在队列中永不上报、合并直接失败。

涉及文件

  • governance/rulesets/main-protection.json(增加 merge_queue rule)
  • .github/workflows/gate.ymlon: 增加 merge_group)——本仓及各业务仓所有 required check workflow
  • CI-Workflows 各 reusable workflow 的触发声明(caller 侧事件传递)
  • governance/expected-state.json(merge queue 参数进期望状态对账)

执行步骤

  1. 所有 required check 链路上的 workflow 增加 merge_group 触发(types: [checks_requested])。逐个仓排查,漏一个 = 该仓队列卡死。
  2. main-protection.json 增加 merge_queue rule(参数:merge_method squash,max_entries_to_merge / 并发参数取保守默认值)。
  3. expected-state.json 与 drift-check 对账 merge queue 配置。
  4. 注意与 P1-3 的一致性:merge_group 场景下 aggregator 的 needs 断言同样严格。
  5. 先在高活跃仓(agent-registry / template-service)启用,观察一周再全量。

验收标准

  • 语义冲突的两个 PR:各自对 main 绿,先入队者合并,后入队者被队列重验拦下(踢出队列并标注冲突),而不是红进 main。
  • 队列中 required check 正常上报(无永久 pending)。
  • drift-check 覆盖 merge queue 配置。

测试方法(预先指定)

T1 语义冲突拦截(核心,端到端):在测试仓:

  1. PR-A:把函数 foo() 的返回值从 int 改为 str(含其测试更新)→ 绿,加入 merge queue。
  2. PR-B(基于不含 A 的 main):新增调用 foo() 并按 int 处理的代码 → 对 main 绿,加入 merge queue。
  3. 断言:A 合并后,队列用"A+main+B"重验 B → B 的 check 变红、B 被踢出队列并收到失败通知;main 始终保持绿。

T2 merge_group 上报(核心,负向预防)

  1. 在测试仓临时移除某 required workflow 的 merge_group 触发,开 PR 入队。
  2. 断言:队列在超时时间内未收到 check → PR 被踢出(此用例证明"漏配 merge_group = 卡死"的侦测有效性;随后立即还原配置)。
  3. 还原后重跑正常入队流程 → 断言合并成功。

T3 并发吞吐(正向):连续 3 个无冲突 PR 同时入队 → 断言按序全部合并,无人工干预,main 全程绿。

T4 对账:手动改动队列参数(如 merge_method)→ 断言 drift-check 报漂移;apply 还原。

依赖

  • P1-1 / P1-2(auto-merge 全链路已通)
  • P1-3(aggregator 严格断言在 merge_group 场景下同样成立)

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 工作流相关rulesetRuleset 配置相关

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions