From 6ec9d187b71ba19b72717e38bc2c3e56b3872eaa Mon Sep 17 00:00:00 2001 From: maralorn Date: Mon, 6 Mar 2023 23:18:36 +0100 Subject: [PATCH] Improve test-config script --- nixos/roles/laminar/test-config.nix | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/nixos/roles/laminar/test-config.nix b/nixos/roles/laminar/test-config.nix index 3ca7739c..5c31fd32 100644 --- a/nixos/roles/laminar/test-config.nix +++ b/nixos/roles/laminar/test-config.nix @@ -64,7 +64,6 @@ in { ]; systemd.services = { update-config = { - path = [pkgs.git pkgs.nix pkgs.openssh pkgs.nixos-rebuild pkgs.builders-configurator]; restartIfChanged = false; unitConfig.X-StopOnRemoval = false; serviceConfig = { @@ -81,6 +80,7 @@ in { "Control.Exception qualified as Exception" "Data.ByteString.Char8 qualified as BSC" ]; + bins = [pkgs.nix-diff pkgs.jq]; } '' exitOnError = \msg action -> try action >>= \case Left (_ :: Exception.IOException) -> say msg >> exitSuccess @@ -90,15 +90,20 @@ in { main = do cd "/etc/nixos" - exitOnError "Cannot pull forward git config." do void do git ["pull", "--ff-only"] - current_commit <- BSC.strip <$> (exitOnError "Current system is from a dirty commit." do readFileBS "/run/current-system/config-commit") + void $ git ["pull", "--ff-only"] new_system <- readlink "-f" "/var/cache/gc-links/test-config/nixos-configurations/hera" |> captureTrim + old_system <- readlink "-f" "/run/current-system" |> captureTrim + when (new_system == old_system) do say "No changes."; exitSuccess + let switch = do + nix_env "-p" "/nix/var/nix/profiles/system" "--set" (decodeUtf8 new_system :: String) + exe ([i|#{new_system}/bin/switch-to-configuration|] :: String) "switch" + exitSuccess + diff_is_small <- (== "[]") <$> (nix_diff "--json" [new_system, "/run/current-system"] |> jq ".inputsDiff.inputDerivationDiffs" |> captureTrim) + when diff_is_small switch + current_commit <- BSC.strip <$> (exitOnError "Current system is from a dirty commit." do readFileBS "/run/current-system/config-commit") new_commit <- BSC.strip <$> readFileBS [i|#{new_system}/config-commit|] - when (current_commit == new_commit) do say "No changes." >> exitSuccess is_direct_forward <- ("" ==) <$> (git ["log", "-n1", "--oneline", [i|^#{new_commit}|], decodeUtf8 current_commit]) - when is_direct_forward do - nix_env "-p" "/nix/var/nix/profiles/system" "--set" (decodeUtf8 new_system :: String) - exe ([i|#{new_system}/bin/switch-to-configuration|] :: String) "switch" + when is_direct_forward switch ''; in lib.getExe haskell_script;