From 3cd05d4e3fb998d56d82ce729daf2457d24ae187 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Thu, 2 Mar 2023 12:50:14 +0100 Subject: [PATCH] feat: add fallback to /dev/tcp on bash if netcat not found (#51) --- .drone.yml | 11 +++++++++-- wait-for | 22 +++++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 236671c..ce4ec98 100644 --- a/.drone.yml +++ b/.drone.yml @@ -12,11 +12,18 @@ steps: commands: - shellcheck ./wait-for - - name: test + - name: test-nc image: bats/bats commands: - bats ./wait-for.bats + - name: test-bash + image: bats/bats + commands: + - rm -rf /usr/bin/nc + - apk add bash + - bats ./wait-for.bats + trigger: ref: - refs/heads/main @@ -220,6 +227,6 @@ depends_on: --- kind: signature -hmac: 52a6f7275d25c344cfe1d072d1a2b2a8eb95ffa82962921ae872443565a52b33 +hmac: bd88ea52d53fb53375b5a4e4e905f2b7e76760ec88fe81d4a0df93319ad635e4 ... diff --git a/wait-for b/wait-for index 930bae8..f6f44eb 100755 --- a/wait-for +++ b/wait-for @@ -3,6 +3,9 @@ WAITFOR_TIMEOUT=${WAITFOR_TIMEOUT:-15} WAITFOR_QUIET=${WAITFOR_QUIET:-0} +HAS_NC=0 +HAS_BASH=0 + echoerr() { if [ "$WAITFOR_QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi } @@ -24,7 +27,12 @@ USAGE wait_for() { for _ in $(seq "$WAITFOR_TIMEOUT"); do - nc -w 1 -z "$WAITFOR_HOST" "$WAITFOR_PORT" >/dev/null 2>&1 + if [ $HAS_NC = 1 ]; then + nc -w 1 -z "$WAITFOR_HOST" "$WAITFOR_PORT" >/dev/null 2>&1 + elif [ $HAS_BASH = 1 ]; then + # shellcheck disable=SC3025 + bash -c "/dev/null 2>&1 + fi result=$? if [ $result -eq 0 ]; then @@ -73,8 +81,16 @@ while [ $# -gt 0 ]; do esac done -if ! [ -x "$(command -v nc)" ]; then - echoerr "error: netcat is required for wait-for to run" +if [ -x "$(command -v nc)" ]; then + HAS_NC=1 +fi + +if [ -x "$(command -v bash)" ]; then + HAS_BASH=1 +fi + +if [ $HAS_NC = 0 ] || [ $HAS_BASH = 0 ]; then + echoerr "error: netcat or bash is required for wait-for to run" exit 1 fi