#!/usr/bin/env bash # Smoke-tests an Acauã image: the API and the dashboard answer, libduckdb is # linked, a HEALTHCHECK is declared and SIGTERM stops the daemon cleanly. # Everything runs through `docker exec`, so no port has to be reachable from # the CI job container. The container is always removed. # # scripts/smoke-image.sh set -euo pipefail image=${1:?usage: smoke-image.sh } name="acaua-smoke-$$-$RANDOM" trap 'docker rm -f "$name" >/dev/null 2>&1 || true' EXIT fail() { echo "smoke: $*" >&2; docker logs "$name" >&2 2>&1 || true; exit 1; } docker run -d --name "$name" "$image" >/dev/null for _ in $(seq 1 30); do docker exec "$name" curl -fsS http://127.0.0.1:8787/api/health >/dev/null 2>&1 && break sleep 1 done docker exec "$name" curl -fsS http://127.0.0.1:8787/api/health | grep -q '"status":"ok"' || fail "/api/health did not answer" docker exec "$name" curl -fsS http://127.0.0.1:8787/ | grep -qi '/dev/null code=$(docker inspect -f '{{.State.ExitCode}}' "$name") [ "$code" = 0 ] || fail "exit code $code after SIGTERM (expected 0: SIGTERM must stop serve)" echo "smoke: $image ok"