From 56cf89d9262dc95a889675d5a067959eb114b14c Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra Date: Wed, 27 Aug 2025 22:00:04 +0200 Subject: [PATCH] split tests to allow running the faster ssh test separately --- .forgejo/workflows/ci.yaml | 10 +++- deployment/check/basic/default.nix | 7 ++- deployment/check/cli/default.nix | 1 + deployment/check/common/nixosTest.nix | 2 +- .../check/data-model-nixops4/constants.nix | 9 ++++ .../check/data-model-nixops4/default.nix | 22 ++++++++ .../flake-under-test.nix | 2 +- .../check/data-model-nixops4/nixosTest.nix | 52 +++++++++++++++++++ .../constants.nix | 1 - .../default.nix | 0 .../nixosTest.nix | 21 ++------ deployment/check/panel/default.nix | 1 + deployment/data-model.nix | 2 +- deployment/flake-part.nix | 7 ++- 14 files changed, 112 insertions(+), 25 deletions(-) create mode 100644 deployment/check/data-model-nixops4/constants.nix create mode 100644 deployment/check/data-model-nixops4/default.nix rename deployment/check/{data-model => data-model-nixops4}/flake-under-test.nix (85%) create mode 100644 deployment/check/data-model-nixops4/nixosTest.nix rename deployment/check/{data-model => data-model-ssh}/constants.nix (88%) rename deployment/check/{data-model => data-model-ssh}/default.nix (100%) rename deployment/check/{data-model => data-model-ssh}/nixosTest.nix (83%) diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index 268c10be..9b3495c5 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -64,11 +64,17 @@ jobs: - uses: actions/checkout@v4 - run: nix build .#checks.x86_64-linux.deployment-panel -L - check-deployment-model: + check-deployment-model-ssh: runs-on: native steps: - uses: actions/checkout@v4 - - run: nix build .#checks.x86_64-linux.deployment-model -L + - run: nix build .#checks.x86_64-linux.deployment-model-ssh -L + + check-deployment-model-nixops4: + runs-on: native + steps: + - uses: actions/checkout@v4 + - run: nix build .#checks.x86_64-linux.deployment-model-nixops4 -L ## NOTE: NixOps4 does not provide a good “dry run” mode, so we instead check ## proxies for resources, namely whether their `.#vmOptions.` and diff --git a/deployment/check/basic/default.nix b/deployment/check/basic/default.nix index 6479b6be..176defce 100644 --- a/deployment/check/basic/default.nix +++ b/deployment/check/basic/default.nix @@ -10,5 +10,10 @@ runNixOSTest { ./nixosTest.nix ]; _module.args = { inherit inputs sources; }; - inherit (import ./constants.nix) targetMachines pathToRoot pathFromRoot; + inherit (import ./constants.nix) + targetMachines + pathToRoot + pathFromRoot + useFlake + ; } diff --git a/deployment/check/cli/default.nix b/deployment/check/cli/default.nix index 03c1379f..64448280 100644 --- a/deployment/check/cli/default.nix +++ b/deployment/check/cli/default.nix @@ -15,5 +15,6 @@ runNixOSTest { pathToRoot pathFromRoot enableAcme + useFlake ; } diff --git a/deployment/check/common/nixosTest.nix b/deployment/check/common/nixosTest.nix index 574621c4..93bd3fef 100644 --- a/deployment/check/common/nixosTest.nix +++ b/deployment/check/common/nixosTest.nix @@ -163,7 +163,7 @@ in '')} ${ - if true then + if config.useFlake then '' ## NOTE: This is super slow. It could probably be optimised in Nix, for ## instance by allowing to grab things directly from the host's store. diff --git a/deployment/check/data-model-nixops4/constants.nix b/deployment/check/data-model-nixops4/constants.nix new file mode 100644 index 00000000..548d6605 --- /dev/null +++ b/deployment/check/data-model-nixops4/constants.nix @@ -0,0 +1,9 @@ +{ + targetMachines = [ + "nixops4" + ]; + pathToRoot = ../../..; + pathFromRoot = ./.; + enableAcme = true; + useFlake = true; +} diff --git a/deployment/check/data-model-nixops4/default.nix b/deployment/check/data-model-nixops4/default.nix new file mode 100644 index 00000000..b735cd53 --- /dev/null +++ b/deployment/check/data-model-nixops4/default.nix @@ -0,0 +1,22 @@ +{ + runNixOSTest, + inputs, + sources, +}: + +runNixOSTest { + imports = [ + ../../data-model.nix + ../../function.nix + ../common/nixosTest.nix + ./nixosTest.nix + ]; + _module.args = { inherit inputs sources; }; + inherit (import ./constants.nix) + targetMachines + pathToRoot + pathFromRoot + enableAcme + useFlake + ; +} diff --git a/deployment/check/data-model/flake-under-test.nix b/deployment/check/data-model-nixops4/flake-under-test.nix similarity index 85% rename from deployment/check/data-model/flake-under-test.nix rename to deployment/check/data-model-nixops4/flake-under-test.nix index 60b0ee38..6a4ce06c 100644 --- a/deployment/check/data-model/flake-under-test.nix +++ b/deployment/check/data-model-nixops4/flake-under-test.nix @@ -20,7 +20,7 @@ (import ./deployment/check/common/data-model.nix { inherit system inputs; config = { - inherit (import ./deployment/check/data-model/constants.nix) pathToRoot pathFromRoot; + inherit (import ./deployment/check/data-model-nixops4/constants.nix) pathToRoot pathFromRoot; nodeName = "nixops4"; }; })."nixops4-deployment".nixops4; diff --git a/deployment/check/data-model-nixops4/nixosTest.nix b/deployment/check/data-model-nixops4/nixosTest.nix new file mode 100644 index 00000000..5a4499f3 --- /dev/null +++ b/deployment/check/data-model-nixops4/nixosTest.nix @@ -0,0 +1,52 @@ +{ + lib, + config, + inputs, + ... +}: +{ + _class = "nixosTest"; + imports = [ + ../common/data-model-options.nix + ]; + + name = "deployment-model"; + sourceFileset = lib.fileset.unions [ + ../../data-model.nix + ../../function.nix + ../common/data-model.nix + ../common/data-model-options.nix + ./constants.nix + (config.pathToCwd + "/flake-under-test.nix") + ]; + + nodes.deployer = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + inputs.nixops4.packages.${system}.default + jq + ]; + + # FIXME: sad times + system.extraDependencies = with pkgs; [ + jq + jq.inputDerivation + ]; + + system.extraDependenciesFromModule = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + hello + ]; + }; + }; + + extraTestScript = '' + with subtest("nixops4"): + nixops4.fail("hello 1>&2") + deployer.succeed("nixops4 apply check-deployment-model --show-trace --verbose --no-interactive 1>&2") + nixops4.succeed("su - operator -c hello 1>&2") + ''; +} diff --git a/deployment/check/data-model/constants.nix b/deployment/check/data-model-ssh/constants.nix similarity index 88% rename from deployment/check/data-model/constants.nix rename to deployment/check/data-model-ssh/constants.nix index 9cc81ea9..ef212896 100644 --- a/deployment/check/data-model/constants.nix +++ b/deployment/check/data-model-ssh/constants.nix @@ -1,7 +1,6 @@ { targetMachines = [ "ssh" - "nixops4" ]; pathToRoot = ../../..; pathFromRoot = ./.; diff --git a/deployment/check/data-model/default.nix b/deployment/check/data-model-ssh/default.nix similarity index 100% rename from deployment/check/data-model/default.nix rename to deployment/check/data-model-ssh/default.nix diff --git a/deployment/check/data-model/nixosTest.nix b/deployment/check/data-model-ssh/nixosTest.nix similarity index 83% rename from deployment/check/data-model/nixosTest.nix rename to deployment/check/data-model-ssh/nixosTest.nix index a10c32e6..dbc79fbf 100644 --- a/deployment/check/data-model/nixosTest.nix +++ b/deployment/check/data-model-ssh/nixosTest.nix @@ -6,18 +6,18 @@ ... }: let - inherit (import ./constants.nix) pathToRoot; + inherit (import ./constants.nix) pathToRoot pathFromRoot; + inherit (pkgs) system; escapedJson = v: lib.replaceStrings [ "\"" ] [ "\\\\\"" ] (lib.strings.toJSON v); deployment-config = { - inherit (import ./constants.nix) pathToRoot pathFromRoot; + inherit pathToRoot pathFromRoot; inherit (config) enableAcme; acmeNodeIP = if config.enableAcme then config.nodes.acme.networking.primaryIPAddress else null; nodeName = "ssh"; }; inherit ((import ../common/data-model.nix { - inherit (pkgs) system; - inherit inputs; + inherit system inputs; config = deployment-config; })."ssh-deployment".ssh-host.ssh ) @@ -39,23 +39,15 @@ in ../common/data-model.nix ../common/data-model-options.nix ./constants.nix - (config.pathToCwd + "/flake-under-test.nix") ]; nodes.deployer = { pkgs, ... }: { environment.systemPackages = with pkgs; [ - inputs.nixops4.packages.${system}.default jq ]; - # FIXME: sad times - system.extraDependencies = with pkgs; [ - jq - jq.inputDerivation - ]; - system.extraDependenciesFromModule = { pkgs, ... }: { @@ -66,11 +58,6 @@ in }; extraTestScript = '' - with subtest("nixops4"): - nixops4.fail("hello 1>&2") - deployer.succeed("nixops4 apply check-deployment-model --show-trace --verbose --no-interactive 1>&2") - nixops4.succeed("su - operator -c hello 1>&2") - with subtest("ssh: Check the status before deployment"): ssh.fail("hello 1>&2") diff --git a/deployment/check/panel/default.nix b/deployment/check/panel/default.nix index 03c1379f..64448280 100644 --- a/deployment/check/panel/default.nix +++ b/deployment/check/panel/default.nix @@ -15,5 +15,6 @@ runNixOSTest { pathToRoot pathFromRoot enableAcme + useFlake ; } diff --git a/deployment/data-model.nix b/deployment/data-model.nix index 0f65127d..6d5f745f 100644 --- a/deployment/data-model.nix +++ b/deployment/data-model.nix @@ -70,7 +70,7 @@ let }; deployment-type = attrTag { ssh-host = mkOption { - description = "A Terraform deployment by SSH to update a single existing NixOS host."; + description = "A deployment by SSH to update a single existing NixOS host."; type = submodule { options = { inherit nixos-configuration; diff --git a/deployment/flake-part.nix b/deployment/flake-part.nix index c22371bc..b2c9ff89 100644 --- a/deployment/flake-part.nix +++ b/deployment/flake-part.nix @@ -27,7 +27,12 @@ inherit inputs sources; }; - deployment-model = import ./check/data-model { + deployment-model-ssh = import ./check/data-model-ssh { + inherit (pkgs.testers) runNixOSTest; + inherit inputs sources; + }; + + deployment-model-nixops4 = import ./check/data-model-nixops4 { inherit (pkgs.testers) runNixOSTest; inherit inputs sources; };