Improve test-config script
This commit is contained in:
parent
ff5a6b4143
commit
6ec9d187b7
|
@ -64,7 +64,6 @@ in {
|
||||||
];
|
];
|
||||||
systemd.services = {
|
systemd.services = {
|
||||||
update-config = {
|
update-config = {
|
||||||
path = [pkgs.git pkgs.nix pkgs.openssh pkgs.nixos-rebuild pkgs.builders-configurator];
|
|
||||||
restartIfChanged = false;
|
restartIfChanged = false;
|
||||||
unitConfig.X-StopOnRemoval = false;
|
unitConfig.X-StopOnRemoval = false;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
|
@ -81,6 +80,7 @@ in {
|
||||||
"Control.Exception qualified as Exception"
|
"Control.Exception qualified as Exception"
|
||||||
"Data.ByteString.Char8 qualified as BSC"
|
"Data.ByteString.Char8 qualified as BSC"
|
||||||
];
|
];
|
||||||
|
bins = [pkgs.nix-diff pkgs.jq];
|
||||||
} ''
|
} ''
|
||||||
exitOnError = \msg action -> try action >>= \case
|
exitOnError = \msg action -> try action >>= \case
|
||||||
Left (_ :: Exception.IOException) -> say msg >> exitSuccess
|
Left (_ :: Exception.IOException) -> say msg >> exitSuccess
|
||||||
|
@ -90,15 +90,20 @@ in {
|
||||||
|
|
||||||
main = do
|
main = do
|
||||||
cd "/etc/nixos"
|
cd "/etc/nixos"
|
||||||
exitOnError "Cannot pull forward git config." do void do git ["pull", "--ff-only"]
|
void $ git ["pull", "--ff-only"]
|
||||||
current_commit <- BSC.strip <$> (exitOnError "Current system is from a dirty commit." do readFileBS "/run/current-system/config-commit")
|
|
||||||
new_system <- readlink "-f" "/var/cache/gc-links/test-config/nixos-configurations/hera" |> captureTrim
|
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|]
|
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])
|
is_direct_forward <- ("" ==) <$> (git ["log", "-n1", "--oneline", [i|^#{new_commit}|], decodeUtf8 current_commit])
|
||||||
when is_direct_forward do
|
when is_direct_forward switch
|
||||||
nix_env "-p" "/nix/var/nix/profiles/system" "--set" (decodeUtf8 new_system :: String)
|
|
||||||
exe ([i|#{new_system}/bin/switch-to-configuration|] :: String) "switch"
|
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
lib.getExe haskell_script;
|
lib.getExe haskell_script;
|
||||||
|
|
Loading…
Reference in a new issue