Pull Request已成功合入, 合并人@zhangjinshi
(感谢 liguo 的贡献)变更摘要
此 PR 主要针对 TTFHW 项目的 CI 开发容器环境进行优化,解决在网络受限场景下的构建稳定性问题。核心改动包括:引入 Go 工具链自动安装以支持 gitleaks 预提交钩子、增加 C++ ABI 编译选项的可配置性、在 NPU 示例重试前增强环境清理逻辑,以及补充 Ascend 工具链的环境初始化步骤。
主要改动
- Go 工具链自动安装与代理配置:在
.devcontainer/post_create.sh中新增 Go 1.26.5 的安装逻辑,从golang.google.cn下载以避免go.dev的 SSL 不稳定问题;同时在devcontainer.json中设置GOPROXY和GOTOOLCHAIN环境变量,确保gitleaks预提交钩子的 Go 依赖能通过国内代理获取,并阻止自动下载工具链。 - 预提交钩子环境预构建:
post_create.sh在安装钩子后调用pre-commit install-hooks预构建钩子环境,尤其是gitleaks的 Go 构建缓存到持久化卷中,使首次提交即时可用;子模块初始化失败时不再中断整体流程,改为继续执行并给出警告。 - C++ ABI 编译选项可配置化:
script/build_and_pack_run.sh新增--build_open_abi参数(默认OFF),控制_GLIBCXX_USE_CXX11_ABI编译开关,替代之前硬编码的OFF,使新旧 C++ ABI 的切换可通过命令行灵活指定。 - NPU 示例重试前的环境清理:
script/run_all_examples.sh新增prepare_env_before_retry函数,在示例重试时先清理残留的 Python 进程(必要时发送 SIGKILL),并等待 NPU 设备恢复空闲状态(通过npu-smi info轮询检查),避免前次失败遗留的进程或设备占用干扰重试。 - Ascend 工具链环境初始化:
script/ci_devcontainer_check.sh在执行示例之前增加source /usr/local/Ascend/ascend-toolkit/set_env.sh,确保容器内 NPU 相关环境变量已正确加载。


代码审查
所有 6 个文件均已经过详尽审查。以下是我的审查结论:
审查总结
逐文件确认
| 文件 | 审查结论 |
|---|---|
.devcontainer/devcontainer.json |
无问题 — 新增 GOPROXY / GOTOOLCHAIN 环境变量,JSON 语法正确,与 post_create.sh 一致 |
.devcontainer/post_create.sh |
无问题 — git submodule 错误处理、Go 工具链安装、pre-commit hooks 预热均正确实现,所有失败路径均有妥善降级处理 |
docs/installation.md |
无问题 — openEuler 24.03 LTS 支持及 --build_open_abi 参数文档准确、完整 |
script/build_and_pack_run.sh |
无问题 — --build_open_abi 参数正确添加到位置 3(对应 build.sh 中 ${3:-OFF}),默认值、帮助文本、echo 输出均一致 |
script/ci_devcontainer_check.sh |
无问题 — source .../set_env.sh 添加到 && 链中,在 post_create.sh 之后、run_all_examples.sh 之前执行,逻辑正确 |
script/run_all_examples.sh |
无问题 — prepare_env_before_retry() 函数正确处理残留进程清理(SIGTERM → 10s 等待 → SIGKILL)及 NPU 空闲等待,所有变量均已 local 化 |
统计
- P0: 0
- P1: 0
- P2: 0
- P3: 0
整体风险评估
此变更风险极低。 改动围绕两个主题:(1) 通过 --build_open_abi 参数支持 openEuler 24.03 LTS 上的 C++ ABI 兼容性,改动仅将原本硬编码的 OFF 替换为可配置变量,不影响默认行为;(2) devcontainer / CI 基础设施增强(Go 工具链、pre-commit hooks 预热、示例重试清理),所有失败路径均有降级处理,不会导致脚本异常退出。文档更新准确描述了新参数的使用场景。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_memfabric-hybrid | ✅ | >>> |
| Build_memfabric-hybrid-bazel | ✅ | >>> | |
| 恶意代码检查 | Antipoison_mf | ✅ | >>> |
| 编码安全与规范检查 | pre-commit | ✅ | >>> |
| CodeCheck_mf | ✅ | >>> | |
| 开源片段检查 | SCA_mf | ✅ | >>> |
| 开发者测试 | UT_memfabric-hybrid | ✅ | >>> |
| 流水线 | PR-pipeline_memfabric_hybrid | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


- ⚠️ PR 代码变更未包含测试用例(变更文件路径中均不包含 test 或 ut),请确认已经备注原因!
请修正后重新提交,或联系仓库管理员。


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
⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 3 person(s) per module)、approve (requires ≥ 1 person(s) per module)
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-Ascend/memfabric_hybrid | ❌ (0/3)(You can also ask: youngzhou66, 陈元明, yangyouchuan, 周健安, gaopu2024) | ❌ (0/1)(You can also ask: easycurd, chenyz6, yrewzjsx, shepherd-cheung, wang-ruiju) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
littleyellowbicycle, thanks for your pull request. All authors of the commits have signed the CLA. 👍


ascend docs pipeline is running...


🟡 Medium Priority
changed line → affected behavior/contract → failure mode → suggested fix
prepare_env_before_retry 函数(第 118/120/122/126/128 行)使用 pgrep -f "${name}\.py" 和 pkill -f "${name}\.py" 来查找并清理残留的 Python 示例进程。但 -f 标志匹配的是完整命令行而非仅进程名,因此任何命令行中包含 name.py 的进程都会被匹配——不仅包括目标 python3 /path/to/name.py,还包括:
vim 01_single_device_dram_pool.py(开发者正在编辑该文件)less 01_single_device_dram_pool.pygrep -r something 01_single_device_dram_pool.py- 其他任何工具打开或引用该文件的进程
在 devcontainer 场景中,如果开发者在编辑示例文件的同时运行此脚本,且某个示例失败触发重试,prepare_env_before_retry 会向开发者的编辑器发送 SIGTERM/SIGKILL,导致未保存的工作丢失。
触发条件:任意 Python 示例首次运行失败触发重试 + 存在非目标进程的命令行恰好包含该示例的 .py 文件名。
建议:将 pgrep -f / pkill -f 的匹配模式收窄为仅匹配 Python 解释器进程。由于所有示例均通过 python3 运行(见 run_python_example 第 236 行),可以将模式改为 python3.*${name}\.py,只匹配命令行中以 python3 开头且包含目标脚本名的进程。需将函数内所有 4 处 "${name}\.py" 替换为 "python3.*${name}\.py"。


ascend docs pipeline is running...


合入来源
问题/功能描述
修改方案描述
是否涉及UT/ST
开发自检