feat(tvix/build/protos): add some missing fields
- directory in which the castore input nodes are mounted - working directory for the build command - scratch paths - network access y/n - whether a (static) /bin/sh should be provided Populate these fields appropriately, and extend the tests in tvix-glue with a FOD example. Change-Id: I4f9de1483d6696d74694a09784910c407acb0be0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10412 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
d07600dbca
commit
f6c94430c8
4 changed files with 252 additions and 89 deletions
|
|
@ -134,12 +134,19 @@ where
|
|||
.cmp(b.node.as_ref().unwrap().get_name())
|
||||
});
|
||||
|
||||
// Produce constraints. We currently only put platform in here.
|
||||
// Maybe more things need to be added here in the future.
|
||||
// Produce constraints.
|
||||
let constraints = Some(BuildConstraints {
|
||||
system: derivation.system.clone(),
|
||||
min_memory: 0,
|
||||
available_ro_paths: vec![],
|
||||
// in case this is a fixed-output derivation, allow network access.
|
||||
network_access: derivation.outputs.len() == 1
|
||||
&& derivation
|
||||
.outputs
|
||||
.get("out")
|
||||
.expect("invalid derivation")
|
||||
.is_fixed(),
|
||||
provide_bin_sh: true,
|
||||
});
|
||||
|
||||
BuildRequest {
|
||||
|
|
@ -148,6 +155,9 @@ where
|
|||
environment_vars,
|
||||
inputs,
|
||||
constraints,
|
||||
working_dir: "build".into(),
|
||||
scratch_paths: vec!["build".into()],
|
||||
store_dir: nix_compat::store_path::STORE_DIR.into(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -205,24 +215,24 @@ mod test {
|
|||
|
||||
let mut expected_environment_vars = vec![
|
||||
EnvVar {
|
||||
key: "bar".to_string(),
|
||||
value: Bytes::from("/nix/store/mp57d33657rf34lzvlbpfa1gjfv5gmpg-bar"),
|
||||
key: "bar".into(),
|
||||
value: "/nix/store/mp57d33657rf34lzvlbpfa1gjfv5gmpg-bar".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "builder".to_string(),
|
||||
value: Bytes::from(":"),
|
||||
key: "builder".into(),
|
||||
value: ":".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "name".to_string(),
|
||||
value: Bytes::from("foo"),
|
||||
key: "name".into(),
|
||||
value: "foo".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "out".to_string(),
|
||||
value: Bytes::from("/nix/store/fhaj6gmwns62s6ypkcldbaj2ybvkhx3p-foo"),
|
||||
key: "out".into(),
|
||||
value: "/nix/store/fhaj6gmwns62s6ypkcldbaj2ybvkhx3p-foo".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "system".to_string(),
|
||||
value: Bytes::from(":"),
|
||||
key: "system".into(),
|
||||
value: ":".into(),
|
||||
},
|
||||
];
|
||||
|
||||
|
|
@ -242,8 +252,81 @@ mod test {
|
|||
constraints: Some(BuildConstraints {
|
||||
system: derivation.system.clone(),
|
||||
min_memory: 0,
|
||||
network_access: false,
|
||||
available_ro_paths: vec![],
|
||||
provide_bin_sh: true,
|
||||
}),
|
||||
working_dir: "build".to_string(),
|
||||
scratch_paths: vec!["build".to_string()],
|
||||
store_dir: nix_compat::store_path::STORE_DIR.to_string(),
|
||||
},
|
||||
build_request
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fod_to_build_request() {
|
||||
let aterm_bytes = include_bytes!("tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv");
|
||||
|
||||
let derivation = Derivation::from_aterm_bytes(aterm_bytes).expect("must parse");
|
||||
|
||||
let build_request =
|
||||
derivation_to_build_request(&derivation, |_| unreachable!(), |_, _| unreachable!());
|
||||
|
||||
let mut expected_environment_vars = vec![
|
||||
EnvVar {
|
||||
key: "builder".into(),
|
||||
value: ":".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "name".into(),
|
||||
value: "bar".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "out".into(),
|
||||
value: "/nix/store/4q0pg5zpfmznxscq3avycvf9xdvx50n3-bar".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "outputHash".into(),
|
||||
value: "08813cbee9903c62be4c5027726a418a300da4500b2d369d3af9286f4815ceba".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "outputHashAlgo".into(),
|
||||
value: "sha256".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "outputHashMode".into(),
|
||||
value: "recursive".into(),
|
||||
},
|
||||
EnvVar {
|
||||
key: "system".into(),
|
||||
value: ":".into(),
|
||||
},
|
||||
];
|
||||
|
||||
expected_environment_vars.extend(NIX_ENVIRONMENT_VARS.iter().map(|(k, v)| EnvVar {
|
||||
key: k.to_string(),
|
||||
value: Bytes::from_static(v.as_bytes()),
|
||||
}));
|
||||
|
||||
expected_environment_vars.sort_unstable_by_key(|e| e.key.to_owned());
|
||||
|
||||
assert_eq!(
|
||||
BuildRequest {
|
||||
command_args: vec![":".to_string()],
|
||||
outputs: vec!["4q0pg5zpfmznxscq3avycvf9xdvx50n3-bar".to_string()],
|
||||
environment_vars: expected_environment_vars,
|
||||
inputs: vec![],
|
||||
constraints: Some(BuildConstraints {
|
||||
system: derivation.system.clone(),
|
||||
min_memory: 0,
|
||||
network_access: true,
|
||||
available_ro_paths: vec![],
|
||||
provide_bin_sh: true,
|
||||
}),
|
||||
working_dir: "build".to_string(),
|
||||
scratch_paths: vec!["build".to_string()],
|
||||
store_dir: nix_compat::store_path::STORE_DIR.to_string(),
|
||||
},
|
||||
build_request
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue