Skip to content

Commit a8da554

Browse files
feat: support stampinf version override (#520)
Signed-off-by: Krishna Kumar Thokala <[email protected]> Co-authored-by: Copilot <[email protected]>
1 parent c195dbd commit a8da554

File tree

10 files changed

+777
-962
lines changed

10 files changed

+777
-962
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/cargo-wdk/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ wdk-build.workspace = true
3131
assert_cmd.workspace = true
3232
assert_fs.workspace = true
3333
predicates.workspace = true
34+
regex.workspace = true
3435
sha2.workspace = true
3536

3637
[lints.rust]

crates/cargo-wdk/src/actions/build/package_task.rs

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use crate::{actions::build::error::PackageTaskError, providers::error::FileError
2626
const MISSING_SAMPLE_FLAG_WDK_BUILD_NUMBER_RANGE: RangeFrom<u32> = 25798..;
2727
const WDR_TEST_CERT_STORE: &str = "WDRTestCertStore";
2828
const WDR_LOCAL_TEST_CERT: &str = "WDRLocalTestCert";
29+
const STAMPINF_VERSION_ENV_VAR: &str = "STAMPINF_VERSION";
2930

3031
#[derive(Debug)]
3132
pub struct PackageTaskParams<'a> {
@@ -313,9 +314,23 @@ impl<'a> PackageTask<'a> {
313314
&arch,
314315
"-c",
315316
&cat_file_path,
316-
"-v",
317-
"*",
318317
];
318+
319+
match std::env::var(STAMPINF_VERSION_ENV_VAR) {
320+
Ok(version) if !version.trim().is_empty() => {
321+
// When STAMPINF_VERSION is set to a non-empty, non-whitespace value, we
322+
// intentionally omit -v so stampinf reads it and populates
323+
// DriverVer. (Whitespace-only values are ignored.)
324+
debug!(
325+
DriverVer = version,
326+
"Using {STAMPINF_VERSION_ENV_VAR} env var to set DriverVer"
327+
);
328+
}
329+
_ => {
330+
args.extend(["-v", "*"]);
331+
}
332+
}
333+
319334
if !wdf_version_flags.is_empty() {
320335
args.append(&mut wdf_version_flags.iter().map(String::as_str).collect());
321336
}
@@ -514,7 +529,10 @@ impl<'a> PackageTask<'a> {
514529
}
515530
#[cfg(test)]
516531
mod tests {
517-
use std::path::PathBuf;
532+
use std::{
533+
path::PathBuf,
534+
process::{ExitStatus, Output},
535+
};
518536

519537
use wdk_build::{CpuArchitecture, KmdfConfig};
520538

@@ -632,4 +650,69 @@ mod tests {
632650

633651
PackageTask::new(package_task_params, &wdk_build, &command_exec, &fs);
634652
}
653+
654+
#[test]
655+
fn stampinf_version_overrides_with_env_var() {
656+
// verify both with and without the env var set scenarios
657+
let scenarios = [
658+
("env_set", Some("1.2.3.4"), true),
659+
("env_empty", Some(""), false),
660+
("env_spaces", Some(" "), false),
661+
("env_unset", None, false),
662+
];
663+
664+
for (name, env_val, expect_skip_v) in scenarios {
665+
let result =
666+
crate::test_utils::with_env(&[(STAMPINF_VERSION_ENV_VAR, env_val)], || {
667+
let package_name = "driver";
668+
let working_dir = PathBuf::from("C:/abs/driver");
669+
let target_dir = PathBuf::from("C:/abs/driver/target/debug");
670+
let arch = CpuArchitecture::Amd64;
671+
672+
let params = PackageTaskParams {
673+
package_name,
674+
working_dir: &working_dir,
675+
target_dir: &target_dir,
676+
target_arch: &arch,
677+
driver_model: DriverConfig::Kmdf(KmdfConfig::default()),
678+
sample_class: false,
679+
verify_signature: false,
680+
};
681+
682+
let wdk_build = WdkBuild::default();
683+
let fs = Fs::default();
684+
let mut command_exec = CommandExec::default();
685+
686+
command_exec
687+
.expect_run()
688+
.withf(move |cmd: &str, args: &[&str], _, _| {
689+
if cmd != "stampinf" {
690+
return false;
691+
}
692+
let has_v = args.contains(&"-v");
693+
if expect_skip_v {
694+
!has_v
695+
} else {
696+
args.windows(2).any(|w| w == ["-v", "*"])
697+
}
698+
})
699+
.once()
700+
.return_once(|_, _, _, _| {
701+
Ok(Output {
702+
status: ExitStatus::default(),
703+
stdout: vec![],
704+
stderr: vec![],
705+
})
706+
});
707+
708+
let task = PackageTask::new(params, &wdk_build, &command_exec, &fs);
709+
task.run_stampinf()
710+
});
711+
712+
assert!(
713+
result.is_ok(),
714+
"scenario {name} failed (env_set={env_val:?})"
715+
);
716+
}
717+
}
635718
}

0 commit comments

Comments
 (0)