forked from fediversity/fediversity
57 lines
2 KiB
Bash
Executable file
57 lines
2 KiB
Bash
Executable file
#! /usr/bin/env bash
|
|
set -xeuo pipefail
|
|
declare username host system module args deployment_name deployment_type args #key_file root_path
|
|
|
|
# DEPLOY
|
|
sshOpts=(
|
|
-o BatchMode=yes
|
|
-o StrictHostKeyChecking=no
|
|
# TODO set key for production
|
|
# ${if key-file == null then "" else "-i ${key-file}"}
|
|
# NOTE the below options are for tests
|
|
-o ConnectTimeout=1
|
|
-o ServerAliveInterval=1
|
|
)
|
|
destination="$username@$host"
|
|
|
|
# echo "$cwd/deployment"
|
|
# ls "$cwd/deployment"
|
|
|
|
# echo "$args"
|
|
root=$(echo "$args" | jq -r '.config.pathToRoot')
|
|
# echo "$root/deployment/nixos.nix"
|
|
# ls "$root/deployment/nixos.nix"
|
|
|
|
# FIXME: ensure [[ $root_path == $root ]] so i could just rely on stuff from /deployment/data-model.nix
|
|
# cwd=$root_path
|
|
cwd=$root
|
|
|
|
command=(nix-instantiate --show-trace --expr "
|
|
import $cwd/deployment/nixos.nix {
|
|
system = \"$system\";
|
|
configuration = (import \"$cwd/$module\" (builtins.fromJSON ''$args'')).$deployment_name.$deployment_type.nixos-configuration;
|
|
}
|
|
")
|
|
|
|
# INSTANTIATE
|
|
# instantiate the config in /nix/store
|
|
"${command[@]}" -A out_path
|
|
|
|
# get the realized derivation to deploy
|
|
# "${command[@]}" --show-trace --eval --strict --json | jq -r '.command')"
|
|
outPath=$(nix-store --realize "$("${command[@]}" --show-trace --eval --strict --json | jq -r '.drv_path')")
|
|
# deploy the config by nix-copy-closure
|
|
NIX_SSHOPTS="${sshOpts[*]}" nix-copy-closure --to "$destination" "$outPath" --gzip --use-substitutes
|
|
# switch the remote host to the config
|
|
# NOTE checks here are for tests - in production time-outs could be a real thing, rather than indicator of success!
|
|
# shellcheck disable=SC2029
|
|
ssh "${sshOpts[@]}" "$destination" "nix-env --profile /nix/var/nix/profiles/system --set $outPath"
|
|
# shellcheck disable=SC2029
|
|
output=$(ssh "${sshOpts[@]}" "$destination" "nohup $outPath/bin/switch-to-configuration switch &" 2>&1) || echo "status code: $?"
|
|
echo "output: $output"
|
|
if [[ $output != *"Timeout, server $host not responding"* ]]; then
|
|
echo "non-timeout error: $output"
|
|
exit 1
|
|
else
|
|
exit 0
|
|
fi
|