选定提供者装配门禁¶
维护中的门禁通过既有 CMake 工程链接显式编写的软件夹具。TOML 与唯一配置解析器选择精确料号、Board 包、后端、路由、模式及预算。门禁不改写后端、不建立提供者注册表、不选择源码目标,也不推断物理 Board 接线。
python scripts/ci/provider_assemblies.py \
--fixture tests/contracts/usb_assembly/stm32-zg.toml \
--family stm32f407 \
--compiler arm-none-eabi-gcc \
--output build/provider-assemblies/usb-stm32
对经审查的 TOML 列表重复传入 --fixture。未指定 --project 时,每份 TOML 仍须位于 tests/contracts,并具有维护中的同目录 CMakeLists.txt。显式 --project 将整次调用绑定到当前 checkout 的 tests/contracts 下一个既有 CMake 工程;TOML 可以是该仓库的合同夹具,或直接位于 tools/configure/assemblies 的规范 schema-2 装配。每个选择都必须解析为 MCU 配置。门禁不根据系列自动发现工程,也不静默切换模式。
对于三个公开的 H743 SPI4 DMA 装配,在仓库根目录执行既有 H743 工程,并确保维护中的 ARM 编译器位于 PATH:
python scripts/ci/provider_assemblies.py \
--project tests/contracts/h743_assembly \
--fixture tools/configure/assemblies/h743-spi-dma.toml \
--fixture tools/configure/assemblies/h743-spi-dma-uart-tx.toml \
--fixture tools/configure/assemblies/h743-spi-dma-uart-rx.toml \
--family stm32h743 \
--compiler arm-none-eabi-gcc \
--output build/provider-assemblies/h743-spi-dma
输出路径必须全新;每个选定固件构建、资源报告和保留的 provider 方法均须通过。命令链接 ARM 软件并保存报告及原始输出,不执行 MCU。完整 H743 provider 阶段通过同一工程选择既有 26 份合同装配和这三份规范装配。仅运行三份夹具不等于完成全部 29 份夹具的阶段。
可选的系列断言对照实际解析结果。不同后端必须具有分别维护的 TOML;不存在独立 OS 覆盖项。CMake 使用 NEXUS_SOURCE_ROOT 和 NEXUS_ASSEMBLY_FILE 构建所选工程的默认目标图。Native 选择、仓库外工程、符号链接工程、重复夹具和重复指定工程均被拒绝。选定源码根目录必须拥有实际执行的门禁及其导入工具;其他 checkout 的工具被拒绝。
输出目录必须不存在。既有证据、符号链接目标和源码目录均拒绝。每条真实命令记录 argv、工作目录、时间戳、返回码和原始 stdout/stderr 字节。缺失工具、非零退出、超时或后台产物写入者使矩阵失败并保留失败报告。空矩阵或重复矩阵不能算成功工作。
每次真实构建后,门禁要求恰好一个固件 ELF 与一个完整生成包。它比较已构建的规范配置摘要与原始作者输入解析结果,复核全部声明输入,并使用既有 ELF 资源工具重新计算内存分配。原始链接后报告须与重算相符。Flash LOAD 字节、Flash 占用、各物理 RAM 域、MSP 和 heap 保持既有预算语义。
选定 I/O 的既有保留检查工具独立追踪实际接口面指针、具体方法表及 ELF LOAD 中每个非 NULL 方法。链接后报告须与重算相符。刻意为空的夹具则证明零作者控制器/器件、零生成接口声明,且真实 ELF 不含具体 I/O 提供者表与接口面。这是实际执行的空选择 GC 检查,不是跳过保留检查,也不声称所有无关运行时代码都不存在。
实际编译数据库和 Ninja 依赖日志将编译源码、生成头、选定厂商头及编译器提供的头绑定到文件身份。维护中的图/配置源码及选定的锁定 SDK 输入字节在执行前建立快照,并在执行后复核。显式工程、它的 CMake 输入和所选装配均属于该快照。工程源码或任何声明装配发生变化都会使证据失效。矩阵拒绝源码、Git 版本、工具或产物变化。dirty checkout 可以提供身份明确的开发证据,但仅此门禁不能赋予 clean 发布候选资格。
report.json 记录 selected_provider_assembly_matrix、真实夹具/命令数量、源码身份、工具身份、各夹具配置摘要、ELF/BIN/map/bundle/report 身份、RAM 域和保留方法。全部成功夹具均须通过,没有跳过即通过的结果。CI 持有显式夹具列表,并与报告一同上传原始命令及产物。
本门禁建立软件图、编译/链接、预算及所选提供者保留证据,不执行 MCU 启动、中断、DMA、USB 枚举、Ethernet 流量、timer 波形或电气控制。物理状态保持 not_executed,周期和延迟保持 not_measured。模型测试与后续 HIL 资格范围独立。
工具回归测试命令:
python -m unittest scripts.ci.test_provider_assemblies -v