Skip to content

feat(axbuild): add standalone axloader command#1312

Merged
ZR233 merged 1 commit into
rcore-os:devfrom
ZR233:codex/axloader-loader-command
Jun 21, 2026
Merged

feat(axbuild): add standalone axloader command#1312
ZR233 merged 1 commit into
rcore-os:devfrom
ZR233:codex/axloader-loader-command

Conversation

@ZR233

@ZR233 ZR233 commented Jun 18, 2026

Copy link
Copy Markdown
Member

问题

axloader 的构建和 HTTP smoke 测试入口目前挂在 cargo axvisor loader ... 下,和 ArceOS、StarryOS、Axvisor 这些顶层命令不并列。CI 中的 axloader smoke 也继续依赖 Axvisor 子命令,容易让 loader 自身的职责边界和 Axvisor 本体测试混在一起。

修改

  • 新增 cargo axloader alias,并在 tg-xtask 顶层增加 axloader 子命令。
  • 将原 axvisor loader 实现迁到独立的 axloader 模块,提供:
    • cargo axloader build
    • cargo axloader test qemu
  • 移除 cargo axvisor loader ... 旧入口,不保留 deprecated alias。
  • 将 axloader HTTP smoke 的固件变量切换为 AXLOADER_X86_64_UEFI_FIRMWARE,同时保留读取旧 AXVISOR_X86_64_UEFI_FIRMWARE 的 fallback,避免本地已有环境立即失效。
  • 更新 CI 中的 axloader HTTP smoke 命令,并补充 bootloader/axloader/** 到 CI path filter。
  • 更新 bootloader/axloader README 中的命令示例。

方案逻辑

这次只拆分 axloader UEFI loader 自身的构建与 smoke 测试入口,不迁移现有 Axvisor QEMU/board 测试套件。因此 cargo xtask axvisor test qemu ...、UEFI NimbOS、VMX/SVM、board tests 等 Axvisor 本体 CI 保持不变;只有 loader HTTP smoke 切换到新的 cargo axloader test qemu

本地验证

  • cargo fmt
  • cargo test -p axbuild axloader
  • cargo xtask clippy --package axbuild
  • rustup target add x86_64-unknown-uefi
  • cargo axloader build --target x86_64-unknown-uefi
  • AXLOADER_X86_64_UEFI_FIRMWARE=/usr/share/OVMF/OVMF_CODE_4M.fd cargo axloader test qemu --target x86_64-unknown-uefi

@mai-team-app mai-team-app Bot mentioned this pull request Jun 18, 2026

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结论:APPROVE

变更概述

本 PR 将 axloader 的构建与 HTTP smoke 测试入口从 cargo axvisor loader ... 拆分为独立的顶层命令 cargo axloader,提供 buildtest qemu 两个子命令。这是合理的职责边界拆分,使 axloader 与 ArceOS、StarryOS、Axvisor 并列。

实现逻辑

  • scripts/axbuild/src/axvisor/loader.rs 迁移为 scripts/axbuild/src/axloader/mod.rs,新增 Axloader 结构体和顶层 Command 枚举。
  • lib.rs 注册新的 Axloader 子命令,移除 axvisor 下的 loader 入口。
  • ArgsTest 改为子命令模式 test qemu,HTTP smoke 不再是可选 flag,而是 qemu 子命令的默认行为。新增测试验证旧 --http-smoke flag 被正确拒绝。
  • 固件环境变量切换为 AXLOADER_X86_64_UEFI_FIRMWARE,保留读取旧 AXVISOR_X86_64_UEFI_FIRMWARE 的 fallback,向后兼容。
  • CI path filter 补充 bootloader/axloader/**,smoke 命令和环境变量同步更新。

验证结果

  • cargo fmt --check ✅ 通过
  • cargo clippy --manifest-path scripts/axbuild/Cargo.toml --all-features -- -D warnings ✅ 通过
  • cargo test --manifest-path scripts/axbuild/Cargo.toml --all-features:655 passed, 1 failed。失败用例 build::tests::checked_in_build_configs_do_not_declare_default_dynamic_builds 是 base 分支已有问题(已在 origin/dev 上复现),与本 PR 无关。

CI 状态

CI check runs 全部显示 skipped,这是因为 PR 来自 fork(ZR233/tgoskits),self-hosted runner 检查存在 limit_to_owner: rcore-os 限制。这是仓库 CI 配置的预期行为,非 PR 引入的问题。

重复/重叠分析

已检查当前所有 open PR,未发现与 axloader 命令拆分相关的重叠或冲突 PR。base 分支上 scripts/axbuild/src/axvisor/loader.rs 的唯一相关历史是 PR #1148(引入 HTTP bootloader),本 PR 在此基础上进行了干净的模块拆分。

无阻塞问题

代码结构清晰,测试覆盖 CLI 解析和旧 flag 拒绝场景,固件 fallback 策略合理,CI 更新同步。未发现正确性、安全、重复或遗漏测试问题。

Powered by mimo-v2.5-pro

@mai-team-app
mai-team-app Bot requested a review from ZCShou June 18, 2026 10:38

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结论:APPROVE

变更概述

本 PR 将 axloader 的构建与 HTTP smoke 测试入口从 cargo axvisor loader ... 拆分为独立的顶层命令 cargo axloader,提供 buildtest qemu 两个子命令。这是合理的职责边界拆分,使 axloader 与 ArceOS、StarryOS、Axvisor 并列。

实现逻辑

  • scripts/axbuild/src/axvisor/loader.rs 重命名为 scripts/axbuild/src/axloader/mod.rs,新增 Axloader 结构体和顶层 Command 枚举,职责清晰。
  • lib.rs 注册新的 Axloader 子命令,移除 axvisor 下的 loader 入口。
  • ArgsTest 改为子命令模式 test qemu,HTTP smoke 不再是可选 flag,而是 qemu 子命令的默认行为。新增测试验证旧 --http-smoke flag 被正确拒绝。
  • 固件环境变量切换为 AXLOADER_X86_64_UEFI_FIRMWARE,保留读取旧 AXVISOR_X86_64_UEFI_FIRMWARE 的 fallback(通过 LEGACY_X86_64_UEFI_FIRMWARE_ENV 常量),向后兼容。
  • CI path filter 补充 bootloader/axloader/**,smoke 命令和环境变量同步更新。
  • Command 重命名为 StdCommand 以避免与 clap::SubcommandCommand 枚举冲突,命名合理。

验证结果

  • cargo fmt --check ✅ 通过
  • cargo clippy --manifest-path scripts/axbuild/Cargo.toml --all-features -- -D warnings ✅ 通过(无 warning)
  • cargo test --manifest-path scripts/axbuild/Cargo.toml --all-features:655 passed, 1 failed。失败用例 build::tests::checked_in_build_configs_do_not_declare_default_dynamic_builds 已在 origin/dev 上复现确认,与本 PR 无关。
  • 4 个新增 axloader 测试全部通过:command_parses_build_default_targetcommand_parses_build_debugcommand_parses_test_qemucommand_rejects_legacy_http_smoke_flag

CI 状态

CI check runs 全部显示 skipped,这是因为 PR 来自 fork(ZR233/tgoskits),CI 中存在 limit_to_owner: rcore-os 限制。这是仓库 CI 配置的预期行为,非 PR 引入的问题。

重复/重叠分析

已检查当前所有 open PR(#1313#1317 等),未发现与 axloader 命令拆分相关的重叠或冲突 PR。base 分支上 scripts/axbuild/src/axvisor/loader.rs 的历史来源是 axloader 模块最初作为 axvisor 子功能引入,本 PR 在此基础上进行了干净的模块拆分,与 base 无冲突。

上次 review 意见

已查看 mai-team-app[bot] 的 APPROVE review,同意其分析结论。无新增发现。

无阻塞问题

代码结构清晰,测试覆盖 CLI 解析和旧 flag 拒绝场景,固件 fallback 策略合理,CI 更新同步,无 [patch.crates-io] 引入,无正确性、安全或重复问题。

Powered by mimo-v2.5-pro

@ZR233
ZR233 merged commit 223ea8d into rcore-os:dev Jun 21, 2026
102 of 104 checks passed
This was referenced Jun 22, 2026
Antareske pushed a commit to Antareske/tgoskits that referenced this pull request Jun 27, 2026
Antareske pushed a commit to Antareske/tgoskits that referenced this pull request Jun 27, 2026
@ZR233
ZR233 deleted the codex/axloader-loader-command branch June 29, 2026 04:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant