build: adopt cargo-anvil check catalog (github backend)#534
build: adopt cargo-anvil check catalog (github backend)#534martin-kolinek wants to merge 25 commits into
Conversation
fa2ecb2 to
5f0bb84
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #534 +/- ##
=======================================
Coverage 100.0% 100.0%
=======================================
Files 356 355 -1
Lines 27300 27288 -12
=======================================
- Hits 27300 27288 -12
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
8ad049e to
347bc50
Compare
| azure_core = { workspace = true } | ||
| azure_identity = { workspace = true } | ||
| azure_storage_blob = { workspace = true } | ||
| fetch = { path = "../fetch", features = ["test-util", "tokio", "rustls"] } |
There was a problem hiding this comment.
Inocorrect move of a crate from internal to external. Also check other Cargo.toml files to make sure we're not over-sorting.
8ad30d2 to
bc60a81
Compare
Run `cargo anvil` (github backend) to adopt the unified-build check catalog: generate justfiles/anvil/ + .github/ (actions + workflows) trees, .anvil.lock, and the rustfmt/spellcheck/clippy/deny/.delta config hosts. Reconcile oxidizer-github's pre-existing hand-rolled lint setup: - Root Cargo.toml: replace the manual [workspace.lints.rust/clippy/rustdoc] tables with anvil's managed catalog region; preserve the repo's unique lint deltas (missing_docs, unreachable_pub, clippy.panic, clippy.empty_structs_with_brackets) as dotted-key continuations outside the sentinels. Take ownership of the region's unexpected_cfgs check-cfg to add cfg(utc_backend), which this workspace requires (documented anvil mechanism). - 38 crates: drop the manual `[lints] workspace=true` now provided by anvil's managed region (removes duplicate [lints] tables that broke TOML parsing). Validated: cargo metadata parses; `cargo anvil --dry-run` clean (the workspace-lints region is intentionally adopter-owned). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
oxidizer-github already had curated clippy.toml / rustfmt.toml / spellcheck.toml / deny.toml, which collided with anvil's injected regions: - clippy.toml: drop 6 manual keys now owned by anvil's region (exact dupes). - rustfmt.toml: drop the redundant standalone max_width (region provides it). - spellcheck.toml: drop the manual block; anvil's region is a superset (adds tokenization_splitchars). - deny.toml: merge. Investigation showed anvil's catalog config breaks two things here: it rejects CDLA-Permissive-2.0 (Mozilla CA data via webpki-root-certs, explicitly allowed by this repo) and its bans wildcards="deny" fails ~14 internal crates that use wildcard versions. Keep the repo's curated [licenses] (incl. BSL-1.0/CDLA-Permissive-2.0, confidence 0.8) and [advisories].ignore; add anvil's [sources] and advisory yanked/unmaintained; set [bans] wildcards="warn". Verified: cargo deny check passes (advisories/bans/licenses/sources all ok); fmt --check clean. workspace-lints and deny regions are intentionally adopter-owned. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Resolve the single clippy::let_and_return the anvil catalog surfaces; the repo already enforced the rest of the catalog lints. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…xt-types pin) Regenerate using the anvil-multiple-regions cargo-anvil build: - deny.toml now uses 4 granular managed regions (advisories/licenses/bans/ sources) instead of one. Keep `sources` anvil-managed; take ownership of advisories (repo RUSTSEC ignores), licenses (repo allowlist incl. BSL-1.0 / CDLA-Permissive-2.0, confidence 0.8), and bans (wildcards="warn"). - versions.just: external-types pin bumped to nightly-2026-03-20 / cargo-check-external-types 0.5.0 (MSRV 1.93 support). - tools.just / checks.just: pick up msrustup-safe component detection and impact/libclang fixes from the branch. - .gitattributes: anvil-managed region added. Verified: cargo deny check passes (advisories/bans/licenses/sources all ok). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
anvil-external-types checks every library crate, but automation and testing_aids (publish=false, in automation::INTERNAL_CRATES) had no [package.metadata.cargo_check_external_types] opt-in, so cargo-check-external-types denied their legitimate internal use of ohno/serde/opentelemetry/tracing. Opt both into the check permissively with allowed_external_types = ["*"], matching their internal, non-public-API status. anvil-external-types now passes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…age gate Regenerate from anvil-multiple-regions, which bumps rust_nightly nightly-2026-02-10 -> nightly-2026-05-30 (matching the repo's constants.env RUST_NIGHTLY). The bump alone does not fix anvil-llvm-cov: coverage_attribute is still unstable on rustc 1.98. The real cause is a latent gate inconsistency in the automation crate: #![cfg_attr(all(coverage_nightly, test), feature(coverage_attribute))] // test only #![cfg_attr(coverage_nightly, coverage(off))] // all builds Under --workspace coverage, automation's plain (non-test) lib is built with --cfg coverage_nightly, so coverage(off) applies without the feature gate -> E0658. The repo's own `-p automation` coverage only builds the test target, so it never hit this. Gate the feature on coverage_nightly alone, matching bytesbuf/ohno/multitude which also apply crate-level coverage(off). automation now compiles under coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Re-regenerate the anvil catalog against the latest anvil-multiple-regions, which detects loom tests authoritatively via a `[[test]]` target declaring `required-features = ["loom"]` (cargo metadata), runs only those targets under `--cfg loom` with `--all-features --test-threads=1`, and fails loud if a crate declares loom support but exposes no such target. Update crates/multitude to match the new convention: - add an empty `loom` marker feature (selection only; the build is still driven by `--cfg loom` via the existing `target.'cfg(loom)'` tables) - declare `[[test]] name = "loom" path = "tests/loom.rs" required-features = ["loom"]` This restores real loom coverage (the previous `just loom` glob no longer matched the consolidated tests/loom.rs and silently no-op'd in CI). All 20 loom tests pass under `just anvil-loom`. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Re-regenerate against the latest anvil-multiple-regions, which fixes the Windows `llvm-cov export` command-line overflow (os error 206) by exporting coverage per feature config instead of from one merged report: - anvil-llvm-cov now runs `--all-features` and `--no-default-features` as separate self-contained llvm-cov runs (clean between), each exporting only its own config's objects (~half) -> stays under the 32 KB Windows cmdline limit. The two per-config lcovs are reconciled downstream. - cargo-coverage-gate pin bumped 0.1.0 -> 0.2.0, which accepts multiple `--lcov` files and merges them at the line level (the gate). - Codecov uploads now reference the two per-config lcov files (lcov-all-features.info, lcov-no-default.info); Codecov coalesces them. - impact action.yml picks up upstream baseline-resolution fixes (shared base-ref resolver, active-toolchain override, first-adoption fallback). Verified on Windows: `just anvil-llvm-cov` now completes with zero os-error-206 (both configs export lcov + cobertura). Remaining gate threshold failures (testing_aids, ohno, cachet) are pre-existing per-package coverage gaps newly surfaced by the gate, not overflow. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
cargo-coverage-gate (the per-package line-coverage gate anvil runs) evaluates raw lcov and does not read codecov.yml, so files the repo excludes from Codecov via `ignore` globs were still gated and failed. Translate the two ignores into mechanisms the gate honors: - testing_aids: add crate-level `#![cfg_attr(coverage_nightly, coverage(off))]` (+ feature gate). It is an internal (publish=false) test-helper crate whose utilities are exercised opportunistically by other crates' tests, so per-package coverage is not meaningful. Now reports NO DATA -> OK. - ohno/src/test_util.rs: the existing module-level coverage(off) was inert for `assert_error_message!` because a macro body is re-instrumented at each expansion site and attributed back to this file. Move the assertion logic into `assert_error_message_impl` (a real `#[doc(hidden)] pub fn`); the macro now expands to a single call to it. The function is compiled once in ohno where coverage(off) applies, so test_util.rs no longer contributes instrumented lines. ohno goes 99.3% -> 100%. The function is `#[track_caller]` so assertion failures still report at the caller's line (a plain function would point into test_util.rs). Macro behavior is unchanged (verified: ohno + http_extensions tests, incl. the should_panic, doctest, and panic location). - codecov.yml: drop both now-redundant `ignore` entries (the lines no longer appear in the lcov at all, so Codecov and the gate agree). NOTE: ohno is published (crates.io v0.3.6); this adds a doc-hidden public helper (additive, non-breaking) to back the macro. Remaining: cachet 99.7% (no-default-features-only telemetry fallback arms) is a genuine gap, not a codecov ignore -- handled separately. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
`record_{debug,info,error}_with_duration` each contain a
`#[cfg(not(any(feature = "logs", test)))]` no-op block that only exists to
silence unused-variable warnings when logging is compiled out. Under
`--no-default-features` these blocks compile only into non-test builds (notably
cachet's examples) and are never executed, so they surfaced as 9 uncovered
lines under anvil's nextest-based coverage (which instruments example binaries;
oxidizer's libtest `cargo llvm-cov` does not, which is why Codecov shows the
file 100%).
Add `#[cfg_attr(coverage_nightly, coverage(off))]` to the three functions (and
enable `feature(coverage_attribute)` at the crate root) so these untestable
discards are not instrumented. cachet goes 99.7% -> 100%.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
cargo-coverage-gate maps any gated package that produces NO coverage data to Verdict::ConfigError (exit 2) unless it is explicitly opted out via `min-lines-percent = 0`. automation (script-only, entirely coverage(off)), fundle (macro re-exports + marker structs + trait defs, no executable bodies), and testing_aids (whole crate coverage(off)) all legitimately produce no data, so the full-workspace gate failed even though every measured package passed. Add `[package.metadata.coverage-gate] min-lines-percent = 0` to the three so the gate treats their NO DATA as OK. This is also the marker anvil-llvm-cov's impact-scoping uses to drop opted-out packages from the measured set. With this, `cargo coverage-gate` over the per-config lcovs reports "all packages meet their threshold" (exit 0). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Regenerate against the latest anvil-multiple-regions, which version-qualifies the impact `--package` specs (`name@version`) to fix the workspace-vs-dependency ambiguity. The affected-package list previously emitted bare names, so `cargo <cmd> -p ohno` failed with "specification `ohno` is ambiguous" whenever a published copy of a workspace crate is also pulled in transitively -- here `ohno@0.3.5` via thread_aware [dev-dep] -> many_cpus -> many_cpus_impl -> cpulist. `--package ohno@0.3.8` resolves uniquely to the workspace member. Recipes that take bare package selectors (e.g. cargo-coverage-gate) strip the `@version` suffix. Also picks up the upstream msrustup-swappable toolchain recipe changes. Adopter-owned regions (workspace-lints, deny-*) preserved. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…_mut) anyhow < 1.0.103 has unsound Error::downcast_mut() (UB after Error::context); patched in 1.0.103. Flagged HIGH RISK by anvil-aprz. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pulls the upstream fix (a5d8e0f) that moves impact spec formatting into a shared pwsh recipe (_anvil-impact-format). The previous bash version mis-parsed the version map because IFS=\$'\t' coalesces the empty-lib '\t\t' field, zeroing every package's version and emitting bare -p specs (so cargo -p ohno stayed ambiguous). The pwsh recipe uses ConvertFrom-Json and now emits version-qualified specs (e.g. --package ohno@0.3.8), verified locally. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The macro->function refactor (assert_error_message! -> assert_error_message_impl) exposed the accepted-continuation || chain as a cargo-mutants target that macro_rules! bodies had shielded. cargo-mutants reported a surviving ||->&& mutant on the chain. Add four direct tests against assert_error_message_impl, each making exactly one branch of the || chain decisive (the others false), so flipping any || to && breaks an assertion. Verified: cargo mutants --package ohno --file crates/ohno/src/test_util.rs now catches all 5 mutants (was 1 missed). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ping The per-package coverage gate flagged fundle_macros (66.7%) and fundle_macros_impl (99.8%) under impact-scoped cargo llvm-cov nextest, while a --workspace run reported 100%. Root cause: proc-macro coverage is captured at compile time of the expanding consumer, and which integration tests run under impact-scoped nextest is non-deterministic (two identical full-scope runs executed fundle's integration tests 14 times vs 0 times), so proc-macro line coverage flickers run-to-run. - fundle_macros: its three #[proc_macro_attribute] entry points (bundle/deps/ newtype) are thin shims that delegate to fundle_macros_impl and cannot be exercised by a runtime test; their only coverage is non-deterministic compile-time expansion. Mark them #[cfg_attr(coverage_nightly, coverage(off))] so they are excluded from instrumentation, and opt the crate out of the per-package line gate via min-lines-percent=0 (same convention as the fundle facade crate). - fundle_macros_impl: add direct lib unit tests for the named-fields / tuple-struct / field-count error branches (bundle/deps/newtype) that were previously reached only by the non-deterministic trybuild compile-fail tests. Lib unit tests run deterministically, so these branches are now reliably covered. - fundle: add a runtime test of #[fundle::newtype] exercising the generated From/Deref/DerefMut, which the trybuild compile-test does not verify at runtime. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…+ careful guard) Pull latest cargo-anvil (fc9160a) and regenerate. Key upstream fixes: - anvil-miri now runs via libtest (cargo miri test --all-features --tests) instead of cargo miri nextest run. Under miri, nextest's process-per-test model multiplies the (expensive) per-process interpreter startup; libtest runs all tests of a binary in one miri process. This was the main PR wall-time regression vs the repo's existing extended-analysis miri job (which already used cargo miri test): ~80min -> expected ~42min on Windows. - anvil-careful now tracks the careful-sysroot build identity (nightly rustc -vV + cargo-careful version) in target/anvil/careful-sysroot.id and runs cargo clean when it changes, fixing the stale-sysroot E0463/metadata errors (cargo can't see the in-place sysroot rebuild behind the stable cache path). Also adds the anvil-managed [lints] region to the new crate plurality (removing its manual [lints] workspace=true to avoid a duplicate-key error). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Regen from latest cargo-anvil (e2bfe8e), which adds --grouped to the anvil-cargo-sort recipe. oxidizer-github's own CI sorts with cargo sort --check --grouped (local-dependency block kept separate from external deps), while anvil previously sorted without --grouped, which demands one fully-alphabetical list. Those two orderings are mutually exclusive, so anvil's earlier "apply cargo-sort" flattening of the root [workspace.dependencies] diverged from main and produced a textual Cargo.toml conflict on every rebase (both checks still passed, so no CI failure -- just merge friction). With --grouped, anvil's check now accepts main's grouped layout (verified), so restore the root [workspace.dependencies] to main's exact ordering (local block then external block; dependency set is byte-identical to main, only the order changed). Net Cargo.toml diff vs main is now just the anvil-workspace-lints region -- no dependency reordering. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…groups files)
Regen from cargo-anvil eada203. Upstream split the monolithic
justfiles/anvil/{checks,groups}.just into per-check files under
justfiles/anvil/checks/ and per-group files under justfiles/anvil/groups/
(plus helpers.just), and collapsed the ADO impact stage. Also picks up the
pr-title CI-type fix and fmt.just control-char fix.
Behavior-preserving for the github backend: miri still runs via libtest
(cargo miri test --all-features --tests), cargo-sort keeps --grouped, and
the careful sysroot-identity guard is intact. just --list parses and
cargo anvil --dry-run reports all items unchanged.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two DoS advisories were published against quick-xml 0.39.4 (quadratic-time duplicate-attribute check and unbounded namespace-declaration allocation), both fixed only in quick-xml >=0.41.0. quick-xml is pulled in transitively via the Azure SDK (typespec <- azure_core 1.0.0), which pins 0.39.x, so it cannot be upgraded until an upstream Azure SDK release moves to >=0.41. No production code path here parses untrusted XML. Add both IDs to deny.toml's adopter-owned ignore list (shared by the repo's cargo deny check all and anvil's anvil-deny). Remove once azure_core / typespec upgrade quick-xml. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…audit) anvil's pr-fast tier runs both cargo-deny (anvil-deny) and cargo-audit (anvil-audit) for advisories, and cargo-audit does NOT read deny.toml -- it uses its own .cargo/audit.toml. Mirror the quick-xml ignores (RUSTSEC-2026-0194 /0195) there so anvil-audit passes too. Same rationale as deny.toml: quick-xml 0.39.4 is pinned transitively by the Azure SDK (typespec <- azure_core) and cannot be upgraded until an upstream release moves to >=0.41. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
anvil's pr-fast tier runs a third advisory gate, anvil-aprz (cargo-aprz deps --error-if-high-risk), which flags quick-xml 0.39.4 as high risk and does not consult deny.toml or .cargo/audit.toml -- it uses its own aprz.toml. cargo-aprz REPLACES (does not merge) its built-in defaults when a config file is present, so a minimal config would silently disable every quality gate. Commit the full default ruleset (cargo aprz init: 6 high_risk + 30 eval checks) plus an adopter-owned [[allow_list]] entry exempting quick-xml =0.39.4 from --error-if-high-risk. Same un-upgradeable transitive advisory as deny.toml / .cargo/audit.toml (quick-xml pinned via Azure SDK typespec <- azure_core; needs >=0.41). Verified: cargo aprz validate passes and cargo aprz deps --error-if-high-risk exits 0. Note: advisory ignores must now be mirrored in three files (deny.toml, .cargo/audit.toml, aprz.toml) -- an anvil design wart, but not worth an upstream config file (anvil would ship it empty). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
bc60a81 to
7aa5814
Compare
There was a problem hiding this comment.
Pull request overview
This PR integrates cargo-anvil into the oxidizer workspace (GitHub backend), centralizing tool/version pinning and check orchestration via a generated Justfile catalog and dedicated GitHub Actions workflows, while reconciling existing lint/format/spellcheck/deny/coverage configurations and restoring Loom coverage.
Changes:
- Add the anvil-managed Justfile check catalog (tiers/groups/checks/tools + pinned tool versions) and wire it into the repo’s root
justfile. - Introduce new GitHub Actions workflows + composite actions to run anvil PR and scheduled tiers, including impact-scoped execution via
cargo-delta. - Reconcile repo configs for anvil (workspace lints, clippy/rustfmt/spellcheck/deny/aprz) and update coverage gating/opt-outs (including targeted
coverage(off)exclusions and per-config coverage export).
Reviewed changes
Copilot reviewed 119 out of 121 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| spellcheck.toml | Moves spellcheck config into anvil-managed region; adjusts tokenization split chars and dictionary notes. |
| rustfmt.toml | Adds anvil-managed rustfmt settings and enables nightly-only formatting options. |
| justfiles/anvil/versions.just | Adds pinned toolchain/tool versions used by anvil checks. |
| justfiles/anvil/tiers.just | Defines anvil tier entry points (pr/scheduled/full) and setup/validate fan-outs. |
| justfiles/anvil/mod.just | Adds the anvil Justfile entrypoint importing all checks/groups/tiers/tools. |
| justfiles/anvil/helpers.just | Adds shared pwsh helpers for base-ref resolution and impact formatting. |
| justfiles/anvil/groups/scheduled-test.just | Defines the scheduled “test” group (coverage/doc-test/examples). |
| justfiles/anvil/groups/scheduled-runtime-analysis.just | Defines scheduled runtime-analysis group (miri + stricter profiles). |
| justfiles/anvil/groups/scheduled-exhaustive.just | Defines scheduled exhaustive group (mutants-full, cargo-hack, bench). |
| justfiles/anvil/groups/scheduled-advisories.just | Defines scheduled advisories group (deny/audit/aprz/clippy). |
| justfiles/anvil/groups/pr-test.just | Defines PR “test” group (coverage/doc-test/examples). |
| justfiles/anvil/groups/pr-slow.just | Defines PR “slow” aggregation group (test + runtime-analysis + mutants). |
| justfiles/anvil/groups/pr-runtime-analysis.just | Defines PR runtime-analysis group (miri/careful/loom/bolero). |
| justfiles/anvil/groups/pr-mutants.just | Defines PR mutants group (mutants-diff). |
| justfiles/anvil/groups/pr-fast.just | Defines PR fast group (fmt/clippy/sort/deny/audit/udeps/etc.). |
| justfiles/anvil/checks/udeps.just | Adds required-tier udeps check with the repo’s two-pass udeps policy. |
| justfiles/anvil/checks/spellcheck.just | Adds modified-tier spellcheck and .spelling → target/spelling.dic generation. |
| justfiles/anvil/checks/semver-check.just | Adds advisory semver-checks run with sticky-comment output file. |
| justfiles/anvil/checks/readme-check.just | Adds modified-tier README regeneration check via cargo-doc2readme. |
| justfiles/anvil/checks/pr-title.just | Adds PR title Conventional Commits check (env-driven; cloud-first). |
| justfiles/anvil/checks/mutants-full.just | Adds scheduled exhaustive full-workspace mutation testing recipe. |
| justfiles/anvil/checks/mutants-diff.just | Adds PR diff-scoped mutation testing recipe using a computed base ref. |
| justfiles/anvil/checks/miri.just | Adds impacted miri execution via libtest, tuned for performance. |
| justfiles/anvil/checks/miri-tree-borrows.just | Adds scheduled strict miri profile (tree-borrows) wrapper. |
| justfiles/anvil/checks/miri-strict-provenance.just | Adds scheduled strict miri profile (strict-provenance) wrapper. |
| justfiles/anvil/checks/miri-race-coverage.just | Adds scheduled miri race-coverage profile with rotating seed window. |
| justfiles/anvil/checks/loom.just | Adds loom target discovery/execution based on metadata required-features. |
| justfiles/anvil/checks/llvm-cov.just | Adds impact-scoped nightly coverage with per-config exports + gate merge. |
| justfiles/anvil/checks/license-headers.just | Adds modified-tier license header check via cargo-heather. |
| justfiles/anvil/checks/fmt.just | Adds modified-tier formatting check on pinned nightly rustfmt. |
| justfiles/anvil/checks/external-types.just | Adds impacted external-types checking via per-crate --manifest-path. |
| justfiles/anvil/checks/examples.just | Adds affected-tier example build validation. |
| justfiles/anvil/checks/ensure-no-default-features.just | Adds modified-tier ensure-no-default-features check. |
| justfiles/anvil/checks/ensure-no-cyclic-deps.just | Adds modified-tier ensure-no-cyclic-deps check. |
| justfiles/anvil/checks/doc-test.just | Adds affected-tier doctest validation for both feature configs. |
| justfiles/anvil/checks/doc-build.just | Adds required-tier doc build with warnings-as-errors via RUSTDOCFLAGS. |
| justfiles/anvil/checks/deny.just | Adds unscoped cargo-deny check wrapper. |
| justfiles/anvil/checks/clippy.just | Adds affected-tier clippy check with -D warnings. |
| justfiles/anvil/checks/cargo-sort.just | Adds modified-tier cargo-sort check with --check-format and --grouped. |
| justfiles/anvil/checks/cargo-hack.just | Adds required-tier feature powerset validation via cargo-hack. |
| justfiles/anvil/checks/careful.just | Adds affected-tier careful execution with sysroot identity guard. |
| justfiles/anvil/checks/bolero.just | Adds affected-tier Linux-only bolero smoke fuzzing. |
| justfiles/anvil/checks/bench.just | Adds affected-tier bench compilation check (--no-run). |
| justfiles/anvil/checks/audit.just | Adds unscoped cargo-audit wrapper. |
| justfiles/anvil/checks/aprz.just | Adds unscoped cargo-aprz wrapper (prefers GITHUB_TOKEN/gh token). |
| justfile | Imports the anvil justfile tree into the repo’s root Justfile. |
| deny.toml | Reorganizes cargo-deny config into anvil-managed regions and adds bans/sources settings. |
| crates/uniflight/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/tick/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/thread_aware/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/thread_aware_macros/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/thread_aware_macros_impl/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/testing_aids/src/lib.rs | Excludes test-helper crate from coverage instrumentation on nightly. |
| crates/testing_aids/Cargo.toml | Allows all external types and opts out of coverage-gate for no-data crate. |
| crates/templated_uri/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/templated_uri_macros/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/templated_uri_macros_impl/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/seatbelt/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/seatbelt_http/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/recoverable/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/plurality/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/ohno/src/test_util.rs | Refactors error-message assertion macro into a function + adds branch tests. |
| crates/ohno/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/ohno_macros/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/multitude/tests/arena_vec.rs | Minor refactor in test block to inline Arc creation and clarify comment. |
| crates/multitude/Cargo.toml | Adds loom marker feature + loom test target + moves [lints] into managed region. |
| crates/layered/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/http_extensions/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/fundle/tests/newtype_basic.rs | Adds runtime test validating #[fundle::newtype] generated impls. |
| crates/fundle/Cargo.toml | Opts facade crate out of coverage-gate and wraps [lints] in managed region. |
| crates/fundle_macros/src/lib.rs | Adds coverage attribute gating and excludes proc-macro entry points from coverage. |
| crates/fundle_macros/Cargo.toml | Opts proc-macro entry crate out of coverage-gate and wraps [lints]. |
| crates/fundle_macros_impl/src/newtype.rs | Adds unit tests for error cases in newtype macro implementation. |
| crates/fundle_macros_impl/src/deps.rs | Adds unit tests for error cases in deps macro implementation. |
| crates/fundle_macros_impl/src/bundle.rs | Adds unit test for invalid input handling path. |
| crates/fundle_macros_impl/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/fetch/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/fetch_tls/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/fetch_options/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/fetch_hyper/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/fetch_azure/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/data_privacy/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/data_privacy_macros/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/data_privacy_macros_impl/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/data_privacy_core/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/cachet/src/telemetry/cache.rs | Excludes log-disabled no-op telemetry bodies from coverage instrumentation. |
| crates/cachet/src/lib.rs | Enables coverage attribute feature under coverage_nightly. |
| crates/cachet/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/cachet_tier/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/cachet_service/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/cachet_memory/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/bytesbuf/Cargo.toml | Moves [lints] into anvil-managed sentinel region. |
| crates/bytesbuf_io/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/automation/src/lib.rs | Adjusts coverage feature gating to apply under coverage_nightly generally. |
| crates/automation/Cargo.toml | Allows all external types, opts out of coverage-gate, and wraps [lints]. |
| crates/anyspawn/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| crates/anyspawn_azure/Cargo.toml | Wraps [lints] in anvil-managed sentinel region. |
| codecov.yml | Removes file ignores now replaced by Rust-level coverage(off)/crate opt-outs. |
| clippy.toml | Reconciles clippy configuration into an anvil-managed region with rationale. |
| Cargo.toml | Reworks workspace lints into dotted-key [workspace.lints] with check-cfg additions. |
| Cargo.lock | Updates lockfile (e.g., anyhow patch bump). |
| aprz.toml | Adds cargo-aprz policy configuration and allow-list for pinned transitive advisory. |
| .github/workflows/anvil-scheduled.yml | Adds scheduled workflow entrypoint. |
| .github/workflows/anvil-scheduled-impl.yml | Adds reusable scheduled workflow implementation with OS matrices. |
| .github/workflows/anvil-pr.yml | Adds PR workflow entrypoint. |
| .github/workflows/anvil-pr-impl.yml | Adds reusable PR workflow implementation with impact + tiered jobs. |
| .github/actions/anvil-setup/action.yml | Adds composite setup action (cache + tool installs + prerequisites). |
| .github/actions/anvil-scheduled-test/action.yml | Adds composite action for scheduled-test group execution. |
| .github/actions/anvil-scheduled-runtime-analysis/action.yml | Adds composite action for scheduled runtime-analysis execution. |
| .github/actions/anvil-scheduled-exhaustive/action.yml | Adds composite action for scheduled exhaustive execution. |
| .github/actions/anvil-scheduled-advisories/action.yml | Adds composite action for scheduled advisories execution. |
| .github/actions/anvil-pr-test/action.yml | Adds composite action for PR test group execution. |
| .github/actions/anvil-pr-runtime-analysis/action.yml | Adds composite action for PR runtime-analysis group execution. |
| .github/actions/anvil-pr-mutants/action.yml | Adds composite action for PR mutants group execution. |
| .github/actions/anvil-pr-fast/action.yml | Adds composite action for PR fast group execution. |
| .github/actions/anvil-impact/action.yml | Adds composite action computing cargo-delta impact sets for tier scoping. |
| .gitattributes | Forces LF endings for *.rs for consistent formatting/tooling. |
| .delta.toml | Adds anvil-managed cargo-delta root-files configuration for impact invalidation. |
| .cargo/audit.toml | Adds cargo-audit ignore list mirroring deny/aprz advisory exceptions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| $affected = $null | ||
| if ($env:ANVIL_INCLUDE_AFFECTED) { | ||
| $affected = @((-split $env:ANVIL_INCLUDE_AFFECTED) -replace '^-p$', '' | Where-Object { $_ }) | ||
| } | ||
| $pkgs = $meta.packages | ||
| if ($null -ne $affected) { | ||
| $pkgs = @($pkgs | Where-Object { $_.name -in $affected }) | ||
| } |
| ~/.cargo/bin/ | ||
| ~/.cargo/.crates.toml | ||
| ~/.cargo/.crates2.json | ||
| target/ | ||
| target/ |
| - name: Install cargo-binstall | ||
| uses: cargo-bins/cargo-binstall@main |
Summary
Adopt
cargo-anvil(unified-build check catalog, GitHub backend) into oxidizer, reconciling pre-existing tool configs and closing the gaps that surfaced on Windows local runs. Draft for review while the remaining slow-tier validation completes.What's included
2026-05-30.multitudedeclares aloommarker feature +[[test]] required-features = ["loom"]; anvil runs only loom targets with--all-features --test-threads=1under--cfg loom(all 20 tests pass). Restores loom coverage the oldloom_*.rsglob had silently dropped.llvm-cov export32 KB command-line overflow (os error 206): one self-contained run per feature config, merged at the lcov level by cargo-coverage-gate 0.2.0; Codecov uploads both per-config lcovs.testing_aids+ohno/test_util.rsusecoverage(off)(replacing codecov.yml ignores; macro logic moved to a#[track_caller]helper);cachet's untestable no-logs telemetry no-ops usecoverage(off); no-data crates (automation, fundle, testing_aids) opt out viamin-lines-percent = 0. Gate now reports "all packages meet their threshold".Validation
Fast tier green. Slow tier: doc-test/examples/miri/careful green; loom green; coverage gate green. bolero self-skips on Windows (Linux-only); mutants not yet run.
Notes
assert_error_message_implhelper (additive, non-breaking) backing the existing macro.