Pull Request已成功合入, 合并人@ascend-robot
(感谢 Zhang-Yu001 的贡献)变更摘要
本次 PR 为 msprof 项目引入基于 devcontainer 的统一开发环境方案,新增 .devcontainer 和 .vscode 目录下的容器配置、初始化脚本及 IDE 集成文件,同时调整了构建脚本和 pre-commit 配置以适配容器内开发场景。核心目标是消除开发者本地环境差异,实现构建依赖自动安装、IDE 代码跳转/调试零配置,以及测试流程的环境隔离保护。
主要改动
-
新增
devcontainer.json容器底座配置:指定swr.cn-north-4.myhuaweicloud.com/mindstudio-image/mindstudio-build:26.1.0-0701为基础镜像,采用 bind 挂载方式将本地工作区映射至容器内的/workspace,配置host网络、特权模式、IPC 共享等运行参数,并预置 VS Code 推荐扩展(C++、Python、clangd、ruff 等)及 clangd 参数(--query-driver=*、--header-insertion=iwyu)。 -
新增
post-create.sh幂等初始化脚本:按 9 个步骤依次执行:用户~/.local/bin目录配置、pyenv Python 路径自动检测并优先写入PATH、通过 dnf/apt 补齐系统编译依赖并安装 gitleaks(arm64 二进制下载)、pip 安装 pytest/coverage/pre-commit/bandit[toml]、Git 身份同步、pre-commit hook 自动安装、clangd 就绪检查与安装、对.vscode/settings.json和version.info设置skip-worktree、提示compile_commands.json生成方式。 -
build.py新增only_down_deps参数支持:当通过-e only_down_deps=true传入时,仅执行第三方依赖下载后即退出,不继续编译和测试,专为 IDE Debug 构建流程设计。 -
download_thirdparty.sh中 googletest 版本及编译选项调整:将 googletest 从release-1.12.1降级至release-1.10.0,并通过sed移除其 cmake 内部cxx_base_flags中的-Werror,避免 GCC 编译时因警告升级为错误而失败。 -
execute_cpp_test_case.sh增加源码备份恢复机制:在用change_file_to_unix_format和add_gcov_excl_line修改analysis/csrc源码(添加 LCOV 排除注释)前,先创建临时备份;测试结束后通过trap ... EXIT自动恢复原始文件,防止覆盖率处理污染工作区源文件。


代码审查
审查总结
| 优先级 | 数量 | 文件 |
|---|---|---|
| P1 | 1 | build.py — only_down_deps 在非 test 分支无效 |
| P2 | 3 | post-create.sh (gitleaks arm64)、download_thirdparty.sh (googletest 降级)、devcontainer.json (特权模式) |
| P3 | 3 | devcontainer.json (无效 clangd 配置)、post-create.sh (无校验和)、tasks.json (globstar 依赖) |
各文件审查结论:
| 文件 | 结论 |
|---|---|
.clangd |
无问题 |
.devcontainer/devcontainer.json |
P2 (特权模式) + P3 (无效 clangd 配置) |
.devcontainer/post-create.sh |
P2 (gitleaks arm64 硬编码) + P3 (无校验和) |
.gitignore |
无问题 |
.pre-commit-config.yaml |
无问题 |
.vscode/launch.json |
无问题 |
.vscode/tasks.json |
P3 (Clean 任务 globstar 依赖) |
CMakeLists.txt |
无问题 |
build.py |
P1 (only_down_deps 分支放置错误) |
docs/zh/development_guide/development_guide.md |
无问题 |
scripts/download_thirdparty.sh |
P2 (googletest 版本降级 + 脆弱 sed) |
scripts/execute_cpp_test_case.sh |
无问题 |
整体风险判断:中等。 P1 问题会导致 VS Code Debug Mode 构建任务行为异常(先执行完整 Release 构建再 Debug 构建),影响核心开发工作流,建议优先修复。P2 问题中 gitleaks 架构硬编码会使 x86_64 环境下密钥扫描失效,googletest 版本回退和特权容器也值得关注。其余 P3 问题为改进建议。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 5 |
⛔ 需要修改


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


PR 合入模板
注:经过自检不涉及的可标注“不涉及”或直接打勾,特殊情况请文字备注。不符合规范的 PR 不允许合入,请(后备)commit 注意。
1. 修改描述
修改原因: msprof 缺少标准化 devcontainer 开发环境,开发者本地环境不一致,构建依赖需手动安装,IDE 代码跳转/调试配置繁琐。
修改内容:
新增 6 个文件:
.devcontainer/devcontainer.json— 容器底座配置,固化 MindStudio 构建镜像、挂载、用户映射、环境变量、VS Code 推荐扩展和生命周期钩子.devcontainer/post-create.sh— 幂等初始化脚本,9 个步骤:用户 bin 目录、Python 3 环境配置(自动检测 pyenv Python 路径并优先)、系统/pip 编译测试依赖自动补齐(含 pytest/coverage)、gitleaks多镜像源兜底安装、pre-commit 安装、clangd 就绪、skip-worktree(settings.json + version.info)、compile_commands 检查
.vscode/settings.json— watcher/search 排除构建、依赖和测试目录;禁用 cpptools IntelliSense,clangd 参数由 devcontainer.json 统一管理.vscode/tasks.json— 4 个 VS Code Task:Build: Release Mode / Build: Debug Mode / Test: Run Unit Tests / Clean: All Workspace.vscode/launch.json— Python debugpy 调试配置,含 PYTHONPATH 和 LD_LIBRARY_PATH 环境变量.clangd— clangd 编译数据库路径声明(CompileFlags.CompilationDatabase: build/)修改 6 个文件:
.gitignore—.vscode/改为.vscode/settings.json(保留 launch.json 和 tasks.json 的跟踪);补充artifacts/、dist/、.venv/、.cache/、.ruff_cache/、.devcontainer/.host-gitconfig.pre-commit-config.yaml— gitleaks entry 从本地./gitleaks改为系统gitleaks;bandit 增加additional_dependencies: [".[toml]"]解决 toml 解析器缺失CMakeLists.txt— 新增set(CMAKE_EXPORT_COMPILE_COMMANDS ON)为 clangd 生成编译数据库build.py— 新增only_down_deps参数支持,用于 IDE Debug 构建时仅下载依赖而不编译scripts/download_thirdparty.sh— googletest 从1.12.1降级到1.10.0(C++14 兼容),下载后自动移除-Werror标志scripts/execute_cpp_test_case.sh— 测试前备份analysis/csrc/目录,trap EXIT自动恢复,避免 LCOV_EXCL_LINE 注释和换行符转换污染源文件2. 功能验证
功能自验



本地自验用例截图

测试结果说明:
C++ 单元测试 244 个用例中 243 个通过,1 个失败:
[ PASSED ] 243 tests.
[ FAILED ] 1 test: DBAssemblerUTest.TestRunSaveOverlapAnalysisDataShouldReturnFalseWhenReserveFailed
该失败与 devcontainer 变更无关。 本次变更未修改任何
analysis/csrc/下的 C++ 源码。失败原因是该测试用例依赖特定的 sqlite 运行时行为(reserve 操作),在当前容器环境(openEuler 24.03 + sqlite嵌入式)下条件未满足。此为预存问题,在原生的命令行构建环境中同样存在(bash scripts/execute_cpp_test_case.sh运行结果一致),非 devcontainer 引入的回归。Python 单元测试全量通过。
冒烟是否通过 (填入群链接的自验证报告中,如未通过,请说明原因:____________________ ,功能代码请主动申报添加冒烟)
3. 分支合并要求
3. 代码检视
要求:
是否经过代码检视
是否具备 UT 测试用例看护 (如不符合,请说明原因:____________________)
检视意见数:____ 条 (请填写本次检视的意见总数,用于commit合入前审视)
4. 安全自检
Python、C++
C++
5. 变更知会
docs/zh/development_guide/development_guide.md— 第 3 章"开发环境配置"新增 3.1 节 devcontainer 一键开发环境使用方法(前置条件、使用步骤、VS Code 内置任务、代码跳转与调试说明),原手工配置改为 3.2 节