已合并
【TTFHW】修复 TTFHW issue 308 && 工程优化 #1071
【TTFHW】修复 TTFHW issue 308 && 工程优化 #1071
已合并
liguo创建于 8月4日
liguo
liguo成员
8月4日

合入来源

  • [ √] issue

问题/功能描述

  1. devcontainer 工程 pre-commit go组件没有安装
  2. 用例脚本部分用例执行容易失败
  3. ttfhw 文档描述不全,构建脚本没有aib控制开关

修改方案描述

  1. post脚本中安装go依赖
  2. 执行前增加环境清理
  3. 脚本增加 abi 启动开关, 文档增加描述

是否涉及UT/ST

  • [ √] 否(工程修改,不涉及业务逻辑)

开发自检

  • [√ ] 规范:未超过1k;超过1k已完成备案;反合入需要标题注明【反合】
  • [ √] 规范:已关联issue或里程碑
  • [ √] 规范:不需要UT/ST且已说明理由;需要且已包含UT/ST
  • [ ×] 安全:涉及对外接口/参数/环境变量改动,并同步修改资料
  • [ √] 安全:未引入三方开源软件;引入三方开源软件并经过安全评审
  • [ √] 安全:未新增对外接口/参数;新增对外接口/参数有校验
  • [ √] 规范:未涉及资料改动;涉及资料改动并已完成修改
likedislike
Pull Request已成功合入, 合并人@zhangjinshi
(感谢 liguo 的贡献)
liguoliguo成员
8月4日 关联了issue:[TTFHW] docs/installation.md 推荐 Ubuntu 22.04 + GCC 11.4,openEuler 24.03 自带 GCC 12.3 可能触发
atomgit-bot
atomgit-bot
8月4日 评论:

变更摘要

此 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 相关环境变量已正确加载。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月4日 评论:

代码审查

所有 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

💬 仅评论

likedislike
不准确?
ascend-robot
ascend-robot成员
8月4日 评论:
流水线 PR-pipeline_memfabric_hybrid#4970 [ commitID:dee6a8cb ] 已完成
阶段 任务名 状态 详情
编译构建 Build_memfabric-hybrid ✅ >>>
Build_memfabric-hybrid-bazel ✅ >>>
恶意代码检查 Antipoison_mf ✅ >>>
编码安全与规范检查 pre-commit ✅ >>>
CodeCheck_mf ✅ >>>
开源片段检查 SCA_mf ✅ >>>
开发者测试 UT_memfabric-hybrid ✅ >>>
流水线 PR-pipeline_memfabric_hybrid ✅ >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
xiangjie10成员
8月4日 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
  • ⚠️ PR 代码变更未包含测试用例(变更文件路径中均不包含 test 或 ut),请确认已经备注原因!

请修正后重新提交,或联系仓库管理员。

likedislike
ascend-robotascend-robot成员
8月4日 添加了label:stat/needs-squash
ascend-robotascend-robot成员
8月4日 添加了label:ci-pipeline-running
ascend-robotascend-robot成员
8月4日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
8月4日 评论:

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 /approve or /lgtm
  • Commenting /approve implies 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. 👍

likedislike
liguoliguo成员
8月4日 修改了pull request 的描述
liguoliguo成员
8月4日 修改了pull request 的描述
liguoliguo成员
8月4日 将 chenyz6 设为合并人
liguoliguo成员
8月4日 将 shilinlee_com 设为合并人
liguoliguo成员
8月4日 将 yrewzjsx 设为合并人
ascend-robot
ascend-robot成员
8月4日 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
8月4日 添加了label:docs-ci-pipeline-running
atomgit-bot
atomgit-bot8月4日进行代码检视2
script/run_all_examples.sh
@@ -119,0 +128,4 @@
128+ pkill -9 -f "${name}\.py" 2>/dev/null || true
129+ sleep 2
130+ fi
131+ fi
atomgit-bot
atomgit-bot8月4日评论:

🟡 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.py
  • grep -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"。

likedislike
不准确?
liguo
liguo成员
8月5日 评论:

done

ascend-robotascend-robot成员
8月4日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
8月4日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
8月4日 评论:

❌ 文档门禁未通过!

检查项 检查结果 详情
markdownlint ❌ 未通过 查看详情
link-validity-check ✅ 已通过 查看详情
resource-existence-check ✅ 已通过 查看详情
tag-closed-check ✅ 已通过 查看详情

💡 本次检查出 1 项错误,详情内容如下:

序号 错误详情
1 [文件路径]:docs/installation.md
[检查类型]:markdownlint
[错误位置]:第 94 行
[错误信息]:MD028:引用内容之间存在空白行,请删除空白行
likedislike
ascend-robotascend-robot成员
8月4日 删除了label:docs-ci-pipeline-running
此处折叠了6条事件消息 查看更多
ascend-robotascend-robot成员
8月4日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
8月4日 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
8月4日 删除了label:docs-ci-pipeline-failed
ascend-robotascend-robot成员
8月4日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
8月4日 评论:

✅ 文档门禁通过!

检查项 检查结果 详情
markdownlint ✅ 已通过 查看详情
link-validity-check ✅ 已通过 查看详情
resource-existence-check ✅ 已通过 查看详情
tag-closed-check ✅ 已通过 查看详情
likedislike
ascend-robotascend-robot成员
8月4日 删除了label:docs-ci-pipeline-running
此处折叠了8条事件消息 查看更多
Zzhangjinshi成员
8月6日 合入了pull request