diff --git a/packages/wait-for-port.nix b/packages/wait-for-port/package.nix similarity index 61% rename from packages/wait-for-port.nix rename to packages/wait-for-port/package.nix index 9581114..8f5ebf3 100644 --- a/packages/wait-for-port.nix +++ b/packages/wait-for-port/package.nix @@ -4,11 +4,5 @@ writeShellApplication { # beware: the first result on nixos search, netcat-gnu, is outdated and # broken. runtimeInputs = [ netcat ]; - text = '' - if [[ $# -eq 0 ]] ; then - nc - exit 1 - fi - until nc -z localhost "$@"; do sleep 1; done - ''; + text = builtins.readFile ./wait-for-port.sh; } diff --git a/packages/wait-for-port/wait-for-port.sh b/packages/wait-for-port/wait-for-port.sh new file mode 100644 index 0000000..af19dfb --- /dev/null +++ b/packages/wait-for-port/wait-for-port.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +set -euo pipefail + +while getopts "t:" opt; do + case "$opt" in + t) + DEADLINE="$((EPOCHSECONDS + OPTARG))" + shift + shift + ;; + "?") + >&2 echo "Invalid option" + exit 1 + ;; + esac +done + +until nc -z localhost "$@"; do + if [[ -n "${DEADLINE-}" && "$DEADLINE" -le "$EPOCHSECONDS" ]]; then + >&2 echo "Timeout" + exit 1 + fi + sleep 1 +done