Merge blocked
欢迎来到 openUBMC 社区
Hey @PLUS_ONE , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。
联系指引
有疑问可以联系 SIG: sig-interface ,
维护者是: @DataSculptor, @WeliveWelove, @aaronlee, @huanghan ,
优秀贡献者是: @WeliveWelove, @aaronlee .


关联 Issue 通知
@PLUS_ONE , 提交的PR需要关联issue,指导链接:https://forum.openubmc.cn/t/topic/208
如果已经关联了issue, 但是needs-issue标签仍然存在,你可以在评论 /check-issue 来移除它。


CI已开始运行,查看流水线详情:流水线链接


/ai review


代码审查
审查结论
逐文件确认
- CMakeLists.txt:已审查(新增
option(CONAN_DEFS_FEATURE_BASIC)+ 早退),发现 1 处问题(P3)。 - conanfile.py:已审查(4 个生命周期钩子按
feature_basic裁剪),发现 1 处问题(P2)。 - mds/model.json:已审查(5 个模型新增
features: ["basic"]),发现 1 处问题(P3)。 - mds/service.json:已审查(新增
options.feature_basic,键名options/description/option/default拼写均正确,JSON 结构合法),发现 1 处问题(P3)。
发现列表
| 优先级 | 文件:行 | 问题 |
|---|---|---|
| P2 | conanfile.py:7-21 | 只裁剪了 requirements/generate/build/package,未覆盖 build_requirements(),service.json 中的 build/test 依赖(opentelemetry、libmc4lua、mdb_interface、persistence、lcurl)在裁剪态仍会被解析/构建 |
| P3 | CMakeLists.txt:5-8 | 裁剪判断位于 include(conanbuildinfo.cmake)(第17-19行)之前,若变量由 conan 生成物提供则永不生效,仍会执行 pkg_search_module(... REQUIRED) 强依赖查找 |
| P3 | mds/model.json:4(及55/116/140/164) | 新增的 features 键未在 mds/schema.json 中声明(该 schema 会被安装发布),codegen 是否识别该键无法自证,存在校验失败或键被静默忽略两种风险 |
| P3 | mds/service.json:13-17 | feature_basic=true 时构建层"剔除"组件,而模型层 features: ["basic"] 若语义为"basic 集保留",则两层裁剪方向相反,会出现模型/路由存在但实现缺失 |
整体风险判断
变更面很小(34 行、4 个配置文件),没有发现 P0/P1 级缺陷:CMake 的 return() 位于 project() 之后,目录作用域早退是合法用法;conanfile 的各钩子调用链在 feature_basic=false(默认)时行为完全不变,无回归。主要风险集中在裁剪覆盖不完整与两处新增的 feature 语义是否与框架约定一致:建议合入前重点确认 build_requirements 钩子、CONAN_DEFS_FEATURE_BASIC 的传值方式,以及 mds features 的约定含义,其余为一致性/可维护性层面的待确认项。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 3 |
💬 仅评论
🔍 另有 1 处,仅供参考(不影响合并)
下面这些地方 AI 觉得有点可疑,但把握不大,所以没有当成正式问题,也没有在代码行上留评论。列在这里只是多给你一个视角:觉得有道理可以顺手看看,觉得是误报直接忽略就行。
mds/service.json:13— question: features 标记与 feature_basic 选项的裁剪方向需保持一致


🔵 Low Priority
变更行:mds/model.json:4/55/116/140/164 新增 "features": ["basic"],但同目录的 mds/schema.json(描述 model.json 的格式,且被 CMakeLists.txt:41 install(FILES mds/schema.json ...) 随组件发布到设备)本次未同步。对 mds 目录做全文检索,schema.json 中不存在任何 "feature" 字样的声明。
失败模式:若 codegen/校验工具按 schema 做严格校验(additionalProperties=false 一类),新增的 features 键会导致 model 校验失败、codegen 直接报错;若 schema 不严格或 codegen 不识别该键,则该键被静默忽略,模型侧裁剪完全不生效——"裁剪可观测组件"只落实到 conan/CMake 一层,路由与 ORM 中的接口仍会生成,造成部署态与模型态不一致。两种结果都不能从 diff 内部自证。
修复方向:确认 mds 代码生成对 features 的支持情况;若支持,请在 mds/schema.json 中补充 features 字段声明,保持 schema 与 model.json 一致;若不支持,则这些新增行无效,应改用框架实际支持的裁剪方式。
建议:核对 mds codegen 是否识别 model 的 features 键;若识别,同步在 mds/schema.json 中声明 features 字段(类型为 string 数组),避免 schema 与 model.json 漂移。


🔵 Low Priority
变更行:CMakeLists.txt:5-8 在 project() 之后立刻 if (CONAN_DEFS_FEATURE_BASIC) return(),而本文件中所有 conan 侧变量是通过 CMakeLists.txt:17-19 的 include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + conan_basic_setup() 才被引入的(该 include 排在早退之后)。
失败模式(触发条件):只有当 CONAN_DEFS_FEATURE_BASIC 由 conan 的 cmake 生成物(conanbuildinfo.cmake)提供、而非由构建系统以 -DCONAN_DEFS_FEATURE_BASIC=... 缓存变量传入时,第 6 行的判断读到的是 option() 的默认值 OFF,早退永不触发;此时 feature_basic 已让 conanfile.py 跳过 build/package,但如果存在其它直接走 cmake(如源码/IDE/单独 configure 安装)的构建路径,就会继续执行 CMakeLists.txt:10-12 的 find_package(PkgConfig REQUIRED) / pkg_search_module(GLIB REQUIRED glib-2.0) 等强依赖查找,在基础功能集环境里以 “could not find GLIB” 之类的 configure 失败告终,即"裁剪"路径反而构建失败。
修复方向:二选一——(a) 把裁剪判断移到 conanbuildinfo.cmake 引入之后,并用 if(NOT CONAN_DEFS_FEATURE_BASIC) ... endif() 包裹后续全部内容;(b) 若确认变量是由构建系统以 -D 传入的,请在注释中写明该约定,避免后续误认为它可以来自 conanbuildinfo。
建议:确认 CONAN_DEFS_FEATURE_BASIC 的实际传递方式(-D 缓存变量 or conanbuildinfo);若来自 conanbuildinfo,应把该判断移动到第 17-19 行的 conan 引入之后,并用 if(NOT ...) 包裹后续内容而不是提前 return。


🟡 Medium Priority
变更行:conanfile.py:7-21 只对 requirements/generate/build/package 四个钩子加了 not self.options.get_safe("feature_basic", False) 判断,未覆盖 build_requirements()。
契约与证据链:本 recipe 自身不声明任何 conan 依赖(全文只有 from conanbase import ConanBase 与 package_info: pass),全部依赖来自 ConanBase;而 mds/service.json:19-38 的 dependencies 同时包含 build 类(libmc4lua、mdb_interface、opentelemetry/1.13.0.026)与 test 类(persistence、lcurl)。在 required_conan_version = ">=1.60.0"(conanfile.py:3)的 Conan 1.x 语义下,构建期/测试期依赖必须由 build_requirements() 中的 self.build_requires(...) 注入,因此 build_requirements() 是与 requirements() 并列的另一条依赖入口,本次没有加裁剪。
失败模式:feature_basic=true 时 requirements() 被跳过,但 build_requirements() 仍会执行,opentelemetry/1.13.0、libmc4lua 等仍会被解析、下载,甚至从源码构建;在基础功能集环境中如果缺少这些 recipe/预编译二进制,裁剪构建仍会失败,或者至少达不到“缩短构建、减少依赖”的目的,与 PR 目标不一致。
修复方向:对 build_requirements() 施加同一判断(若 ConanBase 还有其它依赖注入入口,如 config_options/configure,一并核对),并把判断收敛到一个属性里避免四处重复。
建议:新增 def build_requirements(self): if not self.options.get_safe("feature_basic", False): super().build_requirements(),与 requirements/build/package 保持一致;同时确认 ConanBase 读取的 mds/service.json dependencies 在裁剪态下不会通过其它钩子(config_options/configure)再次注入依赖。


| 任务名称 | 结果 |
|---|---|
| pre-commit检查 | ✅ SUCCESS |
| PR描述检查 | ❌ FAILED |
| 防投毒检查 | ✅ SUCCESS |
| 开源合规检查 | ✅ SUCCESS |
| 编译构建 | ✅ SUCCESS |
| UT测试 | ✅ SUCCESS |
| IT测试 | ✅ SUCCESS |
| 代码覆盖率 | ✅ SUCCESS |
| 依赖校验 | ✅ SUCCESS |
| ipmi修改 | ✅ SUCCESS |
| 修改行数检查 | ✅ SUCCESS |


| 任务名称 | 结果 |
|---|---|
| pre-commit检查 | ✅ SUCCESS |
| PR描述检查 | ✅ SUCCESS |
| 防投毒检查 | ✅ SUCCESS |
| 开源合规检查 | ✅ SUCCESS |
| 编译构建 | ✅ SUCCESS |
| UT测试 | ✅ SUCCESS |
| IT测试 | ✅ SUCCESS |
| 代码覆盖率 | ✅ SUCCESS |
| 依赖校验 | ✅ SUCCESS |
| ipmi修改 | ✅ SUCCESS |
| 修改行数检查 | ✅ SUCCESS |


当前PR是否有AI参与:
[x] 否
[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :
PR功能描述 / 为什么需要这个合入:
支持可观测特性灵活裁剪
修改方案:
支持可观测特性灵活裁剪
验证方案:
支持可观测特性灵活裁剪
测试建议:
支持可观测特性灵活裁剪
自验证报告:
支持可观测特性灵活裁剪
该PR关联的issue
(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #https://gitcode.com/openUBMC/rackmount/issues/1158
希望检视人员了解:
支持可观测特性灵活裁剪