Commit 001c640
committed
feat(xtask,ci): add
Adds a feature-matrix CI gate per #1123 (CI: feature matrix including
`arbitrary`). The case enumeration lives in xtask so the matrix is
self-documenting and locally reproducible.
`cargo xtask check features` is the new subcommand. Three modes:
cargo xtask check features
Run every case sequentially. Mirrors what CI does in aggregate.
cargo xtask check features --case <NAME>
Run a single case. CI matrix workers use this; the case name
doubles as the local repro command for any failure.
cargo xtask check features --list [--format <FMT>]
Enumerate cases. `--format github-matrix` emits a JSON include
array for `strategy.matrix.include: ${{ fromJson(...) }}`.
Two new CI jobs in `.github/workflows/ci.yml`:
feature-matrix-setup
Preflight job. Runs `cargo xtask check features --list --format
github-matrix` and emits the JSON via `$GITHUB_OUTPUT`.
feature-matrix [${{ matrix.case }}]
Fan-out job. Consumes the preflight output via fromJson and runs
`cargo xtask check features --case '${{ matrix.case }}'` per case.
Both join the existing `success` job's `needs` list so branch protection
keeps a single required status check. Each worker writes a one-line
markdown entry to `$GITHUB_STEP_SUMMARY` so failures show in the run
summary view without expanding logs.
Initial case set (10):
- per-crate curated invariants (ironrdp-core std/alloc, ironrdp-pdu
std/arbitrary/arbitrary-alloc)
- workspace powersets partitioned by layer: foundation, pdu, channels,
connector-session, runtime
cargo-hack pinned at 0.6.44 in xtask/src/bin_version.rs, installed via
the existing `cargo xtask check install` flow.
ironrdp-tls / ironrdp-client / ironrdp-mstsgu intentionally outside the
initial case set. cargo-hack does not honor package.metadata.cargo-hack,
so the exactly-one-of TLS-backend constraint needs `--mutually-exclusive
-features`, `--at-least-one-of`, and `--exclude-no-default-features` on
the invocation. The powerset also surfaces a latent bug in
`extract_tls_server_public_key` that uses `x509_cert::*` unconditionally
instead of gating on `rustls | native-tls`. Both are tractable but out
of scope for this gate's initial landing; the regular Checks job
already exercises all three crates with their default features.
Closes #1123 items 1-3 of the remediation set posted in
issuecomment-4464512384. Items 4-5 (the `ironrdp-web` exclusion and the
cargo-hack version pin) are folded into the per-case `extra_args` and
`bin_version.rs` respectively. The TLS coverage gap is the remaining
item from the original five.
Signed-off-by: Greg Lamberson <greg@lamco.io>
Assisted-by: Claude Code (Anthropic, Opus)check features matrix gate with dynamic CI fan-out1 parent 18a430a commit 001c640
6 files changed
Lines changed: 374 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
204 | 255 | | |
205 | 256 | | |
206 | 257 | | |
207 | | - | |
| 258 | + | |
208 | 259 | | |
209 | 260 | | |
210 | 261 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
| 48 | + | |
49 | 49 | | |
50 | 50 | | |
| 51 | + | |
51 | 52 | | |
52 | 53 | | |
53 | 54 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
18 | 23 | | |
19 | 24 | | |
20 | 25 | | |
| |||
62 | 67 | | |
63 | 68 | | |
64 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
65 | 75 | | |
66 | 76 | | |
67 | 77 | | |
| |||
116 | 126 | | |
117 | 127 | | |
118 | 128 | | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
119 | 134 | | |
120 | 135 | | |
121 | 136 | | |
| |||
0 commit comments