2020-09-10 08:55:55 +02:00
|
|
|
{ pkgs ? import <nixpkgs> { }
|
2021-12-01 08:13:52 +01:00
|
|
|
, release ? "21.11"
|
2020-09-10 08:55:55 +02:00
|
|
|
}:
|
2020-09-08 21:28:58 +02:00
|
|
|
let
|
|
|
|
|
inherit (pkgs) lib;
|
|
|
|
|
|
2020-09-10 08:55:55 +02:00
|
|
|
dependencies = {
|
2020-09-08 21:28:58 +02:00
|
|
|
nixpkgs = {
|
2020-09-10 08:55:55 +02:00
|
|
|
ref = "refs/heads/nixos-${release}";
|
2020-10-24 13:28:45 +02:00
|
|
|
url = "https://github.com/NixOS/nixpkgs.git";
|
2020-09-08 22:01:22 +02:00
|
|
|
path = toString .versions/nixpkgs.json;
|
2020-09-08 21:28:58 +02:00
|
|
|
};
|
2021-05-03 14:32:34 +02:00
|
|
|
nixpkgs-unstable = {
|
|
|
|
|
ref = "refs/heads/master";
|
|
|
|
|
url = "https://github.com/NixOS/nixpkgs.git";
|
|
|
|
|
path = toString .versions/nixpkgs-unstable.json;
|
|
|
|
|
};
|
2021-12-28 14:48:09 +01:00
|
|
|
nix-writers = {
|
|
|
|
|
ref = "refs/heads/master";
|
|
|
|
|
url = "https://cgit.krebsco.de/nix-writers";
|
|
|
|
|
path = toString .versions/nix-writers.json;
|
|
|
|
|
};
|
2020-09-08 21:28:58 +02:00
|
|
|
home-manager = {
|
2020-09-10 08:55:55 +02:00
|
|
|
ref = "refs/heads/release-${release}";
|
2021-02-07 18:45:01 +01:00
|
|
|
url = "https://github.com/nix-community/home-manager.git";
|
2020-09-08 22:01:22 +02:00
|
|
|
path = toString .versions/home-manager.json;
|
2020-09-08 21:28:58 +02:00
|
|
|
};
|
|
|
|
|
krops = {
|
2021-12-30 03:01:26 +01:00
|
|
|
ref = "refs/tags/1.26.2";
|
2020-09-08 21:28:58 +02:00
|
|
|
url = "https://cgit.krebsco.de/krops";
|
2020-10-05 21:27:20 +02:00
|
|
|
path = toString .versions/krops.json;
|
2020-09-08 21:28:58 +02:00
|
|
|
};
|
|
|
|
|
stockholm = {
|
|
|
|
|
ref = "refs/heads/master";
|
2021-12-01 17:38:47 +01:00
|
|
|
url = "https://cgit.lassul.us/stockholm";
|
2020-09-08 22:01:22 +02:00
|
|
|
path = toString .versions/stockholm.json;
|
2020-09-08 21:28:58 +02:00
|
|
|
};
|
2020-10-18 17:27:43 +02:00
|
|
|
retiolum = {
|
|
|
|
|
ref = "refs/heads/master";
|
|
|
|
|
url = "https://github.com/krebs/retiolum";
|
|
|
|
|
path = toString .versions/retiolum.json;
|
|
|
|
|
};
|
2021-06-02 10:27:43 +02:00
|
|
|
nixpkgs-mozilla = {
|
|
|
|
|
ref = "refs/heads/master";
|
|
|
|
|
url = "https://github.com/mozilla/nixpkgs-mozilla";
|
|
|
|
|
path = toString .versions/nixpkgs-mozilla.json;
|
|
|
|
|
};
|
2020-09-08 21:28:58 +02:00
|
|
|
};
|
|
|
|
|
in pkgs.mkShell {
|
2021-05-04 09:55:10 +02:00
|
|
|
buildInputs = [
|
|
|
|
|
(let
|
|
|
|
|
updateCommand = pkgs.writers.writeDash "niveum-update-one" ''
|
|
|
|
|
[ $# -eq 1 ] || {
|
|
|
|
|
echo "Please provide a dependency to update." >&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
case "$1" in
|
|
|
|
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: dependency: ''
|
|
|
|
|
${name})
|
|
|
|
|
${pkgs.nix-prefetch-git}/bin/nix-prefetch-git --url "${dependency.url}" --rev "${dependency.ref}" > "${dependency.path}";;
|
|
|
|
|
'') dependencies)}
|
|
|
|
|
esac
|
|
|
|
|
'';
|
|
|
|
|
in pkgs.writers.writeDashBin "niveum-update" ''
|
|
|
|
|
if [ $# -gt 0 ]; then
|
|
|
|
|
dependencies="$@"
|
|
|
|
|
else
|
|
|
|
|
dependencies="${lib.concatStringsSep " " (lib.attrNames dependencies)}"
|
|
|
|
|
fi
|
2021-12-17 19:02:22 +01:00
|
|
|
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${updateCommand} '{1}' ::: $dependencies
|
2021-05-04 09:55:10 +02:00
|
|
|
'')
|
2020-09-08 22:01:22 +02:00
|
|
|
|
2020-09-08 21:28:58 +02:00
|
|
|
(let
|
|
|
|
|
deployCommand = pkgs.writers.writeDash "niveum-deploy-one" ''
|
2021-06-13 09:31:05 +02:00
|
|
|
${pkgs.git}/bin/git diff $(${pkgs.openssh}/bin/ssh "$1" cat /etc/niveum/version)
|
2020-09-08 21:28:58 +02:00
|
|
|
eval "$(${pkgs.nix}/bin/nix-build --no-out-link "${toString ./.}/deploy.nix" -A "$1")"
|
|
|
|
|
'';
|
|
|
|
|
in pkgs.writers.writeDashBin "niveum-deploy" ''
|
2021-09-17 15:26:55 +02:00
|
|
|
deploy() {
|
2021-04-28 16:10:50 +02:00
|
|
|
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${deployCommand} '{1}' ::: "$@"
|
2021-09-17 15:26:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if [ -z "$(${pkgs.git}/bin/git status --porcelain)" ]; then
|
|
|
|
|
deploy "$@"
|
2021-04-28 16:10:50 +02:00
|
|
|
else
|
2021-09-17 15:26:55 +02:00
|
|
|
if [ "$1" = --force ]; then
|
|
|
|
|
shift
|
|
|
|
|
deploy "$@"
|
|
|
|
|
else
|
|
|
|
|
echo Working directory is dirty. Not deploying.
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2021-04-28 16:10:50 +02:00
|
|
|
fi
|
2020-09-08 21:28:58 +02:00
|
|
|
'')
|
|
|
|
|
|
2021-05-04 09:55:10 +02:00
|
|
|
(let
|
|
|
|
|
statusCommand = pkgs.writers.writeDash "niveum-status-one" ''
|
|
|
|
|
[ $# -eq 1 ] || {
|
|
|
|
|
echo "Please provide a niveum system hostname." >&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
2020-09-08 21:28:58 +02:00
|
|
|
|
2021-05-04 09:55:10 +02:00
|
|
|
hostname="$1"
|
|
|
|
|
version_file=/etc/niveum/version
|
2020-09-08 21:28:58 +02:00
|
|
|
|
2021-05-04 09:55:10 +02:00
|
|
|
if commit_id="$(${pkgs.coreutils}/bin/timeout 2s ${pkgs.openssh}/bin/ssh "$hostname" cat $version_file 2>/dev/null)"; then
|
|
|
|
|
${pkgs.git}/bin/git log -1 --oneline "$commit_id"
|
2020-09-08 21:28:58 +02:00
|
|
|
else
|
2021-05-04 09:55:10 +02:00
|
|
|
echo offline
|
2020-09-08 21:28:58 +02:00
|
|
|
fi
|
2021-05-04 09:55:10 +02:00
|
|
|
'';
|
|
|
|
|
in pkgs.writers.writeDashBin "niveum-status" ''
|
|
|
|
|
if [ $# -gt 0 ]; then
|
|
|
|
|
systems="$@"
|
|
|
|
|
else
|
|
|
|
|
systems="$(ls ${toString ./.}/systems)"
|
|
|
|
|
fi
|
2021-12-17 19:02:22 +01:00
|
|
|
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${statusCommand} '{1}' ::: $systems
|
2020-09-08 21:28:58 +02:00
|
|
|
'')
|
|
|
|
|
];
|
|
|
|
|
}
|