Fix update script
This commit is contained in:
parent
8f1baa9f12
commit
03b56d1b8d
|
@ -69,6 +69,6 @@
|
||||||
]
|
]
|
||||||
++ import ../overlays {inherit lib;};
|
++ import ../overlays {inherit lib;};
|
||||||
};
|
};
|
||||||
nixosConfigurations = lib.genAttrs ["zeus" "apollo" "hera" "fluffy"] makeSystem;
|
nixosConfigurations = lib.genAttrs (builtins.attrNames (builtins.readDir ./machines)) makeSystem;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ import Say
|
||||||
import Shh
|
import Shh
|
||||||
import System.Environment
|
import System.Environment
|
||||||
|
|
||||||
load Absolute ["git", "niv"]
|
load Absolute ["git", "nix"]
|
||||||
paths :: [Text]
|
paths :: [Text]
|
||||||
paths =
|
paths =
|
||||||
$$( bindCode (runIO pathBinsAbs) \rawPaths ->
|
$$( bindCode (runIO pathBinsAbs) \rawPaths ->
|
||||||
|
@ -32,11 +32,11 @@ repo = "git@hera.m-0.eu:nixos-config"
|
||||||
main = do
|
main = do
|
||||||
git "clone" repo "."
|
git "clone" repo "."
|
||||||
setEnv "PATH" . toString $ Text.intercalate ":" paths
|
setEnv "PATH" . toString $ Text.intercalate ":" paths
|
||||||
ignoreFailure $ niv "update"
|
ignoreFailure $ nix "flake" "update"
|
||||||
changed <- (mempty /=) <$> (git "status" "--porcelain" |> captureTrim)
|
changed <- (mempty /=) <$> (git "status" "--porcelain" |> captureTrim)
|
||||||
when changed $ do
|
when changed $ do
|
||||||
git "config" "user.email" "maralorn@maralorn.de"
|
git "config" "user.email" "maralorn@maralorn.de"
|
||||||
git "config" "user.name" "maralorn (nix-auto-updater)"
|
git "config" "user.name" "maralorn (nix-auto-updater)"
|
||||||
git "commit" "-am" "Update dependencies with niv"
|
git "commit" "-am" "Update flake dependencies"
|
||||||
git "push" "-f" "origin" "HEAD:niv-bump"
|
git "push" "-f" "origin" "HEAD:niv-bump"
|
||||||
unless changed $ say "No updates in any niv source. Doing nothing."
|
unless changed $ say "No flake updates. Doing nothing."
|
||||||
|
|
|
@ -33,6 +33,7 @@ main = do
|
||||||
git "checkout" (toString branch)
|
git "checkout" (toString branch)
|
||||||
say "Running checks"
|
say "Running checks"
|
||||||
nix "flake" "check"
|
nix "flake" "check"
|
||||||
|
nix ["build", ".#checks.x86_64-linux.system-checks", "-o", "/var/cache/gc-links/test-config"]
|
||||||
say "Checks succeeded"
|
say "Checks succeeded"
|
||||||
when (branch == "main") $ do
|
when (branch == "main") $ do
|
||||||
say [i|Deploying new config to localhost.|]
|
say [i|Deploying new config to localhost.|]
|
||||||
|
|
|
@ -4,119 +4,48 @@
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
bins = lib.attrValues {inherit (pkgs) git nix niv gnutar xz gzip openssh laminar;};
|
bins = lib.attrValues {inherit (pkgs) git nix gnutar xz gzip openssh laminar;};
|
||||||
standardPath = lib.makeBinPath bins;
|
standardPath = lib.makeBinPath bins;
|
||||||
imports = ["Control.Exception (onException)"];
|
|
||||||
haskellBody = name: drv: ''
|
|
||||||
myTrim = Text.dropAround ('"' ==) . decodeUtf8 . trim
|
|
||||||
|
|
||||||
main = do
|
|
||||||
(configDir:hostname:remote:_) <- getArgs
|
|
||||||
let flags = if remote == "remote" then ["--builders", "@/etc/nix/machines"] else []
|
|
||||||
(myTrim -> homeManagerChannel) <- nix_instantiate "--show-trace" "--eval" "-E" ([i|(import #{configDir}/channels.nix).#{hostname}.home-manager-channel|] :: String) |> captureTrim
|
|
||||||
(myTrim -> nixpkgsChannel) <- nix_instantiate "--show-trace" "--eval" "-E" ([i|(import #{configDir}/channels.nix).#{hostname}.nixpkgs-channel|] :: String) |> captureTrim
|
|
||||||
paths <- aNixPath homeManagerChannel nixpkgsChannel (toText configDir)
|
|
||||||
say [i|Trying to build ${name} config for #{hostname}.|]
|
|
||||||
nix_build $ ["--show-trace", "-o", [i|/var/cache/gc-links/${name}-config-#{hostname}|]] ++ flags ++ ${drv}
|
|
||||||
say [i|Build of ${name} config for #{hostname} was successful.|]
|
|
||||||
'';
|
|
||||||
test-system-config =
|
|
||||||
pkgs.writeHaskellScript
|
|
||||||
{
|
|
||||||
name = "test-system-config";
|
|
||||||
inherit bins;
|
|
||||||
inherit imports;
|
|
||||||
}
|
|
||||||
(
|
|
||||||
haskellBody "system" ''
|
|
||||||
buildSystemParams ++ paths ++ ["-I", [i|nixos-config=#{configDir}/nixos/machines/#{hostname}/configuration.nix|]]''
|
|
||||||
);
|
|
||||||
|
|
||||||
test-home-config =
|
|
||||||
pkgs.writeHaskellScript
|
|
||||||
{
|
|
||||||
name = "test-home-config";
|
|
||||||
inherit bins;
|
|
||||||
inherit imports;
|
|
||||||
}
|
|
||||||
(
|
|
||||||
haskellBody "home"
|
|
||||||
''paths ++ [[i|#{configDir}/home-manager/target.nix|], "-A", hostname]''
|
|
||||||
);
|
|
||||||
common = ''
|
|
||||||
set -e
|
|
||||||
export PATH=${standardPath}:$PATH
|
|
||||||
export NIX_PATH="/etc/nix-path:nixos-config=/etc/nixos/configuration.nix"
|
|
||||||
'';
|
|
||||||
checkout = ''
|
|
||||||
git clone git@hera.m-0.eu:nixos-config . --config advice.detachedHead=false
|
|
||||||
git checkout origin/$BRANCH
|
|
||||||
git show -q
|
|
||||||
REPODIR=.
|
|
||||||
'';
|
|
||||||
systems = builtins.attrNames (builtins.readDir ../../machines);
|
systems = builtins.attrNames (builtins.readDir ../../machines);
|
||||||
homes = lib.attrNames (import ../../../home-manager/machines.nix);
|
homes = lib.attrNames (import ../../../home-manager/machines.nix);
|
||||||
mkHomeJob = host: {
|
|
||||||
name = "home-config-${host}.run";
|
|
||||||
value = pkgs.writeShellScript "test-${host}-home-config.run" ''
|
|
||||||
${common}
|
|
||||||
${checkout}
|
|
||||||
${test-home-config}/bin/test-home-config $REPODIR ${host} "remote"
|
|
||||||
git -C $REPODIR submodule update --init
|
|
||||||
${test-home-config}/bin/test-home-config $REPODIR ${host} ""
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
mkSystemJob = host: {
|
|
||||||
name = "system-config-${host}.run";
|
|
||||||
value = pkgs.writeShellScript "test-${host}-system-config.run" ''
|
|
||||||
${common}
|
|
||||||
${checkout}
|
|
||||||
${test-system-config}/bin/test-system-config $REPODIR ${host} "remote"
|
|
||||||
git -C $REPODIR submodule update --init
|
|
||||||
${test-system-config}/bin/test-system-config $REPODIR ${host} ""
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
deployCommand = "${
|
deployCommand = "${
|
||||||
pkgs.writeShellScript "deploy-system-config"
|
pkgs.writeShellScript "deploy-system-config"
|
||||||
"${pkgs.systemd}/bin/systemctl start --no-block update-config"
|
"${pkgs.systemd}/bin/systemctl start --no-block update-config"
|
||||||
}";
|
}";
|
||||||
in {
|
in {
|
||||||
services.laminar.cfgFiles.jobs =
|
services.laminar.cfgFiles.jobs = {
|
||||||
{
|
"test-config.run" = let
|
||||||
"test-config.run" = let
|
test-config =
|
||||||
test-config =
|
pkgs.writeHaskell "test-config"
|
||||||
pkgs.writeHaskell "test-config"
|
{
|
||||||
{
|
libraries = builtins.attrValues pkgs.myHaskellScriptPackages;
|
||||||
libraries = builtins.attrValues pkgs.myHaskellScriptPackages;
|
ghcEnv = {
|
||||||
ghcEnv = {
|
HOMES = lib.concatStringsSep " " homes;
|
||||||
HOMES = lib.concatStringsSep " " homes;
|
SYSTEMS = lib.concatStringsSep " " systems;
|
||||||
SYSTEMS = lib.concatStringsSep " " systems;
|
DEPLOY = deployCommand;
|
||||||
DEPLOY = deployCommand;
|
PATH = "${standardPath}:$PATH";
|
||||||
PATH = "${standardPath}:$PATH";
|
};
|
||||||
};
|
ghcArgs = ["-threaded"];
|
||||||
ghcArgs = ["-threaded"];
|
}
|
||||||
}
|
(builtins.readFile ./test-config.hs);
|
||||||
(builtins.readFile ./test-config.hs);
|
in
|
||||||
in
|
pkgs.writeShellScript "test-config" ''
|
||||||
pkgs.writeShellScript "test-config" ''
|
FLAGS="" PATH=${standardPath}:$PATH ${test-config}
|
||||||
FLAGS="" PATH=${standardPath}:$PATH ${test-config}
|
'';
|
||||||
'';
|
"bump-config.run" = let
|
||||||
"bump-config.run" = let
|
bump-config =
|
||||||
bump-config =
|
pkgs.writeHaskell "bump-config"
|
||||||
pkgs.writeHaskell "bump-config"
|
{
|
||||||
{
|
libraries = builtins.attrValues pkgs.myHaskellScriptPackages;
|
||||||
libraries = builtins.attrValues pkgs.myHaskellScriptPackages;
|
ghcEnv.PATH = "${standardPath}:$PATH";
|
||||||
ghcEnv.PATH = "${standardPath}:$PATH";
|
ghcArgs = ["-threaded"];
|
||||||
ghcArgs = ["-threaded"];
|
}
|
||||||
}
|
(builtins.readFile ./bump-config.hs);
|
||||||
(builtins.readFile ./bump-config.hs);
|
in
|
||||||
in
|
pkgs.writeShellScript "bump-config" ''
|
||||||
pkgs.writeShellScript "bump-config" ''
|
PATH=${standardPath}:$PATH ${bump-config}
|
||||||
PATH=${standardPath}:$PATH ${bump-config}
|
'';
|
||||||
'';
|
};
|
||||||
}
|
|
||||||
// lib.listToAttrs (map mkHomeJob homes)
|
|
||||||
// lib.listToAttrs (map mkSystemJob homes);
|
|
||||||
security.sudo.extraRules = let
|
security.sudo.extraRules = let
|
||||||
allowedCommands = [deployCommand];
|
allowedCommands = [deployCommand];
|
||||||
in [
|
in [
|
||||||
|
|
Loading…
Reference in a new issue