已合并
基于 devcontainer 的 MindStudio 统一开发环境方案 #69
Zhang-Yu001创建于 7月28日
基于 devcontainer 的 MindStudio 统一开发环境方案 #69
已合并
Zhang-Yu001创建于 7月28日
Zhang-Yu001
Zhang-Yu001成员
7月28日

1. 修改描述

  • 修改原因: mstx 缺少标准化 devcontainer 开发环境,开发者本地环境不一致,构建依赖需手动安装,IDE 代码跳转/调试配置繁琐。

  • 修改方案: 依据设计文档(011.devcontainer)的 4 步接入指南,为 mstx 补齐容器底座、IDE 声明、代码智能跳转和工作区洁净规则。

  • 修改内容:
    新增 6 个文件:

    • .devcontainer/devcontainer.json — 容器底座配置,固化 MindStudio 构建镜像、挂载、用户映射、环境变量、VS Code 推荐扩展和生命周期钩子
    • .devcontainer/post-create.sh — 幂等初始化脚本,9 个步骤:用户 bin 目录、Python 3.11 切换、系统/pip 编译依赖自动补齐、Git 身份同步、pre-commit 安装、clangd 就绪、skip-worktree、compile_commands 检查
    • .vscode/settings.json — watcher/search 排除构建目录、关闭 cpptools IntelliSense、启用 clangd
    • .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 编译数据库路径声明

    修改 4 个文件:

    • .gitignore — 补齐忽略规则:artifacts/、Python 缓存(__pycache__/、*.pyc、dist/、*.egg-info/)、缓存目录(.cache/、.pytest_cache/、.ruff_cache/、.mypy_cache/)、devcontainer
      本地文件(.devcontainer/.host-gitconfig)
    • .gitmodules — 对第三方 googletest submodule 增加 ignore = all,避免 git status 噪声
    • CMakeLists.txt — 增加 CMAKE_EXPORT_COMPILE_COMMANDS ON(clangd 支持)和默认 CMAKE_BUILD_TYPE=Release
    • build.py — 增加 only_down_deps 参数支持,用于 IDE Debug 构建时仅下载依赖而不编译

    修改 2 个文档:

    • docs/zh/development_guide/develop_guide.md — 第 2 章新增 2.1 节 devcontainer 一键开发环境使用方法,原手工配置改为 2.2 节
    • docs/en/development_guide/develop_guide.md — 同步新增 1.1 节 One-Click devcontainer Setup,原手动配置改为 1.2 节

2. 功能验证


3. 代码检视

  • 要求:
    • 合入功能代码大于 200 行,需要sig会议申报代码检视议题,并在PR中标注会议。
    • committer评估是否需要在sig会议进行代码检视。
    • 参与检视的committer人员名单与检视时间。
    • 大于 1000 行代码原则上不允许合入,需进行备案。
  • 检视committer人员名单与检视时间:

4. 资料修改自检

  • 资料修改: 是
    • docs/zh/development_guide/develop_guide.md — 第 2 章"开发环境准备"新增 2.1 节 devcontainer 一键开发环境使用方法(前置条件、使用步骤、VS Code 内置任务、代码跳转与调试说明),原手工配置改为 2.2 节
    • docs/en/development_guide/develop_guide.md — 同步新增 1.1 节 One-Click devcontainer Setup,原手动配置改为 1.2 节

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Zhang-Yu001 的贡献)
atomgit-bot
atomgit-bot
7月28日 评论:

变更摘要

此 PR 为 mstx 项目建立了基于 devcontainer 的统一开发环境方案,通过新增容器底座配置、自动化初始化脚本、IDE 智能跳转与调试声明、构建任务集成以及构建脚本增强,消除了开发者本地环境不一致、依赖手动安装和 IDE 配置繁琐等问题。核心思路是“一次配置,全员复用”,开发者只需在 VS Code 中打开容器即可获得一致的构建、调试和代码智能体验。

主要改动

  • 容器底座与初始化自动化: 新增 .devcontainer/devcontainer.json 固化 MindStudio 构建镜像、挂载、用户映射与环境变量,并推荐 VS Code 扩展;新增 .devcontainer/post-create.sh 幂等脚本,自动完成 Python 3.11 切换、系统/pip 编译依赖补齐、Git 身份同步、pre-commit 安装及 clangd 就绪检查等 9 个步骤。
  • IDE 智能跳转与调试配置: 新增 .clangd 声明编译数据库路径为 build/;新增 .vscode/settings.json 排除构建目录监听/搜索、禁用 cpptools IntelliSense 并启用 clangd;新增 .vscode/launch.json 提供基于 debugpy 的 Python 文件调试和 Pytest 用例调试配置,含 PYTHONPATH 与 LD_LIBRARY_PATH 环境变量。
  • VS Code 构建任务集成: 新增 .vscode/tasks.json,定义 4 个任务——Build: Release Mode(默认构建)、Build: Debug Mode(Debug 构建)、Test: Run Unit Tests(单元测试)、Clean: All Workspace(清理产物),支持 $gcc 问题匹配器。
  • 构建脚本增强: 修改 build.py,在 BuildManager.download_dependencies() 调用后新增 only_down_deps 参数解析逻辑,当该参数为 true 时仅下载依赖后立即退出,供 Debug 模式 IDE 构建使用。
  • pre-commit 调整: 修改 .pre-commit-config.yaml,将 gitleaks 离线二进制扫描 hook 整体注释,避免容器环境中因缺少 ./gitleaks 二进制导致 pre-commit 失败。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月28日 评论:

代码审查

审查总结

本次审查覆盖了全部 11 个变更文件,共发现 6 个问题:

优先级 数量 说明
P2 2 post-create.sh 中 set -e 下未受保护的 source 命令、管道吞掉 pip 失败退出码
P3 4 VS Code 设置覆盖 devcontainer clangd 参数、gitconfig 解析脆弱、Gitleaks 被注释、--privileged 缺少降权评估

各文件审查结果:

  • .clangd — 无问题
  • .devcontainer/devcontainer.json — 1 个 P3 发现(privileged 安全风险)
  • .devcontainer/post-create.sh — 2 个 P2 + 1 个 P3 发现
  • .gitignore — 无问题
  • .gitmodules — 无问题
  • .pre-commit-config.yaml — 1 个 P3 发现(Gitleaks 被禁用)
  • .vscode/launch.json — 无问题
  • .vscode/settings.json — 1 个 P3 发现(clangd 设置覆盖)
  • .vscode/tasks.json — 无问题
  • CMakeLists.txt — 无问题
  • build.py — 无问题(only_down_deps 逻辑正确)

整体风险判断:中低。 核心构建逻辑(build.py、CMakeLists.txt)的变更正确,无回归风险。主要问题集中在 post-create.sh 的错误处理健壮性(P2 的两个问题可能使容器初始化部分步骤静默失败),以及配置层面的不一致(设置覆盖、安全扫描缺失)。建议优先修复两个 P2 问题(对 source 加 || warn 守卫、修复 pip 管道吞错),再处理 P3 中的设置覆盖和 Gitleaks 恢复。

类型 数量
🔴 阻塞 0
🟡 建议 3

💬 仅评论

likedislike
不准确?
ascend-robotascend-robot成员
7月28日 添加了label:stat/needs-squash
ascend-robotascend-robot成员
7月28日 添加了label:ascend-cla/no
ascend-robot
ascend-robot成员
7月28日 评论:

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-Ascend/mstx ✅ 刘鹏程, 陈豪 (2/2) ✅ 刘鹏程 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

2404_88560538, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了103条消息 查看更多
ascend-robotascend-robot成员
8月5日 添加了label:lgtm
leo920320成员
8月6日 评论:

/approve

likedislike
ascend-robotascend-robot成员
8月6日 添加了label:approved
ascend-robotascend-robot成员
8月6日 合入了pull request
ascend-robot
ascend-robot成员
8月6日 评论:

Pull Request 已合并或已关闭。

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

likedislike