[r2cn] 新增一个 CL(Change List)合并队列
[任务] 新增一个 CL(Change List)合并队列
[任务分值] 50 分
[背景描述]
当前 Mega 系统中,CL(Change List)在通过所有检查(如 Reviewer 审批、Commit 校验、冲突检测)后,用户即可点击「Merge」按钮执行合并操作。 然而,在多人并行开发场景下,多个 CL 同时尝试合并到主分支时,系统可能出现以下问题:
- 多个 CL 几乎同时执行合并,可能导致主分支冲突;
- 无法保证合并顺序,存在回退或重复构建风险
[需求描述]
- 新增 CL 合并队列系统
- 所有通过审核的 CL 在合并前会进入一个队列中;
- 系统自动按顺序逐个处理合并,避免并发冲突。
- 状态控制与可视化
- CL 的状态包含:Waiting(等待)、Testing(构建中)、Merging(合并中)、Merged(成功)、Failed(失败);
- 前端可查看当前合并队列和每个 CL 的状态;
- 支持查看失败原因(如冲突检测失败、测试不通过)。
- 合并流程自动化
- 检查与主分支的冲突;
- 触发 Buck2 构建测试;
- 测试通过后执行自动合并;
- 更新 CL 状态并记录日志。
- 失败与重试机制
- 若 CL 合并或测试失败,状态标记为 Failed;
- 用户可手动点击「重新入队(Retry)」重新触发;
- 若在执行过程中上游分支发生变更,自动取消并重新排队。
- 前端可视化
- 合并队列列表视图(展示顺序、状态、进度);
- 重试 或 取消 操作。
[代码标准]
- 所有 PR 提交必须签署
Signed-off-by和 使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide; - 所有 PR 提交必须通过
GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果; - 代码注释均需要使用英文;
[PR 提交地址] 提交到 mega 仓库的 main 分支 `` 目录;
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。
- Quanyi Ma [email protected]
- Tianxing Ye [email protected]
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核
任务创建成功。
/request-assign
认领成功:等待导师审核,请及时联系导师进行审核。
/intern-approve
认领审核成功:已将该任务分配给学生。
/request-complete
请求完成成功:等待导师进行完成审核。
/intern-approve
操作失败:当前任务的状态不允许进行该操作。
/intern-done
操作成功:任务关闭并发放积分给学生。