组件测试方案 #217
ZCShou
started this conversation in
Code of Conduct
组件测试方案
#217
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
组件测试方案
AeceOS 生态的各个
no_std组件的测试流程基于 axci 仓库提供的统一测试脚本和 GitHub Actions 工作流。测试分为自动测试(CI)和本地测试两种方式,前者通过统一的集成测试环境实现全面测试,后者用于本地开发验证。概述
本仓库不仅提供可复用的 GitHub Actions 工作流,也提供了也提供了用于本地测试的统一测试脚本文件!其他组件仓库可以通过
workflow_call引用这些工作流,避免在每个组件中重复维护 CI 配置。同时,也可以直接下载本仓库的本地测试脚本,实现统一的验证。目录结构:
自动化测试(CI)
自动化测试测试是指的仓库代码中的 CI 相关脚本,CI 脚本可以使用我们在本地部署的完整的集成测试环境(https://github.com/orgs/arceos-hypervisor/discussions/373),从而实现全面的测试。
工作流列表:
check.ymltest.ymlverify-tag.ymldeploy.ymlrelease.ymlCheck - 代码质量检查
设计
check.yml工作流执行代码质量检查,确保代码符合规范并能正确编译。执行过程:
flowchart LR A[Checkout] --> B[Install Rust] B --> C[fmt --check] C --> D[build] D --> E[clippy] E --> F[doc]详细步骤:
cargo fmt --all -- --checkcargo build --target <target> [--all-features](可设置skip_build: true跳过)cargo clippy --target <target> [--all-features] -- -D warningscargo doc --no-deps --target <target> [--all-features]RUSTDOCFLAGS: -D rustdoc::broken_intra_doc_links -D missing-docs输入参数:
all_featurestargets["aarch64-unknown-none-softfloat"]rust_componentsrust-src, clippy, rustfmt, llvm-toolsskip_build使用
在组件仓库创建
.github/workflows/check.yml:带可选参数:
Deploy - 文档部署
设计
deploy.yml工作流将文档部署到 GitHub Pages。执行过程:
flowchart TB A[verify-tag job] --> B{should_proceed?} B -->|true| C[build job] B -->|false| X[跳过] C --> D[Checkout] D --> E[Install Rust] E --> F[cargo doc] F --> G[Upload artifact] G --> H[deploy job] H --> I[Deploy to Pages]详细步骤:
verify-tag.yml验证标签合法性cargo doc --no-deps --all-featuresRUSTDOCFLAGS: -D rustdoc::broken_intra_doc_links -D missing-docsindex.htmlactions/deploy-pages@v4部署输入参数:
verify_branchverify_version使用
在组件仓库创建
.github/workflows/deploy.yml,推荐在版本标签推送时触发:Release - 版本发布
设计
release.yml工作流创建 GitHub Release 并发布到 crates.io。执行过程:
flowchart TB A[verify-tag job] --> B{should_proceed?} B -->|true| C[release job] B -->|false| X[跳过] C --> D[Checkout] D --> E[Generate changelog] E --> F[Create GitHub Release] F --> G[publish job] G --> H[Checkout] H --> I[cargo publish --dry-run] I --> J[cargo publish]详细步骤:
verify-tag.yml验证标签合法性git log --pretty=format:"- %s (%h)" "${PREV_TAG}..${CURRENT_TAG}"softprops/action-gh-release@v2prerelease: falseprerelease: truecargo publish --dry-runcargo publish --token $CARGO_REGISTRY_TOKEN输入参数:
verify_branchverify_versionSecrets:
CARGO_REGISTRY_TOKEN使用
在组件仓库创建
.github/workflows/release.yml,推荐在版本标签推送时触发:版本发布流程:
稳定版本:
预发布版本:
Test - 集成测试
设计
test.yml工作流运行集成测试,通过 patch 方式将组件集成到测试目标中构建验证。测试同时支持 QEMU 模拟器 和 物理开发板 两中测试环境,两种环境的执行流程完全一致。执行过程:
flowchart TB A[prepare job] --> B[Set matrix] B --> C[test job - matrix] C --> D[Filter targets] D --> E{should_run?} E -->|true| F[Checkout component] E -->|false| X[跳过] F --> G[Checkout test target] G --> H[Get crate name] H --> I[Apply patch] I --> J[Setup Rust] J --> K[Build]详细步骤:
test_targets输入过滤component/test-target/[patch.crates-io]覆盖依赖输入参数:
crate_nametest_targetsskip_build默认测试目标:
axvisor- https://github.com/arceos-hypervisor/axvisorstarry- https://github.com/Starry-OS/StarryOS测试矩阵(axvisor):
使用
在组件仓库创建
.github/workflows/test.yml:带可选参数:
本地测试
本仓库提供了两个本地测试脚本,用于在开发阶段提交代码前进行快速验证。
check.sh - 本地代码检查
check.sh脚本用于在本地执行与 CIcheck.yml工作流相同的代码质量检查,包括:用法:
参数:
crate- 组件名称(如 axvcpu、axaddrspace 等)或alltarget- 目标架构(可选,默认aarch64-unknown-none-softfloat)支持的目标架构:
aarch64-unknown-none-softfloat(默认)x86_64-unknown-noneriscv64gc-unknown-none-elf示例:
tests.sh - 本地集成测试
tests.sh脚本用于在本地执行与 CItest.yml工作流类似的集成测试,通过 patch 方式将组件集成到测试目标(axvisor、starry)中进行验证。同样提供了 QEMU 中测试以及链接本地开发板进行测试两种测试环境支持!用法:
选项:
-c, --component-dir DIR- 组件目录(默认:当前目录)-f, --config FILE- 配置文件路径(可选)-t, --target TARGET- 测试目标(默认:all)-o, --output DIR- 输出目录(默认:COMPONENT_DIR/test-results)-v, --verbose- 详细输出--no-cleanup- 不清理临时文件--dry-run- 仅显示将要执行的命令--sequential- 顺序执行测试(不并行)-h, --help- 显示帮助信息测试目标:
all- 运行所有测试axvisor-qemu- 运行所有 axvisor QEMU 测试axvisor-board- 运行所有 axvisor Board 测试starry- 运行所有 starry 测试axvisor-qemu-aarch64-arceos)示例:
镜像下载:
/tmp/.axvisor-images附录:verify-tag.yml
verify-tag.yml是内部工作流,被deploy.yml和release.yml调用,用于验证版本标签的合法性。执行过程:
flowchart TB A[开始] --> B{verify_branch OR verify_version?} B -->|false| C[跳过验证] C --> D[should_proceed=true] B -->|true| E[Checkout] E --> F[Check tag type] F --> G{tag format?} G -->|v*.*.*-pre.*| H[is_prerelease=true] H --> I{on dev branch?} I -->|yes| J[should_proceed=true] I -->|no| K[should_proceed=false] G -->|v*.*.*| L[is_prerelease=false] L --> M{on main/master?} M -->|yes| N[should_proceed=true] M -->|no| O[should_proceed=false] G -->|unknown| P[should_proceed=false] J --> Q{verify_version?} N --> Q Q -->|true| R[Verify version] R --> S{tag version == Cargo.toml version?} S -->|yes| T[通过] S -->|no| U[失败] Q -->|false| T详细步骤:
verify_branch=false且verify_version=false,直接通过v*.*.*-pre.*必须在dev分支v*.*.*必须在main或master分支verify_version=true)Cargo.toml中的version字段输入参数:
verify_branchverify_version输出:
should_proceedis_prereleaseLicense
Apache-2.0
Beta Was this translation helpful? Give feedback.
All reactions