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
{
packages.${system} = lib.attrsets.listToAttrs (map
(a@{ name, ... }: lib.attrsets.nameValuePair name (makeTestProgram a))
[
{
name = "query-minimum-services";
script = ./query-services-state.sh;
env-vars = [{
name = "EXPECTED_RESPONSE_FILE";
value = ./minimal-services-expected-response.json;
}];
}
{
name = "query-all-services";
script = ./query-services-state.sh;
env-vars = [{
name = "EXPECTED_RESPONSE_FILE";
value = ./all-services-expected-response.json;
}];
}
{
name = "enable-service";
script = ./enable-service.sh;
env-vars = [ ];
}
{
name = "nixos-rebuild";
script = ./nixos-rebuild.sh;
env-vars = [ ];
}
]);
packages.${system} = lib.attrsets.listToAttrs
(
(map
(a@{ name, ... }: lib.attrsets.nameValuePair name (makeTestProgram a))
[
{
name = "query-minimum-services";
script = ./query-services-state.sh;
env-vars = [{
name = "EXPECTED_RESPONSE_FILE";
value = ./minimal-services-expected-response.json;
}];
}
{
name = "query-all-services";
script = ./query-services-state.sh;
env-vars = [{
name = "EXPECTED_RESPONSE_FILE";
value = ./all-services-expected-response.json;
}];
}
{
name = "enable-service";
script = ./enable-service.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
}