From d9c0821e76ccaeca268200012114cf43c5f54457 Mon Sep 17 00:00:00 2001 From: Alexander Tomokhov Date: Wed, 20 Dec 2023 21:17:05 +0400 Subject: [PATCH] add library.sh with retry function --- flake.nix | 85 +++++++++++++++++++++++++++++++++++------------------- library.sh | 16 ++++++++++ 2 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 library.sh diff --git a/flake.nix b/flake.nix index f03c5c2..1b92a2f 100644 --- a/flake.nix +++ b/flake.nix @@ -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 + ]; + }; }; } diff --git a/library.sh b/library.sh new file mode 100644 index 0000000..308b35f --- /dev/null +++ b/library.sh @@ -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 +}