sha: &'static str,
lock: Option<&'static str>,
packages: &'static [&'static str],
+ features: Option<&'static [&'static str]>,
+ manifest_path: Option<&'static str>,
}
const TEST_REPOS: &[Test] = &[
sha: "cf056ea5e8052c1feea6141e40ab0306715a2c33",
lock: None,
packages: &[],
+ features: None,
+ manifest_path: None,
},
Test {
name: "ripgrep",
sha: "3de31f752729525d85a3d1575ac1978733b3f7e7",
lock: None,
packages: &[],
+ features: None,
+ manifest_path: None,
},
Test {
name: "tokei",
sha: "fdf3f8cb279a7aeac0696c87e5d8b0cd946e4f9e",
lock: None,
packages: &[],
+ features: None,
+ manifest_path: None,
},
Test {
name: "xsv",
sha: "3de6c04269a7d315f7e9864b9013451cd9580a08",
lock: None,
packages: &[],
+ features: None,
+ manifest_path: None,
},
Test {
name: "servo",
// Only test Stylo a.k.a. Quantum CSS, the parts of Servo going into Firefox.
// This takes much less time to build than all of Servo and supports stable Rust.
packages: &["selectors"],
+ features: None,
+ manifest_path: None,
+ },
+ Test {
+ name: "diesel",
+ repo: "https://github.com/diesel-rs/diesel",
+ sha: "91493fe47175076f330ce5fc518f0196c0476f56",
+ lock: None,
+ packages: &[],
+ // Test the embeded sqlite variant of diesel
+ // This does not require any dependency to be present,
+ // sqlite will be compiled as part of the build process
+ features: Some(&["sqlite", "libsqlite3-sys/bundled"]),
+ // We are only interested in testing diesel itself
+ // not any other crate present in the diesel workspace
+ // (This is required to set the feature flags above)
+ manifest_path: Some("diesel/Cargo.toml"),
},
];
if let Some(lockfile) = test.lock {
fs::write(&dir.join("Cargo.lock"), lockfile).unwrap();
}
- if !run_cargo_test(cargo, &dir, test.packages) {
+ if !run_cargo_test(cargo, &dir, test.packages, test.features, test.manifest_path) {
panic!("tests failed for {}", test.repo);
}
}
out_dir
}
-fn run_cargo_test(cargo_path: &Path, crate_path: &Path, packages: &[&str]) -> bool {
+fn run_cargo_test(
+ cargo_path: &Path,
+ crate_path: &Path,
+ packages: &[&str],
+ features: Option<&[&str]>,
+ manifest_path: Option<&str>,
+) -> bool {
let mut command = Command::new(cargo_path);
command.arg("test");
+
+ if let Some(path) = manifest_path {
+ command.arg(format!("--manifest-path={}", path));
+ }
+
+ if let Some(features) = features {
+ command.arg("--no-default-features");
+ for feature in features {
+ command.arg(format!("--features={}", feature));
+ }
+ }
+
for name in packages {
command.arg("-p").arg(name);
}
+
let status = command
// Disable rust-lang/cargo's cross-compile tests
.env("CFG_DISABLE_CROSS_TESTS", "1")