add library.sh with retry function

master
Alexander Tomokhov 2023-12-20 21:17:05 +04:00
parent 1f288d223e
commit d9c0821e76
2 changed files with 71 additions and 30 deletions

View File

@ -36,35 +36,60 @@
''; '';
in in
{ {
packages.${system} = lib.attrsets.listToAttrs (map packages.${system} = lib.attrsets.listToAttrs
(a@{ name, ... }: lib.attrsets.nameValuePair name (makeTestProgram a)) (
[ (map
{ (a@{ name, ... }: lib.attrsets.nameValuePair name (makeTestProgram a))
name = "query-minimum-services"; [
script = ./query-services-state.sh; {
env-vars = [{ name = "query-minimum-services";
name = "EXPECTED_RESPONSE_FILE"; script = ./query-services-state.sh;
value = ./minimal-services-expected-response.json; env-vars = [{
}]; name = "EXPECTED_RESPONSE_FILE";
} value = ./minimal-services-expected-response.json;
{ }];
name = "query-all-services"; }
script = ./query-services-state.sh; {
env-vars = [{ name = "query-all-services";
name = "EXPECTED_RESPONSE_FILE"; script = ./query-services-state.sh;
value = ./all-services-expected-response.json; env-vars = [{
}]; name = "EXPECTED_RESPONSE_FILE";
} value = ./all-services-expected-response.json;
{ }];
name = "enable-service"; }
script = ./enable-service.sh; {
env-vars = [ ]; name = "enable-service";
} script = ./enable-service.sh;
{ env-vars = [ ];
name = "nixos-rebuild"; }
script = ./nixos-rebuild.sh; {
env-vars = [ ]; name = "nixos-rebuild";
} script = ./nixos-rebuild.sh;
]); env-vars = [ ];
}
]
)
++ [
{
name = "library";
value =
builtins.filterSource (p: _t: baseNameOf p == "library.sh") ./.;
}
]
);
devShells.${system}.default = pkgs.mkShell
{
packages = with pkgs;
[
curl
diffutils
gzip
jd-diff-patch
jq
openssh
gnutar
iputils
];
};
}; };
} }

16
library.sh Normal file
View File

@ -0,0 +1,16 @@
retry() {
local t0 cur_date remaining
local timeout="${1:?error: no timeout given}"
local period="${2:?error: no period given}"
declare -a cmd=("${@:3}")
t0="$(date '+%s')"
until "${cmd[@]}"
do
sleep "$period"
cur_date="$(date '+%s')"
remaining=$((t0 + timeout - cur_date))
[ "$remaining" -gt 0 ] || return 1
echo "$remaining seconds remain before teardown"
done
}