diff --git a/.github/workflows/docker-build-publish.yml b/.github/workflows/docker-build-publish.yml index c318430..7f4eafe 100644 --- a/.github/workflows/docker-build-publish.yml +++ b/.github/workflows/docker-build-publish.yml @@ -18,6 +18,8 @@ on: required: false type: string default: "" + description: > + Multiline build args, one per line: KEY=VALUE (values may include spaces) env: description: > @@ -121,17 +123,21 @@ jobs: BUILD_ARG_FLAGS=() BUILD_ARGS_JSON="{}" if [ -n "$BUILD_ARGS" ]; then - for arg in $BUILD_ARGS; do - if [[ "$arg" != *=* ]]; then - echo "Invalid build arg: $arg" >&2 + while IFS= read -r line; do + trimmed="${line#"${line%%[![:space:]]*}"}" + trimmed="${trimmed%"${trimmed##*[![:space:]]}"}" + [ -z "$trimmed" ] && continue + case "$trimmed" in \#*) continue;; esac + if [[ "$trimmed" != *=* ]]; then + echo "Invalid build arg: $trimmed" >&2 exit 1 fi - BUILD_ARG_FLAGS+=(--build-arg "$arg") + BUILD_ARG_FLAGS+=(--build-arg "$trimmed") - key="${arg%%=*}" - val="${arg#*=}" + key="${trimmed%%=*}" + val="${trimmed#*=}" BUILD_ARGS_JSON=$(jq --arg k "$key" --arg v "$val" '. + {($k): $v}' <<<"$BUILD_ARGS_JSON") - done + done <<< "$BUILD_ARGS" fi while read -r group; do diff --git a/.github/workflows/python-uv-ci.yml b/.github/workflows/python-uv-ci.yml index d6b7bdc..a627752 100644 --- a/.github/workflows/python-uv-ci.yml +++ b/.github/workflows/python-uv-ci.yml @@ -146,13 +146,26 @@ jobs: --health-retries=5 \ postgres:16 for i in {1..30}; do - if docker exec "$container_name" pg_isready -U postgres > /dev/null 2>&1; then - break - fi + health="$(docker inspect --format '{{.State.Health.Status}}' "$container_name" 2>/dev/null || true)" + case "$health" in + healthy) + break + ;; + unhealthy) + echo "Postgres reported unhealthy." >&2 + docker logs "$container_name" || true + exit 1 + ;; + "") + echo "Postgres health status unavailable." >&2 + docker logs "$container_name" || true + exit 1 + ;; + esac sleep 1 done - if ! docker exec "$container_name" pg_isready -U postgres > /dev/null 2>&1; then - echo "Postgres did not become ready in time." >&2 + if [ "${health:-}" != "healthy" ]; then + echo "Postgres did not become healthy in time." >&2 docker logs "$container_name" || true exit 1 fi