feat: add fallback to /dev/tcp on bash if netcat not found (#51)

This commit is contained in:
Robert Kaussow 2023-03-02 12:50:14 +01:00 committed by GitHub
parent 3774a8541a
commit 3cd05d4e3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 5 deletions

View File

@ -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
...

View File

@ -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/tcp/$WAITFOR_HOST/$WAITFOR_PORT" >/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