Pull Request已成功合入, 合并人@CANN-robot
(感谢 duanpengliang 的贡献)Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/runtime | ✅ wangtao43, yanmingxiang (2/2) | ✅ wangtao43 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
duanpengliang, thanks for your pull request. All authors of the commits have signed the CLA. 👍


🤖 CANN 代码审查报告
PR: #1339 - add precommit
严重性: ✅ Low
审查时间: 2026-03-31 15:21
📊 审查结论
✅ 建议合入
- 严重性: Low
- 代码质量: 良好
- 内存安全: ✅ 无风险(配置文件和脚本,无动态内存操作)
- 安全性: ✅ 无漏洞(输入验证充分,错误处理完善)
- 测试覆盖: NA(基础设施代码)
- 文档完整性: 完整(详细的中文提示信息)
这是一个添加 Git pre-commit hooks 的基础设施变更,目的是在代码提交前自动进行代码格式检查和合规性扫描。代码结构清晰,错误处理完善,具有良好的用户体验。
📋 修改概述
本次 PR 添加了 pre-commit 框架支持,用于在代码提交前自动检查:
- 代码格式(clang-format)
- OAT 合规性(二进制文件和许可证头)
- 修改文件: 3个 (+501行, -2行)
- 核心变更:
.clang-format: 优化代码格式配置.pre-commit-config.yaml: 新增 pre-commit 配置文件scripts/oat_check.sh: 新增 OAT 合规性检查脚本
🔍 代码质量检查
1. 内存安全 ✅
- 内存泄漏: ✅ 无风险(纯 Shell 脚本,无动态内存分配)
- 指针操作: NA
- 动态分配: NA
- 资源管理: ✅ 良好(正确使用临时文件,有清理逻辑)
2. 安全性 ✅
-
输入验证: ✅ 完整
- 检查命令是否存在(
command -v) - 验证文件路径(相对路径转绝对路径)
- 检查 Java/Maven 安装结果
- 检查命令是否存在(
-
边界检查: ✅ 良好
- 文件列表为空时跳过检查
- 使用
set -e避免错误累积
-
潜在漏洞: ✅ 无明显漏洞
- 使用
git rev-parse安全获取仓库根目录 - 临时文件在固定目录(oat_reports),有清理机制
- 使用
3. 可读性 ✅
-
代码清晰度: ✅ 优秀
- 结构清晰,分步骤注释(7个步骤)
- 使用有意义的变量名
- 进度提示信息友好
-
命名规范: ✅ 符合
- 变量名使用大写(REPO_ROOT, OAT_DIR)
- 函数式命名(JAVA_INSTALLED, MAVEN_INSTALLED)
-
注释完整性: ✅ 完整
- 每个步骤都有清晰的注释
- 详细的中文提示信息
- 错误情况有解决建议
4. 逻辑正确性 ✅
-
算法逻辑: ✅ 正确
- 增量扫描模式,只检查暂存文件
- 自动安装依赖(Java, Maven)的逻辑完善
- 优雅降级(安装失败时跳过检查)
-
边界条件: ✅ 处理完整
- 无文件时跳过检查
- Java/Maven 未安装时自动安装
- 打包失败时提供详细建议
- Windows 系统提供手动安装指南
-
影响范围: ✅ 明确
- 仅影响 Git 提交流程
- 使用
--no-verify可跳过检查 - 不影响现有代码逻辑
💡 改进建议
-
性能优化: 考虑在 OAT 扫描时添加进度提示,对于大量文件可能耗时较长
echo "[OAT] Scanning files: $(echo $FILE_LIST | tr '|' '\n' | wc -l) files..." -
配置灵活性: 可考虑将 OAT_POLICY 作为可配置项,允许不同项目定制策略
OAT_POLICY="${OAT_POLICY:-filetype:!binary~must|!archive~must;license:*@.*}" -
日志增强: 建议添加时间戳到日志,便于问题排查
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [OAT] Running scan..." -
clang-format 版本:
.pre-commit-config.yaml中使用 clang-format v16.0.0,建议确认与项目其他工具链版本兼容 -
Shell 兼容性: 脚本使用
#!/bin/sh,但使用了set -e和部分 bash 特性,建议明确指定#!/bin/bash或测试 POSIX 兼容性
✅ 代码亮点
- 用户体验优秀: 详细的中文提示信息,自动安装依赖,优雅降级处理
- 错误处理完善: 对 Java/Maven 未安装、打包失败、扫描失败等情况都有详细处理
- 跨平台支持: 对 Linux、macOS、Windows 提供不同的安装方案
- 增量扫描: 只检查暂存文件,提高效率
- 清理机制: 自动清理冗余的 PlainReport 文件,保持报告目录整洁
- 配置合理: clang-format 配置优化(允许短函数单行,改善可读性)
总体评价: 这是一个高质量的基础设施变更,代码结构清晰,错误处理完善,用户体验友好。建议合入后可以在团队中推广使用,提高代码质量和合规性。
⚠️ 声明: 本审查报告由 AI 自动生成,仅供参考。建议人工复核后再做最终决定。


🤖 CANN 代码审查报告
PR: #1339 - add precommit
严重性: ⚠️ Medium
审查时间: 2026-03-31 15:32
📊 审查结论
⚠️ 建议修改后合入
- 严重性: Medium
- 代码质量: 良好
- 内存安全: ✅ 无风险
- 安全性: ⚠️ 有隐患
- 测试覆盖: 部分覆盖
- 文档完整性: 完整
PR 为 CANN 项目添加了 pre-commit 框架支持,用于自动代码格式化和开源合规性检查。整体设计合理,但存在 Shell 脚本安全隐患需要修复。
📋 修改概述
本次 PR 为 CANN 项目添加了 pre-commit 钩子框架支持,包括:
- 修改文件: 3个 (+501行, -2行)
- 核心变更:
.clang-format: 调整代码格式化规则(允许更紧凑的格式).pre-commit-config.yaml: 新增 pre-commit 配置文件scripts/oat_check.sh: 新增 OAT 开源合规性检查脚本(480行)
🔍 代码质量检查
1. 内存安全 ✅
- 内存泄漏: ✅ 无风险(Shell 脚本不涉及动态内存管理)
- 指针操作: ✅ 无风险
- 动态分配: ✅ 无风险
- 资源管理: ✅ 合理(使用临时文件和目录)
结论: Shell 脚本不涉及内存管理,无内存泄漏风险。
2. 安全性 ⚠️
- 输入验证: ⚠️ 部分缺失
- 边界检查: ✅ 有检查
- 潜在漏洞: ⚠️ 存在命令注入风险
⚠️ 发现的安全隐患:
- 命令注入风险(Medium) -
scripts/oat_check.sh第 43-52 行:
# 危险:变量未加引号,可能导致分词和通配符扩展
for file in $STAGED_FILES; do # 应该是 "$STAGED_FILES"
if [ -z "$FILE_LIST" ]; then
FILE_LIST="$file"
else
FILE_LIST="$FILE_LIST|$file" # 直接拼接文件名
fi
done
问题分析:
- 文件名可能包含特殊字符(空格、分号、管道符等)
- 未加引号的变量会进行分词和通配符扩展
- 直接拼接到
FILE_LIST后传递给 OAT 工具,可能导致命令注入
建议修复:
# 方案1:使用数组存储文件列表
FILE_ARRAY=()
for file in $STAGED_FILES; do
FILE_ARRAY+=("$file")
done
# 方案2:正确使用引号
for file in "$@"; do
# 转义特殊字符
escaped_file=$(printf '%q' "$file")
if [ -z "$FILE_LIST" ]; then
FILE_LIST="$escaped_file"
else
FILE_LIST="$FILE_LIST|$escaped_file"
fi
done
-
自动安装依赖的权限问题(Low):
- 脚本会自动安装 Java 和 Maven(使用 sudo)
- 可能修改系统环境,在 CI/CD 环境中可能不合适
- 建议:添加配置选项,允许禁用自动安装
-
外部命令执行(Low):
- 脚本会克隆外部仓库并执行 Maven 构建
- 如果外部仓库被篡改,可能存在供应链攻击风险
- 建议:添加仓库完整性检查(例如 git commit hash 验证)
3. 可读性 ✅
- 代码清晰度: ✅ 优秀
- 命名规范: ✅ 符合规范
- 注释完整性: ✅ 完整
代码亮点:
- 脚本结构清晰,分为多个逻辑块(文件检查、环境检查、OAT 扫描等)
- 中英文注释详细,易于理解
- 错误提示友好,包含解决方案
4. 逻辑正确性 ✅
- 算法逻辑: ✅ 正确
- 边界条件: ✅ 处理完整
- 影响范围: ✅ 明确(仅影响提交钩子)
逻辑分析:
- 脚本正确处理了文件列表、环境检查、OAT 构建和扫描流程
- 边界条件处理完善(无文件时跳过、安装失败时跳过)
- 影响范围明确,不会影响现有代码
💡 改进建议
高优先级(建议修复)
- 修复命令注入风险:
- 在
scripts/oat_check.sh中为所有变量添加引号 - 使用数组或正确的转义方法处理文件列表
- 示例代码已在上文提供
- 在
中优先级(建议优化)
-
增加配置选项:
- 添加环境变量
OAT_SKIP_AUTO_INSTALL=1禁用自动安装 - 添加
OAT_SKIP_ON_ERROR=1允许在错误时继续提交 - 示例:
if [ "$OAT_SKIP_AUTO_INSTALL" = "1" ]; then echo "[OAT] 自动安装已禁用,跳过检查" exit 0 fi
- 添加环境变量
-
优化错误处理:
- 在
set -e前添加trap捕获错误 - 提供更详细的错误日志
- 示例:
set -e trap 'echo "[OAT] Error on line $LINENO. Exit code: $?"' ERR
- 在
低优先级(可选)
-
添加单元测试:
- 为
oat_check.sh添加测试用例 - 测试不同场景(有/无文件、有/无 Java、有/无 Maven)
- 测试文件名包含特殊字符的情况
- 为
-
优化性能:
- 缓存 OAT JAR 路径到环境变量或配置文件
- 避免每次提交都检查 OAT JAR 是否存在
- 示例:
OAT_JAR_CACHE="$REPO_ROOT/.oat_jar_path" if [ -f "$OAT_JAR_CACHE" ]; then OAT_JAR=$(cat "$OAT_JAR_CACHE") fi
-
添加仓库完整性检查:
- 验证 tools_oat 仓库的 commit hash
- 防止供应链攻击
- 示例:
EXPECTED_OAT_COMMIT="abc123..." ACTUAL_COMMIT=$(cd "$OAT_DIR" && git rev-parse HEAD) if [ "$ACTUAL_COMMIT" != "$EXPECTED_OAT_COMMIT" ]; then echo "[OAT] Error: tools_oat commit hash mismatch" exit 1 fi
✅ 代码亮点
-
自动化程度高:
- 自动检测并安装 Java 和 Maven
- 自动克隆并构建 OAT 工具
- 降低了开发者的使用门槛
-
错误处理友好:
- 安装失败时提供详细的手动安装指南
- 扫描失败时允许跳过检查(不阻塞提交)
- 提供清晰的错误提示和解决方案
-
代码格式化统一:
- 使用 clang-format 自动格式化代码
- 确保团队代码风格一致
-
开源合规性保障:
- 使用 OAT 工具检查文件类型和许可证头
- 确保代码符合开源规范
-
文档完整:
- PR 描述清晰(新特性)
- 脚本注释详细
- 中英文混合,易于理解
-
设计合理:
- 使用增量模式扫描(只扫描待提交文件)
- 避免全量扫描,提高效率
- 清理冗余报告文件,保持仓库整洁
🧪 测试建议
建议在合入前进行以下测试:
-
功能测试:
- 测试无 Java 环境时的自动安装(Linux/macOS)
- 测试无 Maven 环境时的自动安装
- 测试 OAT 扫描通过和失败的场景
-
安全性测试:
- 提交包含特殊字符的文件名(空格、分号、管道符等)
- 验证命令注入防护措施
-
性能测试:
- 提交大量文件时的扫描性能
- 首次运行(需要安装依赖)和后续运行的性能对比
-
兼容性测试:
- 在 Linux、macOS、Windows(Git Bash)上测试
- 在 CI/CD 环境中测试
📌 总体评价
优点:
- 为 CANN 项目引入了 pre-commit 框架,提高了代码质量和开源合规性
- 自动化程度高,降低了开发者使用门槛
- 错误处理友好,不阻塞提交流程
- 代码可读性优秀,注释详细
需要改进:
- 存在 Shell 脚本安全隐患(命令注入风险),需要修复
- 建议增加配置选项和更完善的错误处理
- 建议添加测试用例和性能优化
建议:
修复命令注入问题后即可合入。其他改进建议可以在后续 PR 中逐步完善。
⚠️ 声明: 本审查报告由 AI 自动生成,仅供参考。建议人工复核后再做最终决定。


compile


流水线任务触发成功
任务链接 [640e5d36d51b4993a8ab660d57a5548e][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ❌ FAILED | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| anti_virus | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | |
| UT_Test_acl | ⚪ ABORTED | >>>>> | |
| UT_Test_rts | ⚪ ABORTED | >>>>> | |
| UT_Test_rts_c | ⚪ ABORTED | >>>>> | |
| UT_Test_platform | ⚪ ABORTED | >>>>> | |
| UT_Test_qs | ⚪ ABORTED | >>>>> | |
| UT_Test_aicpusd | ⚪ ABORTED | >>>>> | |
| UT_Test_tsd | ⚪ ABORTED | >>>>> | |
| UT_Test_dfx | ⚪ ABORTED | >>>>> | |
| API_Check | ⚪ ABORTED | >>>>> | |
| UT_Test_mmpa | ⚪ ABORTED | >>>>> |
[2026-03-31 16:39:59] CI执行失败


compile


流水线任务触发成功
任务链接 [51e637b7cfa6494a8bbf616622212790][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| anti_virus | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | |
| codecheck_style | ✅ SUCCESS | ||
| UT_Test_acl | ✅ SUCCESS | >>>>> | |
| UT_Test_rts | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_c | ✅ SUCCESS | >>>>> | |
| UT_Test_platform | ✅ SUCCESS | >>>>> | |
| UT_Test_qs | ✅ SUCCESS | >>>>> | |
| UT_Test_aicpusd | ✅ SUCCESS | >>>>> | |
| UT_Test_tsd | ✅ SUCCESS | >>>>> | |
| UT_Test_dfx | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> | |
| UT_Test_mmpa | ✅ SUCCESS | >>>>> |
[2026-04-01 17:02:11] CI执行结束


compile


流水线任务触发成功
任务链接 [afebb46dc0f7451ca4326ee21faa999c][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| anti_virus | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | |
| codecheck_style | ✅ SUCCESS | ||
| UT_Test_acl | ✅ SUCCESS | >>>>> | |
| UT_Test_rts | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_c | ✅ SUCCESS | >>>>> | |
| UT_Test_platform | ✅ SUCCESS | >>>>> | |
| UT_Test_qs | ✅ SUCCESS | >>>>> | |
| UT_Test_aicpusd | ✅ SUCCESS | >>>>> | |
| UT_Test_tsd | ✅ SUCCESS | >>>>> | |
| UT_Test_dfx | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> | |
| UT_Test_mmpa | ✅ SUCCESS | >>>>> |
[2026-04-02 10:03:20] CI执行结束


/lgtm


Review Guide
This pull-request passes review.
Committers who wrote a comment of /approve are: wangtao43.
Reviewers who wrote a comment of /lgtm are: wangtao43, yanmingxiang.


描述
add precommit for git hook
关联的Issue
测试
文档更新
类型标签