Checks: add json-compat check wrapper to ensure all clan.modules stay json-compatible

This commit is contained in:
Johannes Kirschbauer
2025-04-29 15:31:02 +02:00
parent d6714355b5
commit 662787f96e
3 changed files with 34 additions and 6 deletions

View File

@@ -64,7 +64,33 @@ in
self'.legacyPackages.homeConfigurations or { }
);
in
nixosTests // flakeOutputs;
nixosTests
// flakeOutputs
// {
# TODO: Automatically provide this check to downstream users to check their modules
clan-modules-json-compatible =
let
allSchemas = lib.mapAttrs (
_n: m:
let
schema =
(self.clanLib.inventory.evalClanService {
modules = [ m ];
key = "checks";
}).config.result.api.schema;
in
schema
) self.clan.modules;
in
pkgs.runCommand "combined-result"
{
schemaFile = builtins.toFile "schemas.json" (builtins.toJSON allSchemas);
}
''
mkdir -p $out
cat $schemaFile > $out/allSchemas.json
'';
};
legacyPackages = {
nixosTests =
let

View File

@@ -13,6 +13,9 @@ in
clan.inventory.modules = {
hello-world = module;
};
clan.modules = {
hello-world = module;
};
perSystem =
{ pkgs, ... }:
let

View File

@@ -16,18 +16,17 @@
}:
let
evalClanService =
{ modules, id }:
{ modules, key }:
(lib.evalModules {
class = "clan.service";
modules = [
./service-module.nix
# feature modules
(lib.modules.importApply ./api-feature.nix {
inherit clanLib;
attrName = id;
attrName = key;
})
];
] ++ modules;
});
in
{
@@ -139,7 +138,7 @@ in
importedModulesEvaluated = lib.mapAttrs (
module_ident: instances:
evalClanService {
id = module_ident;
key = module_ident;
modules =
[
# Import the resolved module.