Skip to content

[r2cn] [Mono UI] 修改MR 的Merge Box 逻辑,完成Merge前的一系列校验工作 #1334

Description

@benjamin-747

[任务] 修改MR 的Merge Box 逻辑,完成Merge前的一系列校验工作

[任务分值] 25 分

[背景描述]

当前 Mono 项目的 PR 合并流程中,前端 UI 的 Merge Box(合并按钮与相关信息展示区域)逻辑较为简单

  1. 校验逻辑分散
    部分关键检查(例如 GPG 签名、提交规范检查、分支保护规则)依赖人工判断缺乏及时反馈。

  2. 用户体验不佳
    当开发者点击“Merge”后才收到错误提示(例如签名无效、PR 未更新至最新目标分支),会造成额外的操作成本。

  3. 可维护性低
    Merge Box UI 与校验逻辑的耦合度低,缺乏统一的检查机制,不利于后续扩展更多合并前规则。

[需求描述]

在前端 Merge Box 逻辑中,集成一套可扩展的合并前校验机制,确保在执行 Merge 前完成所有规则验证。

  1. 校验范围
  • 提交签名验证(如 GPG 签名是否存在且有效)
  • 分支保护规则(是否符合受保护分支策略,例如禁止直接合并到 main,必须先经过 squash/rebase)
  • 提交信息规范(是否符合 Conventional Commits 或内部约定格式)
  • PR 更新状态(是否基于目标分支最新提交,是否需要 rebase)
  • 冲突检测(确认 PR 分支与目标分支无冲突)
  • CI 检查结果(所有必须通过的流水线已通过)
  • 代码审查状态(所需的 reviewer 审批已完成)
  1. UI 交互要求
  • 实时校验:在 PR 页面加载时立即执行校验,并在 Merge Box 中逐条展示结果。
  • 动态刷新:当用户 rebase、更新分支或提交新代码后,自动重新触发校验。
  • 分级提示:
    • 检查中:黄色标识,提示“正在进行检查”
    • 通过:绿色标识,提示“已通过”
    • 阻止:红色标识,禁用 Merge 按钮并给出原因
  • 详细信息:点击提示可展开查看具体失败原因和解决建议。
  1. 技术实现要求
  • 在 Merge Box 模块新增 preMergeChecks 机制,支持并行执行多个检查
  • 支持配置化加载检查项,便于后续扩展
  • 结果通过状态对象传递给 UI,统一渲染
flowchart TD
    A[PR 页面加载] --> B[调用后端合并前校验 API]
    B --> C{校验结果返回}

    C -->|所有检查通过| D[渲染 Merge Box: 按钮可用 + 全绿状态]
    C -->|部分警告| E[渲染 Merge Box: 按钮可用 + 黄标提示]
    C -->|有阻塞项| F[渲染 Merge Box: 按钮禁用 + 红色错误提示]

    %% 动态刷新逻辑
    G[用户操作: 更新分支 / Rebase / 新提交] --> H[重新调用校验 API]
    H --> C

    %% 合并按钮点击前
    I[用户点击 Merge] --> J[再次触发合并前校验]
    J --> K{结果是否全通过}
    K -->|是| L[发送合并请求到后端]
    K -->|否| M[阻止合并 + 展示错误详情]

    %% UI 交互
    E --> N[点击提示查看警告详情和解决建议]
    F --> O[点击提示查看阻塞原因和解决建议]
Loading

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和 使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;

[PR 提交地址] 提交到 mega 仓库的 main 分支 `` 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;

[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。

  1. Quanyi Ma genedna@gmail.com
  2. Tianxing Ye yetianxing2014@gmail.com

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核

Metadata

Metadata

Assignees

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions