mirror of
https://github.com/rust-vmm/rust-vmm-ci.git
synced 2026-08-05 03:08:31 +00:00
docs: Document --workspace-selective mode
Add a README section spelling out the three goals: per-crate supported platforms, custom tests defined per crate, and a minimal set of workspace-scoped tests for cross-crate compatibility. Also describe how `--workspace-selective` uses Buildkite's native `if_changed` property to realize them. Signed-off-by: Ruoqing He <ruoqing.he@lingcage.com>
This commit is contained in:
committed by
Stefano Garzarella
parent
1a24a830be
commit
84550804a4
56
README.md
56
README.md
@@ -191,6 +191,62 @@ script that autogenerates the main pipeline can be used with the option
|
|||||||
./rust-vmm-ci/.buildkite/autogenerate_pipeline.py -t .buildkite/custom-tests.json | buildkite-agent pipeline upload
|
./rust-vmm-ci/.buildkite/autogenerate_pipeline.py -t .buildkite/custom-tests.json | buildkite-agent pipeline upload
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Workspace-Selective Pipeline
|
||||||
|
|
||||||
|
The `rust-vmm/rust-vmm` monorepo hosts several crates in a single Cargo
|
||||||
|
workspace and can run CI selectively, so that a change to one crate does not
|
||||||
|
retest the whole workspace. Passing `--workspace-selective True` enables this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./rust-vmm-ci/.buildkite/autogenerate_pipeline.py --workspace-selective True -t .buildkite/test_description.json | buildkite-agent pipeline upload
|
||||||
|
```
|
||||||
|
|
||||||
|
The mode is designed so that:
|
||||||
|
|
||||||
|
- each crate declares its own supported platforms via its `.platform` file;
|
||||||
|
- each crate can define tests specific to it via its own
|
||||||
|
`.buildkite/test_description.json`;
|
||||||
|
- a minimal set of tests still runs across all crates on every change, to catch
|
||||||
|
cross-crate breakage without overwhelming CI, via tests tagged
|
||||||
|
`"scope": "workspace"`.
|
||||||
|
|
||||||
|
The generator emits one step per crate per shared test, tagged with Buildkite's
|
||||||
|
native [`if_changed`](https://buildkite.com/docs/pipelines/configure/dynamic-pipelines/if-changed)
|
||||||
|
property, so each step only runs when files in that crate (or in a workspace-
|
||||||
|
global path: the root `Cargo.toml`, `.buildkite`, or the `rust-vmm-ci`
|
||||||
|
submodule) change. Each crate uses its own `.platform` and
|
||||||
|
`coverage_config_ARCH.json`, and the coverage test runs from the crate's
|
||||||
|
directory with `--test-scope=crate`.
|
||||||
|
|
||||||
|
`--workspace-selective` ships no default test description: the per-crate
|
||||||
|
commands are the workspace's own configuration, like a
|
||||||
|
[custom pipeline](#custom-pipeline), and are passed with `-t`. They use the
|
||||||
|
`{crate}` and `{crate_path}` placeholders instead of `--workspace`, and tests
|
||||||
|
that aren't per-crate (such as a workspace-wide `cargo check` that catches
|
||||||
|
cross-crate breakage) are tagged `"scope": "workspace"` to run unconditionally:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"test_name": "build-gnu",
|
||||||
|
"command": "cargo build -p {crate} --release --all-targets",
|
||||||
|
"platform": ["x86_64", "aarch64"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"test_name": "cross-crate-check",
|
||||||
|
"scope": "workspace",
|
||||||
|
"command": "cargo check --workspace --all-targets",
|
||||||
|
"platform": ["x86_64"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
A crate may also carry its own `.buildkite/test_description.json`; its tests
|
||||||
|
extend that crate's steps with checks specific to it, gated on the crate's path
|
||||||
|
only (a change to a workspace-global path does not re-run them).
|
||||||
|
|
||||||
## Integration Tests
|
## Integration Tests
|
||||||
|
|
||||||
In addition to the one-liner tests defined in the
|
In addition to the one-liner tests defined in the
|
||||||
|
|||||||
Reference in New Issue
Block a user