Skip to content

ci: add opt out env variable to temporarily prevent using build-dir v2 in nightly runs - #707

Merged
Alan632 merged 7 commits into
microsoft:mainfrom
Alan632:mitigate-cargo-build_dir_v2
Aug 4, 2026
Merged

Alan632 merged 7 commits into
microsoft:mainfrom
Alan632:mitigate-cargo-build_dir_v2

Conversation

@Alan632

@Alan632 Alan632 commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor

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-wdk can be updated to support the build-dir layout v2.

reference PR's:

info on the new build directory layout:

GitHub Issue Link: #709

@Alan632 Alan632 self-assigned this Jul 31, 2026
Copilot AI review requested due to automatic review settings July 31, 2026 21:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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=1 at the workflow level for the test workflow.
  • Set __CARGO_TEMPORARY_BUILD_DIR_NEW_LAYOUT_OPT_OUT=1 at 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.

Comment thread .github/workflows/build.yaml Resolved
Comment thread .github/workflows/test.yaml Resolved
Copilot AI review requested due to automatic review settings July 31, 2026 21:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

@codecov-commenter

Codecov Comments Bot (codecov-commenter) commented Jul 31, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.47%. Comparing base (66223e9) to head (1c34c7e).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread .github/workflows/build.yaml Resolved
Comment thread .github/workflows/build.yaml Resolved

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_LAYOUT does 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=1 as the temporary opt-out flag.
env:
  # TODO: Remove when cargo-wdk supports Cargo build-dir layout v2.
  CARGO_UNSTABLE_BUILD_DIR_NEW_LAYOUT: 'false'

Copilot AI review requested due to automatic review settings August 3, 2026 17:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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=1 as 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'

Copilot AI review requested due to automatic review settings August 3, 2026 17:08

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

@wmmc88 Melvin Wang (wmmc88) changed the title ci: add opt out env variable to prevent using build-dir v2 in nightly runs ci: add opt out env variable to temporarily prevent using build-dir v2 in nightly runs Aug 3, 2026
…e logic which selects which env vars to sanitize in the test workflow

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

@Alan632
Alan632 enabled auto-merge August 3, 2026 23:22
@Alan632
Alan632 added this pull request to the merge queue Aug 4, 2026
Merged via the queue into microsoft:main with commit 2d1f89b Aug 4, 2026
229 checks passed
@Alan632
Alan632 deleted the mitigate-cargo-build_dir_v2 branch August 4, 2026 03:17
Shravan Vasista (svasista-ms) added a commit to svasista-ms/windows-drivers-rs that referenced this pull request Sep 10, 2026
reverts changes added in PR microsoft#707 to disable build-dir layout v2
Shravan Vasista (svasista-ms) added a commit to svasista-ms/windows-drivers-rs that referenced this pull request Sep 10, 2026
reverts changes added in PR microsoft#707 to disable build-dir layout v2
pull Bot pushed a commit to RobinFassinaMoschiniForks/windows-drivers-rs that referenced this pull request Sep 10, 2026
## ⚠️ 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` |
Jaco (jacobocasado) pushed a commit to starredjaco/windows-drivers-rs that referenced this pull request Oct 27, 2026
## 🤖 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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants