已开启
fix: make fbb CLI build flow self-contained #7
fix: make fbb CLI build flow self-contained #7
已开启
wangjing88创建于 6月27日
wangjing88成员
6月27日

fix: 修复 create-project 模板路径和内置模板回退

问题现象:

  • 在任意新目录直接执行 fbb create-project myapp,如果未设置 FBB_SDK_DIR 且当前目录不在 SDK 内,会因为没有 SDK 上下文而失败。
  • 设置 FBB_SDK_DIR=D:\Projects\hs-fbb_inner\src 后,HiDiTing SDK 的模板实际位于 tools/bin/fbb_tool/templates,但 fbb-cli 只查找 tools/templates,导致 sample_project 查找失败。
  • fbb describe --json 同样固定读取 tools/templates,诊断结果无法反映 SDK 中实际可用模板。
  • 原有测试 test_create_out_of_tree_no_sdk 仍断言无 SDK 时应失败,已与新的文档使用目标不一致。

复现步骤:

  1. 新建空目录并进入该目录。
  2. 不设置 FBB_SDK_DIR,执行 fbb create-project myapp。
  3. 设置 FBB_SDK_DIR=D:\Projects\hs-fbb_inner\src,再次执行 fbb create-project myapp。
  4. 执行 fbb describe --json,检查 sdk.templates。

修复思路:

  • 将 SDK 模板目录解析集中到 sdk_meta.templates_dir(),统一兼容 chip JSON templates.dir、规范路径 tools/templates、历史路径 tools/bin/fbb_tool/templates。
  • create.py 和 describe.py 复用统一模板目录解析,避免创建流程与诊断输出不一致。
  • create-project 在没有 SDK 上下文且没有可唯一选择的已安装 SDK 时,回退使用 fbb-cli 包内置的 sample_project 模板。
  • create-component 仍要求 SDK 上下文,避免组件模板与目标 SDK 脱节。
  • 更新已有回归测试,使测试断言与文档化使用方式一致,并覆盖 legacy 模板路径和 describe 模板枚举。

改动规模说明:

  • 本提交共 14 个文件,362 insertions(+), 29 deletions(-)。
  • 其中新增包内 fallback sample_project 模板 9 个文件,约 241 行,是 diff 看起来较大的主要原因;该模板用于支撑“无 SDK 上下文也能执行 fbb create-project myapp”。
  • 逻辑代码修改集中在 4 个文件: cli.py、create.py、describe.py、sdk_meta.py。
  • 测试修改集中在已有文件 tests/test_create.py,不是新增测试脚本目录。
  • 未包含 build.py、toolchain 推断、uv.lock、pyproject.toml 等无关变更。

实际修改文件:

  • src/hs_fbb_cli/cli.py: 放宽 create-project 的 SDK 前置要求,允许无 SDK 时进入包内模板回退流程;create-component 继续要求 SDK 上下文。
  • src/hs_fbb_cli/create.py: 支持可选 SDK 根目录,按 SDK 模板、SDK 示例、包内模板顺序查找;无 SDK 创建时不写入 chip/sdk 绑定。
  • src/hs_fbb_cli/describe.py: 模板枚举改为复用 sdk_meta.templates_dir()。
  • src/hs_fbb_cli/sdk_meta.py: 新增 templates_dir(),集中处理模板路径优先级和 legacy 路径兼容。
  • src/hs_fbb_cli/data/templates/sample_project/: 新增包内 fallback 工程模板,包含顶层 CMake、fbb-project.toml、README 和 main 示例代码。
  • tests/test_create.py: 更新无 SDK create-project 预期,补充 legacy SDK 模板路径和 describe 模板枚举回归用例。

分支清理:

  • 本次重做为单提交,只保留模板查找、无 SDK create-project 修复及对应回归测试。
  • 原两次提交内容已保留在本地备份分支 codex/fbb-cli-regression-tests-before-slim。

验证:

  • python -m py_compile src\hs_fbb_cli\cli.py src\hs_fbb_cli\create.py src\hs_fbb_cli\describe.py src\hs_fbb_cli\sdk_meta.py
  • 源码入口验证: 未设置 FBB_SDK_DIR 且空 FBB_SDK_ROOT 时,create-project myapp 可创建包内模板工程。
  • 源码入口验证: 设置 FBB_SDK_DIR=D:\Projects\hs-fbb_inner\src 时,create-project myapp 可识别 legacy 模板并创建工程。
  • 源码入口验证: describe --json 可列出 sample_component 和 sample_project。
  • uv build --wheel 成功,wheel 中包含包内 sample_project 模板文件。
  • ..venv\Scripts\python.exe -m pytest tests\test_create.py,结果 9 passed。
  • ..venv\Scripts\python.exe -m pytest,结果 198 passed。
likedislike
CLA协议签署
当前Pull Request的提交暂无外部代码贡献者
合并受阻
Wwangjing88成员
6月29日 推送  1 个提交:c434d33c-fix: allow project scaffolding without SDK context
Wwangjing88成员
6月29日 强制推送  1 个提交:43a9ad3c-fix: 修复 create-project 模板查找和无 SDK 上下文创建失败
Wwangjing88成员
6月29日 强制推送  1 个提交:7aa7b7ac-fix: 收窄 create-project 模板查找修复
Wwangjing88成员
6月29日 修改了pull request 的描述
Wwangjing88成员
6月29日 强制推送  1 个提交:5c3b75fe-fix: 收窄 create-project 模板查找修复
Wwangjing88成员
6月29日 修改了pull request 的描述
Wwangjing88成员
6月29日 强制推送  1 个提交:987c9cfe-fix: 收窄 create-project 模板查找修复
Wwangjing88成员
6月29日 强制推送  1 个提交:0496d66f-fix: 修复 create-project 模板路径和内置模板回退
Wwangjing88成员
6月29日 修改了pull request 的描述