2019-07-25 21:35:59 +00:00
|
|
|
let
|
2019-08-02 03:17:00 +00:00
|
|
|
inherit (import ../lib)
|
2020-05-16 13:59:02 +00:00
|
|
|
pkgs writeHaskellScript home-manager unstable haskellList;
|
2019-08-02 03:17:00 +00:00
|
|
|
in rec {
|
2019-08-02 17:13:19 +00:00
|
|
|
haskellBody = name: commandline: ''
|
2019-07-25 21:35:59 +00:00
|
|
|
main = do
|
2020-05-16 13:59:02 +00:00
|
|
|
(configDir:hostname:args) <- getArgs
|
|
|
|
paths <- myNixPath $ toText configDir
|
2020-05-17 20:27:04 +00:00
|
|
|
say [i|Trying to build ${name} config for #{hostname} ...|]
|
2020-05-17 20:23:27 +00:00
|
|
|
hFlush stdout
|
2019-07-25 21:35:59 +00:00
|
|
|
${commandline}
|
2020-05-17 20:23:27 +00:00
|
|
|
say [i|Build of ${name} config for #{hostname} was successful.|]
|
2019-07-31 21:56:52 +00:00
|
|
|
'';
|
2020-05-16 13:59:02 +00:00
|
|
|
bins = [ pkgs.nix ];
|
2020-05-17 20:23:27 +00:00
|
|
|
imports = [ "System.IO (hFlush)" ];
|
2019-07-25 21:35:59 +00:00
|
|
|
|
|
|
|
test-system-config = writeHaskellScript {
|
|
|
|
name = "test-system-config";
|
2019-07-28 22:51:10 +00:00
|
|
|
inherit bins;
|
2020-05-17 20:23:27 +00:00
|
|
|
inherit imports;
|
2019-08-02 17:13:19 +00:00
|
|
|
} (haskellBody "system" ''
|
2020-05-16 13:59:02 +00:00
|
|
|
nix_build $ ["<nixpkgs/nixos>", "-A", "system"] ++ paths ++ ["-I", [i|nixos-config=#{configDir}/hosts/#{hostname}/configuration.nix|], "-o", [i|result-system-#{hostname}|]] ++ fmap toString args
|
2019-07-31 21:56:52 +00:00
|
|
|
'');
|
2019-07-25 21:35:59 +00:00
|
|
|
|
2019-07-26 13:54:30 +00:00
|
|
|
test-home-config = writeHaskellScript {
|
|
|
|
name = "test-home-config";
|
2019-07-28 22:51:10 +00:00
|
|
|
inherit bins;
|
2020-05-17 20:23:27 +00:00
|
|
|
inherit imports;
|
2019-08-02 17:13:19 +00:00
|
|
|
} (haskellBody "home" ''
|
2020-05-21 23:12:20 +00:00
|
|
|
nix_build $ paths ++ [[i|#{configDir}/home/target.nix|], "-A", hostname, "-o", [i|result-home-manager-#{hostname}|]] ++ fmap toString args
|
2019-07-31 21:56:52 +00:00
|
|
|
'');
|
2019-07-25 21:35:59 +00:00
|
|
|
|
|
|
|
repoSrc = "git@hera.m-0.eu:nixos-config";
|
2019-07-26 17:10:53 +00:00
|
|
|
configPath = "/etc/nixos";
|
2019-07-31 21:56:52 +00:00
|
|
|
systems = [ "apollo" "hera" ];
|
2020-05-16 14:59:12 +00:00
|
|
|
homes = pkgs.lib.attrNames (import ../home/modes.nix);
|
2019-07-31 21:56:52 +00:00
|
|
|
keys = [ "default" "apollo" "hera" ];
|
2019-08-02 03:17:00 +00:00
|
|
|
test-config = writeHaskellScript {
|
2019-08-02 04:07:54 +00:00
|
|
|
name = "test-config";
|
2020-04-26 13:29:23 +00:00
|
|
|
bins =
|
|
|
|
[ test-system-config test-home-config pkgs.git pkgs.niv pkgs.git-crypt ];
|
2020-01-19 16:40:02 +00:00
|
|
|
imports = [ "System.Directory (withCurrentDirectory)" ];
|
2019-07-25 21:35:59 +00:00
|
|
|
} ''
|
2019-07-31 21:56:52 +00:00
|
|
|
checkout :: IO FilePath
|
2020-01-19 16:40:02 +00:00
|
|
|
checkout = do
|
2020-05-16 15:39:04 +00:00
|
|
|
(decodeUtf8 -> repoDir) <- mktemp "-d" |> captureTrim
|
|
|
|
git "clone" "${repoSrc}" repoDir
|
|
|
|
pure repoDir
|
2019-07-26 15:31:26 +00:00
|
|
|
|
2019-07-31 21:56:52 +00:00
|
|
|
main = do
|
2020-01-19 16:40:02 +00:00
|
|
|
bump <- (maybe False (== "bump") . listToMaybe) <$> getArgs
|
2020-05-16 15:39:04 +00:00
|
|
|
bracket checkout (rm "-rf") $ \repoDir -> do
|
|
|
|
withCurrentDirectory repoDir $ do
|
2019-07-31 21:56:52 +00:00
|
|
|
mapM_ (\x -> git_crypt "unlock" ([i|${configPath}/.git/git-crypt/keys/#{x}|] :: String)) ${
|
2019-08-13 22:24:38 +00:00
|
|
|
haskellList keys
|
2019-07-31 21:56:52 +00:00
|
|
|
}
|
2019-08-02 03:17:00 +00:00
|
|
|
when bump $ ignoreFailure $ niv "update"
|
2020-05-16 15:39:04 +00:00
|
|
|
changed <- (mempty /=) <$> (git "-C" repoDir "status" "--porcelain" |> captureTrim)
|
2019-07-31 21:56:52 +00:00
|
|
|
when changed $ do
|
2020-05-16 16:00:14 +00:00
|
|
|
git "-C" repoDir "config" "user.email" "maralorn@maralorn.de"
|
|
|
|
git "-C" repoDir "config" "user.name" "maralorn (nix-auto-updater)"
|
|
|
|
git "-C" repoDir "commit" "-am" "Update dependencies with niv"
|
|
|
|
git "-C" repoDir "push" "-f" "origin" "master:version-bump"
|
2020-05-16 15:39:04 +00:00
|
|
|
mapM_ (test_system_config repoDir) ${haskellList systems}
|
|
|
|
mapM_ (test_home_config repoDir) ${haskellList homes}
|
2019-08-18 09:18:51 +00:00
|
|
|
when changed $ do
|
2020-05-16 16:00:14 +00:00
|
|
|
git "-C" repoDir "push" "origin" "master:master"
|
2019-07-31 21:56:52 +00:00
|
|
|
'';
|
2019-08-02 03:17:00 +00:00
|
|
|
}
|