#!/usr/bin/env bash set -euo pipefail repo_root="$(cd "$(dirname "$0")/.." && pwd)" container_name="cosmic-clash-allocator-integration" database="cosmic_clash_test" user="cosmic_clash_test" password="cosmic_clash_test" cleanup() { # -v matters: the container runs with --rm, which would reclaim its # anonymous volume on a normal exit, but this trap force-removes it instead # and `docker rm -f` alone leaves the volume behind. Each run then leaks one # throwaway database volume, which accumulates silently until the Docker VM # disk fills and the next container fails to start -- surfacing only as this # script's own readiness timeout, never as a disk error. See # multiplayer-next.md ยง9 gotcha 52. docker rm -f -v "$container_name" >/dev/null 2>&1 || true } trap cleanup EXIT cleanup docker run --rm -d --name "$container_name" \ -e POSTGRES_DB="$database" \ -e POSTGRES_USER="$user" \ -e POSTGRES_PASSWORD="$password" \ -p 55436:5432 postgres:17-alpine >/dev/null for attempt in $(seq 1 30); do if docker exec "$container_name" pg_isready -U "$user" -d "$database" >/dev/null 2>&1; then break fi if [ "$attempt" = 30 ]; then echo "PostgreSQL did not become ready" >&2 exit 1 fi sleep 1 done cd "$repo_root/server" COSMIC_CLASH_POSTGRES_DSN="postgres://${user}:${password}@127.0.0.1:55436/${database}?sslmode=disable" \ go test -tags integration ./allocator -count=1