CI 自动测试实现
本文说明 .github/workflows/ci.yml 的具体实现,以及仓库如何将格式检查、主机端测试、QEMU 测试、self-hosted 板测和容器镜像发布组织成一条统一的 GitHub Actions 流水线。
1. 入口与依赖
当前 CI 主入口文件为:
.github/workflows/ci.yml
它依赖的两个复用工作流为:
.github/workflows/reusable-command.yml.github/workflows/container-publish.yml
整体关系如下:
2. 触发与并发
ci.yml 在以下事件触发:
pushpull_request
但同时配置了 paths-ignore,因此当改动只涉及以下内容时,整个 CI 不会触发:
*.md*.rst*.adocdocs/****/docs/****/doc/**
由此可见:
- 纯文档改动默认不会触发这条主 CI
- 当前
docs/docs/design/test的改动本身,不会直接触发ci.yml
同时,CI 配置了并发控制:
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
其效果是:同一分支上如果连续推送,会取消旧的同类运行,只保留最新一轮。
3. 变更检测
detect_changes 是整条 CI 的分流入口。它通过 dorny/paths-filter@v4 输出三个布尔结果:
ci_checksbase_container_publishaxvisor_lvz_container_publish
3.1 ci_checks
当以下路径发生变化时,认为需要运行主要测试检查:
.cargo/**.github/workflows/ci.yml.github/workflows/reusable-command.ymlCargo.tomlCargo.lockrust-toolchain.tomlcomponents/**examples/**os/**platform/**scripts/**test-suit/**xtask/**