tests(clan): move test-inventory.nix to clanLib. And name it 'makeTestClan'

Exposing the function via clanLib makes it more accessible to clan modules
This allows each module to define its own test without needing to depend on any fileSystem path assumptions in the clan-core repo
This commit is contained in:
Johannes Kirschbauer
2025-04-15 18:06:42 +02:00
parent bc9bb5d405
commit 75c8541a8d
10 changed files with 236 additions and 211 deletions

View File

@@ -25,6 +25,7 @@ lib.fix (clanLib: {
buildClanModule = clanLib.callLib ./build-clan { };
inventory = clanLib.callLib ./inventory { };
modules = clanLib.callLib ./inventory/frontmatter { };
test = clanLib.callLib ./tests { };
# Plain imports.
values = import ./introspection { inherit lib; };

92
lib/tests/default.nix Normal file
View File

@@ -0,0 +1,92 @@
{ lib, clanLib }:
let
inherit (lib)
mkOption
types
;
in
{
minifyModule = ./minify.nix;
# A function that returns an extension to runTest
makeTestClan =
{
nixosTest,
pkgs,
self,
...
}:
let
nixos-lib = import (pkgs.path + "/nixos/lib") { };
in
(nixos-lib.runTest (
{ config, ... }:
let
clanFlakeResult = config.clan;
in
{
imports = [ nixosTest ];
options = {
clanSettings = mkOption {
default = { };
type = types.submodule {
options = {
clan-core = mkOption { default = self; };
nixpkgs = mkOption { default = self.inputs.nixpkgs; };
nix-darwin = mkOption { default = self.inputs.nix-darwin; };
};
};
};
clan = mkOption {
default = { };
type = types.submoduleWith {
specialArgs = {
inherit (config.clanSettings)
clan-core
nixpkgs
nix-darwin
;
};
modules = [
clanLib.buildClanModule.flakePartsModule
];
};
};
};
config = {
nodes = clanFlakeResult.clanInternals.nixosModules;
hostPkgs = pkgs;
# speed-up evaluation
defaults = (
{ config, ... }:
{
imports = [
clanLib.test.minifyModule
];
documentation.enable = lib.mkDefault false;
nix.settings.min-free = 0;
system.stateVersion = config.system.nixos.release;
boot.initrd.systemd.enable = false;
# setup for sops
sops.age.keyFile = "/run/age-key.txt";
system.activationScripts =
{
setupSecrets.deps = [ "age-key" ];
age-key.text = ''
echo AGE-SECRET-KEY-1PL0M9CWRCG3PZ9DXRTTLMCVD57U6JDFE8K7DNVQ35F4JENZ6G3MQ0RQLRV > /run/age-key.txt
'';
}
// lib.optionalAttrs (lib.filterAttrs (_: v: v.neededForUsers) config.sops.secrets != { }) {
setupSecretsForUsers.deps = [ "age-key" ];
};
}
);
# to accept external dependencies such as disko
_module.args = { inherit self; };
node.specialArgs.self = self;
};
}
)).config.result;
}

11
lib/tests/minify.nix Normal file
View File

@@ -0,0 +1,11 @@
# This is a module to reduce the size of the NixOS configuration
# Used by the tests
# It unsets some unnecessary options
{ lib, ... }:
{
nixpkgs.flake.setFlakeRegistry = false;
nixpkgs.flake.setNixPath = false;
nix.registry = lib.mkForce { };
documentation.doc.enable = false;
documentation.man.enable = false;
}