build(router_env): obtain workspace member package names from cargo_metadata more deterministically (#4139)

Co-authored-by: Sampras Lopes <lsampras@pm.me>
This commit is contained in:
Sanchith Hegde
2024-03-20 16:35:28 +05:30
committed by GitHub
parent 3653c2c108
commit 8f7d9fbc3a
3 changed files with 15 additions and 25 deletions

6
Cargo.lock generated
View File

@ -1764,9 +1764,9 @@ dependencies = [
[[package]]
name = "cargo_metadata"
version = "0.15.4"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
dependencies = [
"camino",
"cargo-platform",
@ -5690,7 +5690,7 @@ dependencies = [
name = "router_env"
version = "0.1.0"
dependencies = [
"cargo_metadata 0.15.4",
"cargo_metadata 0.18.1",
"config",
"error-stack",
"gethostname",

View File

@ -8,7 +8,7 @@ readme = "README.md"
license.workspace = true
[dependencies]
cargo_metadata = "0.15.4"
cargo_metadata = "0.18.1"
config = { version = "0.13.3", features = ["toml"] }
error-stack = "0.3.1"
gethostname = "0.4.3"
@ -34,7 +34,7 @@ vergen = { version = "8.2.1", optional = true, features = ["cargo", "git", "git2
tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread"] }
[build-dependencies]
cargo_metadata = "0.15.4"
cargo_metadata = "0.18.1"
vergen = { version = "8.2.1", features = ["cargo", "git", "git2", "rustc"], optional = true }
[features]

View File

@ -14,17 +14,11 @@ pub fn set_cargo_workspace_members_env() {
let metadata = cargo_metadata::MetadataCommand::new()
.exec()
.expect("Failed to obtain cargo metadata");
let workspace_members = metadata.workspace_members;
let workspace_members = workspace_members
let workspace_members = metadata
.workspace_packages()
.iter()
.map(|package_id| {
package_id
.repr
.split_once(' ')
.expect("Unknown cargo metadata package ID format")
.0
})
.map(|package| package.name.as_str())
.collect::<Vec<_>>()
.join(",");
@ -35,7 +29,7 @@ pub fn set_cargo_workspace_members_env() {
.expect("Failed to set `CARGO_WORKSPACE_MEMBERS` environment variable");
}
/// Verify that the cargo metadata workspace members format matches that expected by
/// Verify that the cargo metadata workspace packages format matches that expected by
/// [`set_cargo_workspace_members_env`] to set the `CARGO_WORKSPACE_MEMBERS` environment variable.
///
/// This function should be typically called within build scripts, before the
@ -43,24 +37,20 @@ pub fn set_cargo_workspace_members_env() {
///
/// # Panics
///
/// Panics if running the `cargo metadata` command fails, or if the workspace members package ID
/// format cannot be determined.
/// Panics if running the `cargo metadata` command fails, or if the workspace member package names
/// cannot be determined.
pub fn verify_cargo_metadata_format() {
#[allow(clippy::expect_used)]
let metadata = cargo_metadata::MetadataCommand::new()
.exec()
.expect("Failed to obtain cargo metadata");
let workspace_members = metadata.workspace_members;
let package_id_entry_prefix =
format!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
assert!(
workspace_members
metadata
.workspace_packages()
.iter()
.any(|package_id| package_id.repr.starts_with(&package_id_entry_prefix)),
"Unknown workspace members package ID format. \
Please run `cargo metadata --format-version=1 | jq '.workspace_members'` and update this \
build script to match the updated package ID format."
.any(|package| package.name == env!("CARGO_PKG_NAME")),
"Unable to determine workspace member package names from `cargo metadata`"
);
}