Repository navigation
ci: add opt out env variable to temporarily prevent using build-dir v2 in nightly runs - #707
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a Cargo opt-out environment variable to the CI workflows to keep using the legacy (v1) temporary build directory layout, working around Rust nightly’s new build-dir layout v2 that currently breaks cargo-wdk tooling in this repository.
Changes:
- Set
__CARGO_TEMPORARY_BUILD_DIR_NEW_LAYOUT_OPT_OUT=1at the workflow level for the test workflow. - Set
__CARGO_TEMPORARY_BUILD_DIR_NEW_LAYOUT_OPT_OUT=1at the workflow level for the build workflow.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| .github/workflows/test.yaml | Adds the Cargo build-dir layout v2 opt-out env var for CI test runs. |
| .github/workflows/build.yaml | Adds the Cargo build-dir layout v2 opt-out env var for CI build runs (alongside existing RUSTFLAGS). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #707 +/- ##
=======================================
Coverage 80.47% 80.47%
=======================================
Files 26 26
Lines 5722 5722
Branches 5722 5722
=======================================
Hits 4605 4605
Misses 989 989
Partials 128 128 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Co-authored-by: Melvin Wang <[email protected]> Signed-off-by: Alan632 <[email protected]>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (1)
.github/workflows/build.yaml:18
CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUTdoes not appear to be a Cargo-recognized env var for opting out of build-dir layout v2, so this likely has no effect and nightly builds may still use layout v2. Upstream Cargo uses__CARGO_TEMPORARY_BUILD_DIR_NEW_LAYOUT_OPT_OUT=1as the temporary opt-out flag.
env:
# TODO: Remove when cargo-wdk supports Cargo build-dir layout v2.
CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUT: 'false'
Signed-off-by: Alan632 <[email protected]>
Signed-off-by: Alan632 <[email protected]>
Signed-off-by: Alan632 <[email protected]>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (2)
.github/workflows/test.yaml:18
- The env var being set here (CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUT) does not appear to be Cargo’s opt-out for the nightly-default build-dir layout v2. Cargo’s own implementation uses
__CARGO_TEMPORARY_BUILD_DIR_NEW_LAYOUT_OPT_OUT=1as the temporary opt-out, so this workflow may not actually prevent layout v2 from being used.
env:
# TODO: Remove when cargo-wdk supports Cargo build-dir layout v2 (see https://github.com/microsoft/windows-drivers-rs/issues/709).
CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUT: 'false'
.github/workflows/build.yaml:21
- This sets
CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUT, but Cargo’s nightly-default build-dir layout v2 opt-out is implemented via__CARGO_TEMPORARY_BUILD_DIR_NEW_LAYOUT_OPT_OUT=1. Using the temporary opt-out env var here is more likely to reliably force the legacy (v1) layout in nightly.
env:
# TODO: Remove when cargo-wdk supports Cargo build-dir layout v2 (see https://github.com/microsoft/windows-drivers-rs/issues/709).
CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUT: 'false'
…e logic which selects which env vars to sanitize in the test workflow
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.
Suppressed comments (1)
crates/cargo-wdk/tests/test_utils/mod.rs:316
- The TODO references removal from
test.yaml, but this env var is also set in other workflows (e.g., build.yaml). To avoid the comment becoming misleading, consider wording it in terms of CI/workflows generally rather than a specific file name.
// TODO: Remove this whitelist once the env var is removed from test.yaml (see https://github.com/microsoft/windows-drivers-rs/issues/709)
reverts changes added in PR microsoft#707 to disable build-dir layout v2
reverts changes added in PR microsoft#707 to disable build-dir layout v2
##⚠️ Breaking change This PR updates the packaging flow in both `cargo-wdk` and `cargo-make` to **stop** copying the `<pkg>.map` file to the final package. This PR also reverts the changes made in microsoft#707. Resolves microsoft#709 ## Details Currently, `cargo-wdk` packages the map file. In Cargo's `build-dir` layout v2 (rust-lang/cargo#15947, stabilized in 1.100.0 via rust-lang/cargo#17354) the map file is located at `<build-dir>/<profile>/build/<pkg>/<unit-hash>/out/<pkg>.map`, instead of `target/<profile>/deps/<driver_name>.map`. This causes the build to fail. Since the package contains a `pdb` along with the `sys/dll`, if `map` files are omitted, `cargo-wdk` will be able to support both v2 and v1 (legacy) directory layouts. This PR proposes this change. ### Package contents before vs after <img width="2160" height="476" alt="07-package-contents" src="https://github.com/user-attachments/assets/d624d7bb-d5f1-4c28-8eed-45665c090176" /> **NOTE:** Map file is still produced by the build — `wdk-build` continues to emit `/MAP` and `/MAPINFO:EXPORTS` | build-dir layout | path | | --- | --- | | v1 (legacy) | `target/<profile>/deps/<driver_name>.map` | | v2 (Cargo ≥ 1.100) | `target/<profile>/build/<pkg>/<unit-hash>/out/<driver_name>.map` |
## 🤖 New release * `wdk-build`: 0.5.1 -> 0.6.0 (✓ API compatible changes) * `cargo-wdk`: 0.1.1 -> 0.2.0 * `wdk-macros`: 0.5.1 -> 0.5.2 * `wdk-sys`: 0.5.1 -> 0.5.2 (✓ API compatible changes) * `wdk`: 0.4.1 -> 0.5.0 (⚠ API breaking changes) * `wdk-alloc`: 0.4.1 -> 0.4.2 (✓ API compatible changes) * `wdk-panic`: 0.4.1 -> 0.5.0 (⚠ API breaking changes) The release branch also synchronizes manifests, Cargo Make requirements, templates, and independent lockfiles with the release versions, and installs the panic hook in generated and sample UMDF drivers (Closes microsoft#646). ### ⚠ `wdk` breaking changes ```text --- failure feature_not_enabled_by_default: package feature is not enabled by default --- Description: A feature is no longer enabled by default for this package. This will break downstream crates which rely on the package's default features and require the functionality of this feature. ref: https://doc.rust-lang.org/cargo/reference/semver.html#cargo-feature-remove-another impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.51.0/src/lints/feature_not_enabled_by_default.ron Failed in: feature alloc in the package's Cargo.toml ``` <details><summary><i><b>Changelog</b></i></summary><p> ## `wdk-build` <blockquote> ## [0.6.0](microsoft/windows-drivers-rs@wdk-build-v0.5.1...wdk-build-v0.6.0) - 2026-10-22 ### Added - add linker directive for VHF lib + move static linker directives from wdk-build to wdk-sys ([microsoft#685](microsoft#685)) ### Fixed - [**breaking**] remove linker map file from driver packages ([microsoft#735](microsoft#735)) - unnecessary trailing commas in format! macros ([microsoft#619](microsoft#619)) - *(ci)* remove the nightly_toolchain feature gate for assert_matches ([microsoft#612](microsoft#612)) - *(ci)* use latest nightly toolchain in the Test workflow, fix `assert_matches` import and the `clippy` warning ([microsoft#604](microsoft#604)) - warn when WDK env vars are non-UTF8 ([microsoft#596](microsoft#596)) ### Other - improve Dependabot and refresh repo-wide dependencies ([microsoft#745](microsoft#745)) - re-format .rs files with the current nightly rustfmt ([microsoft#732](microsoft#732)) - add `-fno-builtin` to bindgen builder ([microsoft#695](microsoft#695)) - *(wdk-build)* fix clippy lints ([microsoft#655](microsoft#655)) - fix `collapsable_if` lint, rust 1.95 `assert_matches` destabilization ([microsoft#643](microsoft#643)) - add cargo-wdk preview callout to Cargo Make section in README ([microsoft#641](microsoft#641)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) - add new unit tests for Wdk::try_from method ([microsoft#491](microsoft#491)) - add tests for setup_path function ([microsoft#578](microsoft#578)) </blockquote> ## `cargo-wdk` <blockquote> ## [0.2.0](microsoft/windows-drivers-rs@cargo-wdk-v0.1.1...cargo-wdk-v0.2.0) - 2026-10-22 ### Added - *(cargo-wdk)* support hyphen-prefixed signtool args and support empty custom args ([microsoft#737](microsoft#737)) - *(cargo-wdk)* add `--stampinf-args` passthrough to customize `stampinf` options ([microsoft#733](microsoft#733)) - *(cargo-wdk)* add `--infverif-args` passthrough to customize `inverif` options ([microsoft#734](microsoft#734)) - add `--inf2cat-args` passthrough to customize `inf2cat` options ([microsoft#702](microsoft#702)) - *(cargo-wdk)* add `--signtool-args` passthrough to customize driver signing ([microsoft#699](microsoft#699)) - add linker directive for VHF lib + move static linker directives from wdk-build to wdk-sys ([microsoft#685](microsoft#685)) - *(cargo-wdk)* add `--target-platform` option to the `build` command ([microsoft#683](microsoft#683)) - add feature selection options to the `build` command ([microsoft#665](microsoft#665)) - improve user-mode and kernel-mode driver panic handlers ([microsoft#642](microsoft#642)) - add `--locked` option to the `build` command ([microsoft#656](microsoft#656)) - introduce sign mode for driver packaging, allowing skipping of signing steps ([microsoft#649](microsoft#649)) - add `cargo wdk clean` command ([microsoft#638](microsoft#638)) - *(cargo-wdk)* support target architecture override through `config.toml` and `CARGO_BUILD_TARGET` ([microsoft#494](microsoft#494)) ### Fixed - *(cargo-wdk)* use `CARGO` environment variable for nested invocations ([microsoft#742](microsoft#742)) - modify `WinGet` module selection in CI and resolve Clippy errors ([microsoft#739](microsoft#739)) - [**breaking**] remove linker map file from driver packages ([microsoft#735](microsoft#735)) - *(cargo-wdk)* update WDK build number range to skip `InfVerif` when building `sample` class drivers ([microsoft#679](microsoft#679)) - *(cargo-wdk)* use `--message-format=json-render-diagnostics` in the build command to render compiler errors instead of the plain `json` option ([microsoft#645](microsoft#645)) - do not sanitize `CARGO_HOME` & `RUSTUP_HOME` ([microsoft#609](microsoft#609)) - replace direct call to `std::fs::create_dir_all` with `fs` provider `fs::create_dir_all` ([microsoft#602](microsoft#602)) - disable ANSI colors when output is redirected ([microsoft#601](microsoft#601)) - move cargo-wdk output to stderr ([microsoft#599](microsoft#599)) - cargo wdk new now respects default VCS behavior ([microsoft#575](microsoft#575)) ### Other - improve Dependabot and refresh repo-wide dependencies ([microsoft#745](microsoft#745)) - re-format .rs files with the current nightly rustfmt ([microsoft#732](microsoft#732)) - fix assert_is_empty and branches_sharing_code clippy lints ([microsoft#713](microsoft#713)) - add opt out env variable to temporarily prevent using build-dir v2 in nightly runs ([microsoft#707](microsoft#707)) - *(cargo-wdk)* [**breaking**] rename `windows-driver` target-platform value to `windows` ([microsoft#705](microsoft#705)) - update `anyhow` and `crossbeam-epoch` to resolve RUSTSEC-2026-0190 and RUSTSEC-2026-0204 ([microsoft#704](microsoft#704)) - update bindgen to fix compatibility with LLVM 22 ([microsoft#682](microsoft#682)) - Bump serde_json from 1.0.140 to 1.0.143 in /crates/cargo-wdk/tests/wdm-driver ([microsoft#547](microsoft#547)) - fix `install-winget` dependency install loop ([microsoft#680](microsoft#680)) - Bump regex from 1.11.1 to 1.12.2 in /crates/cargo-wdk/tests/wdm-driver ([microsoft#548](microsoft#548)) - Bump regex from 1.11.1 to 1.12.2 in /crates/cargo-wdk/tests/umdf-driver ([microsoft#546](microsoft#546)) - Bump serde_json from 1.0.139 to 1.0.143 in /crates/cargo-wdk/tests/umdf-driver ([microsoft#544](microsoft#544)) - Bump regex from 1.11.1 to 1.12.2 in /crates/cargo-wdk/tests/kmdf-driver ([microsoft#539](microsoft#539)) - Bump serde_json from 1.0.140 to 1.0.143 in /crates/cargo-wdk/tests/kmdf-driver ([microsoft#541](microsoft#541)) - bump remaining crates to 2024 ([microsoft#634](microsoft#634)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) - Bump semver from 1.0.26 to 1.0.27 in /crates/cargo-wdk/tests/wdm-driver ([microsoft#549](microsoft#549)) - Add code coverage ([microsoft#556](microsoft#556)) - Skip build step in `cargo-wdk new` tests for release-plz PRs ([microsoft#584](microsoft#584)) - make cargo wdk integration tests faster ([microsoft#553](microsoft#553)) - add unit tests for cargo wdk new subcommand action flow ([microsoft#551](microsoft#551)) </blockquote> ## `wdk-macros` <blockquote> ## [0.5.2](microsoft/windows-drivers-rs@wdk-macros-v0.5.1...wdk-macros-v0.5.2) - 2026-10-22 ### Fixed - unnecessary trailing commas in format! macros ([microsoft#619](microsoft#619)) ### Other - improve Dependabot and refresh repo-wide dependencies ([microsoft#745](microsoft#745)) - re-format .rs files with the current nightly rustfmt ([microsoft#732](microsoft#732)) - add cargo-wdk preview callout to Cargo Make section in README ([microsoft#641](microsoft#641)) - bump remaining crates to 2024 ([microsoft#634](microsoft#634)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) </blockquote> ## `wdk-sys` <blockquote> ## [0.5.2](microsoft/windows-drivers-rs@wdk-sys-v0.5.1...wdk-sys-v0.5.2) - 2026-10-22 ### Added - add linker directive for VHF lib + move static linker directives from wdk-build to wdk-sys ([microsoft#685](microsoft#685)) ### Other - re-format .rs files with the current nightly rustfmt ([microsoft#732](microsoft#732)) - add cargo-wdk preview callout to Cargo Make section in README ([microsoft#641](microsoft#641)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) </blockquote> ## `wdk` <blockquote> ## [0.5.0](microsoft/windows-drivers-rs@wdk-v0.4.1...wdk-v0.5.0) - 2026-10-22 ### Added - [**breaking**] stack-based format buffer for `wdk` crate ([microsoft#611](microsoft#611)) - add dbg! macro to wdk ([microsoft#610](microsoft#610)) ### Other - re-format .rs files with the current nightly rustfmt ([microsoft#732](microsoft#732)) - fix assert_is_empty and branches_sharing_code clippy lints ([microsoft#713](microsoft#713)) - add cargo-wdk preview callout to Cargo Make section in README ([microsoft#641](microsoft#641)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) </blockquote> ## `wdk-alloc` <blockquote> ## [0.4.2](microsoft/windows-drivers-rs@wdk-alloc-v0.4.1...wdk-alloc-v0.4.2) - 2026-10-22 ### Other - re-format .rs files with the current nightly rustfmt ([microsoft#732](microsoft#732)) - add cargo-wdk preview callout to Cargo Make section in README ([microsoft#641](microsoft#641)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) </blockquote> ## `wdk-panic` <blockquote> ## [0.5.0](microsoft/windows-drivers-rs@wdk-panic-v0.4.1...wdk-panic-v0.5.0) - 2026-10-22 ### Added - Add `install_panic_hook()` for UMDF drivers to log panic details to the debugger and abort the host process. Call it early in `DriverEntry`. ([microsoft#642](microsoft#642)) ### Changed - [**breaking**] WDM/KMDF panics now explicitly bugcheck instead of looping indefinitely, recording the panic source location in the bugcheck parameters. With debug assertions enabled, it breaks into the debugger first. ([microsoft#642](microsoft#642)) - Added a dependency on `wdk 0.5`. Consumers with a direct `wdk 0.4.x` dependency must upgrade it to be compatible with `wdk-panic 0.5.0` ### Other - add cargo-wdk preview callout to Cargo Make section in README ([microsoft#641](microsoft#641)) - replace cargo-sort with taplo for dependency sorting ([microsoft#632](microsoft#632)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). --------- Co-authored-by: Gurinder Singh <[email protected]>
Summary
The new build-dir v2 layout was added in Rust nightly by this pr rust-lang/rust#159857 which breaks tooling in our cargo-wdk and pipeline.
This PR sets the opt out environment variable in the build and test workflows to continue using the v1 build-dir layout until
cargo-wdkcan be updated to support the build-dir layout v2.reference PR's:
info on the new build directory layout:
GitHub Issue Link: #709