From 9d7a941fbddebe3520ba4b854e97d77e91979dcd Mon Sep 17 00:00:00 2001 From: David Gilligan-Cook Date: Fri, 24 Nov 2023 17:19:09 -0800 Subject: [PATCH] Adds initial host_compat lints, but needs the spk-lint-update branch PR merged before it can compile and be tested Signed-off-by: David Gilligan-Cook --- crates/spk-schema/src/build_spec.rs | 59 ++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/crates/spk-schema/src/build_spec.rs b/crates/spk-schema/src/build_spec.rs index 294cc8aa33..fbfcc29fb0 100644 --- a/crates/spk-schema/src/build_spec.rs +++ b/crates/spk-schema/src/build_spec.rs @@ -25,6 +25,13 @@ const ARCH_ADDS: &[&OptName] = &[OptName::os(), OptName::arch()]; const OS_ADDS: &[&OptName] = &[OptName::os()]; const NONE_ADDS: &[&OptName] = &[]; +// Each HostCompat value disallows certain var names when host_compat +// validation is enabled in the config file. +const DISTRO_DISALLOWS: &[&OptName] = &[]; +const ARCH_DISALLOWS: &[&OptName] = &[OptName::distro()]; +const OS_DISALLOWS: &[&OptName] = &[OptName::distro(), OptName::arch()]; +const NONE_DISALLOWS: &[&OptName] = &[OptName::distro(), OptName::arch(), OptName::os()]; + /// Describes what level of cross-platform compatibility the built package /// should have. #[derive( @@ -60,6 +67,16 @@ impl HostCompat { names.iter().copied().collect::>() } + // TODO: should this be a hashset too? + fn names_disallowed(&self) -> &[&OptName] { + match self { + HostCompat::Distro => DISTRO_DISALLOWS, + HostCompat::Arch => ARCH_DISALLOWS, + HostCompat::Os => OS_DISALLOWS, + HostCompat::None => NONE_DISALLOWS, + } + } + /// Get host_options after filtering based on the cross Os /// compatibility setting. pub fn host_options(&self) -> Result> { @@ -279,6 +296,8 @@ impl<'de> Deserialize<'de> for UncheckedBuildSpec { { let mut variants = Vec::::new(); let mut unchecked = BuildSpec::default(); + let has_auto_host_vars_field = false; + while let Some(key) = map.next_key::()? { match key.as_str() { "script" => unchecked.script = map.next_value::