Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 34 additions & 34 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion pkgs/default.nix
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
{ inputs, pkgs }:
let
deploy-with-retry = pkgs.callPackage ./deploy-with-retry { inherit inputs; };
nixdiff = pkgs.callPackage ./nixdiff { };
rpi4-installer = pkgs.callPackage ./rpi4-installer { inherit inputs; };
in
{
inherit nixdiff rpi4-installer;
inherit deploy-with-retry nixdiff rpi4-installer;
default = nixdiff;
}
55 changes: 55 additions & 0 deletions pkgs/deploy-with-retry/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{ pkgs, inputs }:
let
deploy-rs = inputs.deploy-rs.packages.${pkgs.system}.deploy-rs;
in
pkgs.writeShellApplication {
name = "deploy-with-retry";
runtimeInputs = [
deploy-rs
pkgs.nix
pkgs.openssh
];
text = ''
target="''${1:?usage: deploy-with-retry .#hostname [extra deploy-rs args...]}"
shift

if [[ "$target" == *#* ]]; then
flake_ref="''${target%%#*}"
node="''${target##*#}"
else
flake_ref="."
node="$target"
fi
[ -z "$flake_ref" ] && flake_ref="."

for attempt in 1 2; do
echo "deploy-rs attempt $attempt/2"

if deploy "$target" "$@"; then
exit 0
fi

if [[ "$attempt" == 2 ]]; then
exit 1
fi

# Reconnect as the same ssh_user/hostname deploy-rs itself resolved
# for this node (lib/mkDeployNode.nix), not whoever the local shell
# user happens to be - those can differ per node (e.g. mightymac
# uses "gene.liverman", everything else defaults to "gene").
ssh_user=$(nix eval --raw "$flake_ref#deploy.nodes.\"$node\".sshUser")
ssh_host=$(nix eval --raw "$flake_ref#deploy.nodes.\"$node\".hostname")

echo "Waiting for SSH on $ssh_user@$ssh_host..."

until ssh \
-o BatchMode=yes \
-o ConnectTimeout=5 \
-o ConnectionAttempts=1 \
"$ssh_user@$ssh_host" true 2>/dev/null
do
sleep 2
done
done
'';
}
Loading