native-inputs.nix (1369B)
1 { lib }: 2 { 3 nativeBuildInputs ? [ ], 4 buildInputs ? [ ], 5 environment ? { }, 6 }: 7 assert lib.assertMsg (builtins.isList nativeBuildInputs) "nativeBuildInputs must be a list"; 8 assert lib.assertMsg (builtins.isList buildInputs) "buildInputs must be a list"; 9 assert lib.assertMsg (builtins.isAttrs environment) "environment must be an attribute set"; 10 assert lib.assertMsg (lib.all (name: builtins.match "^[A-Za-z_][A-Za-z0-9_]*$" name != null) ( 11 builtins.attrNames environment 12 )) "environment names must be shell identifiers"; 13 assert lib.assertMsg (lib.all ( 14 name: builtins.match ".*(CREDENTIAL|PASSWORD|PRIVATE_KEY|SECRET|TOKEN).*" (lib.toUpper name) == null 15 ) (builtins.attrNames environment)) "environment names must not identify secret material"; 16 assert lib.assertMsg (lib.all ( 17 entry: 18 builtins.isAttrs entry 19 && 20 builtins.attrNames entry == [ 21 "classification" 22 "value" 23 ] 24 && entry.classification == "nonsecret" 25 && builtins.isString entry.value 26 && builtins.stringLength entry.value <= 4096 27 ) (builtins.attrValues environment)) "environment values must be bounded typed nonsecret values"; 28 { 29 schema = "radroots.service.native-inputs.v1"; 30 nativeBuildInputs = lib.unique nativeBuildInputs; 31 buildInputs = lib.unique buildInputs; 32 environment = lib.mapAttrs (_: entry: entry.value) environment; 33 environmentContract = environment; 34 }