45 lines
1.0 KiB
Nix
45 lines
1.0 KiB
Nix
{
|
|
definitions,
|
|
lib,
|
|
}:
|
|
let
|
|
assertValid =
|
|
data:
|
|
let
|
|
assertions = validationAssertions data;
|
|
failures = lib.filter (assertion: !assertion.assertion) assertions;
|
|
in
|
|
assert lib.assertMsg (lib.all (assertion: assertion.assertion) assertions) (
|
|
lib.concatMapStringsSep "\n" (assertion: assertion.message) failures
|
|
);
|
|
data;
|
|
|
|
validationAssertions =
|
|
data:
|
|
lib.concatLists (
|
|
lib.mapAttrsToList (
|
|
registryName: registry:
|
|
let
|
|
entries = flattenRegistryEntries registryName data.${registryName};
|
|
in
|
|
map (check: {
|
|
assertion = check.assertion entries;
|
|
inherit (check) message;
|
|
}) registry.checks
|
|
) definitions
|
|
);
|
|
|
|
flattenRegistryEntries =
|
|
registryName: data:
|
|
lib.concatLists (
|
|
lib.mapAttrsToList (
|
|
host: entries:
|
|
lib.mapAttrsToList (entry: value: {
|
|
path = "registry.${registryName}.${host}.${entry}";
|
|
inherit host entry value;
|
|
}) entries
|
|
) data
|
|
);
|
|
in
|
|
assertValid
|