已合并
新增 pre-push 本地编译门禁脚本,将 CI 质量门禁左移到开发者本地,在 git push 时自动触发构建与 UT 检查。 #8563
chenqi317创建于 15 天前
新增 pre-push 本地编译门禁脚本,将 CI 质量门禁左移到开发者本地,在 git push 时自动触发构建与 UT 检查。 #8563
已合并
chenqi317创建于 15 天前
chenqi317成员
15 天前

本 PR 新增 pre-push 本地编译门禁脚本,将 CI 质量门禁左移到开发者本地,在 git push 时自动触发构建与 UT 检查。

改动原因

远程 CI 门禁失败导致开发往返成本高,开发者需要在本地反复调试后才能合入。通过 pre-push hook 在 push 前自动运行本地构建与 UT,提前发现问题,提升远程门禁成功率。

采取的方法

  1. 新增 scripts/ci/pre_push_build.sh:pre-push hook 脚本,支持两种运行模式:
    • 快速模式(默认):根据变更文件路径智能识别受影响模块(op_host/op_kernel/op_api/op_graph/arch35/experimental),仅触发相关阶段的构建与 UT,耗时短,适合日常迭代。
    • 完整模式(PRE_PUSH_FULL=1:直接调用 local_build.sh,100% 复刻 CI 门禁语义,适合合入前验证。
  2. .pre-commit-config.yaml 注册 pre-push hook:通过 pre-commit 框架管理,与现有 pre-commit 检查无缝衔接。
  3. 智能跳过策略
    • 仅文档/配置/cmake/scripts 变更 → 全部跳过
    • 仅 experimental 变更 → 只执行 check_experimental_pkg.sh
    • arch35/op_kernel 变更 → 跳过 JIT 打包,由 compile_ascend950_pkg.sh 处理
  4. CANN 环境检测:未安装 CANN 包时红色高亮提示并跳过检查,允许提交。
  5. 全流程日志:所有环节名称、执行命令、构建输出同步写入终端和 pre_push_build.log,包含 Pipeline Preview 概览和变更文件列表。

关联的Issue

测试

  • 修改 matmul/mat_mul_v3/op_host/op_tiling/arch35/ 下文件,验证快速模式正确识别 arch35 变更,跳过 JIT 打包,触发 ascend950 pkg(force_jit)。
  • 修改 op_host 非 arch35 文件,验证 JIT 打包 + ophost UT 正确触发。
  • 仅修改 .md 文件,验证 md_only 早退逻辑生效,全部跳过。
  • 未 source CANN 环境时,验证红色高亮提示并跳过检查。
  • 验证 pre_push_build.log 日志内容与终端输出一致,包含变更文件列表、模块识别、Pipeline Preview、各阶段命令与输出。

文档更新

  • 新增 pre-commit.md:本地代码门禁使用指南(pre-commit + pre-push-build 合并文档),包含安装、环境前置条件、日常开发流程、跳过检查、运行模式、执行流程、典型场景、日志与报错排查、配置参数汇总、取消安装。

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 chenqi317 的贡献)
Cchenqi317成员
15 天前 创建了 pull request,commit 603fef05
atomgit-bot
atomgit-bot
15 天前 评论:

变更摘要

本 PR 新增了一个 pre-push 本地编译门禁机制,通过 pre-commit 框架在 git push 时自动触发构建与单元测试检查,将 CI 质量门禁左移到开发者本地。核心是新增 scripts/ci/pre_push_build.sh 脚本,支持快速模式(根据变更文件路径智能识别 op_host/op_kernel/op_api/op_graph/arch35/experimental 等受影响模块,仅触发相关阶段)和完整模式PRE_PUSH_FULL=1,直接调用 local_build.sh 复刻 CI 语义),同时在 .pre-commit-config.yaml 中注册了 pre-push-build hook。

主要改动

  • 新增 scripts/ci/pre_push_build.sh 脚本:实现 pre-push 门禁主逻辑,包含环境自检(CANN 检测、关键脚本校验)、变更文件计算(通过 git merge-base 与远程分支 diff)、四步变更识别(identify_changes 函数按路径模式归类 has_kernel/has_host/has_api/has_graph/has_arch35/md_only 等标志位)、Pipeline Preview 概览输出,以及 run_fast_moderun_full_mode 两种执行路径。
  • 快速模式智能跳过策略run_fast_mode 根据 identify_changes 识别的模块标志,仅触发相关阶段(如 has_non_arch35_jit 控制 JIT 打包、has_host 控制 ophost UT),并在仅文档/配置/cmake/scripts 变更(md_only=true)或仅 experimental 变更时提前退出;arch35/op_kernel 变更跳过 JIT 打包,由 compile_ascend950_pkg.sh 处理。
  • CANN 环境未安装时的降级处理:检测 ASCEND_HOME_PATHASCEND_TOOLKIT_HOME/usr/local/Ascend/ascend-toolkit/latest 等路径下是否存在 set_env.sh,未安装时输出红色高亮警告并直接退出,允许提交放行。
  • 全流程日志与 UT 结果检查log_echo 函数将所有输出同步写入终端和 pre_push_build.logcheck_ut_resultcheck_run_test_log 对 UT 日志进行失败匹配(FAILEDerrorserror: 等关键词),失败时打印尾部错误并退出。
  • .pre-commit-config.yaml 注册 pre-push hook:新增 pre-push-build hook 条目,entry 指向 bash scripts/ci/pre_push_build.shstages: [pre-push]pass_filenames: falserequire_serial: true,与现有 pre-commit 检查无缝衔接,并注释说明了安装命令与旁路方式。
likedislike
atomgit-bot
atomgit-bot
15 天前 评论:

代码审查

审查总结

本 PR 新增 pre-push 本地编译门禁脚本及对应的 pre-commit 配置。共发现 8 个问题

优先级 数量 说明
P0 1 .pre-commit-config.yamlstages: [pre-push] 为无效值,导致 hook 永不被触发
P2 4 四个管线管道(JIT 构建、ascend950 打包、experimental 打包×2)缺少 ${PIPESTATUS[0]} 退出码检查,构建/打包失败会被静默忽略
P3 3 两处死代码(check_run_test_log 函数、kernel_ops 变量)及一处误导性注释(PRE_PUSH_FAST=1 变量不存在)

变更文件审查确认

  • .pre-commit-config.yaml:已审查,发现 2 个问题(1 P0 + 1 P3)
  • scripts/ci/pre_push_build.sh:已审查,发现 6 个问题(4 P2 + 2 P3)

整体风险判断:P0 问题为阻断性缺陷——配置错误导致整个 pre-push 门禁功能完全失效,必须在上线前修复。4 个 P2 问题在快速模式下会导致构建/打包失败被静默吞掉,用户可能推送有问题的代码而不自知,建议在修复 P0 时一并处理。3 个 P3 为低风险清理项。

类型 数量
🔴 阻塞 1
🟡 建议 4

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
15 天前 添加了label:cann-cla/yes
Cchenqi317成员
15 天前 修改标题为 “新增 pre-push 本地编译门禁脚本,将 CI 质量门禁左移到开发者本地,在 git push 时自动触发构建与 UT 检查。”,原标题为“## 描述”
此处折叠了80条消息 查看更多
CANN-robot
CANN-robot成员
14 天前 评论:

The MR can not be merged, because of CodeReview discussion not resolved

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
Cchenqi317成员
14 天前 解决了最后一个问题
CANN-robotCANN-robot成员
14 天前 关闭了关联的issue
CANN-robotCANN-robot成员
14 天前 合入了pull request
CANN-robot
CANN-robot成员
14 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike