#!/usr/bin/env bash # Disposable isolated PostgreSQL; no production credentials or published ports. set -euo pipefail name="btcdata-test-${GITHUB_RUN_ID:-$$}-${GITHUB_RUN_ATTEMPT:-1}" cleanup() { docker rm -f "${name}-runner" "$name" >/dev/null 2>&1 || true docker network rm "$name" >/dev/null 2>&1 || true } trap cleanup EXIT docker network create "$name" >/dev/null docker run -d --name "$name" --network "$name" \ -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16-alpine >/dev/null ready=false for _ in $(seq 1 60); do if docker exec "$name" pg_isready -U postgres >/dev/null 2>&1; then ready=true break fi sleep 1 done if [ "$ready" != true ]; then echo 'Disposable PostgreSQL did not become ready' >&2 exit 1 fi # The CI workspace is inside the runner container, not on the Docker host. # Copy only test inputs; never mount a nonexistent host workspace or copy .env/.git. docker create --name "${name}-runner" --network "$name" -w /app \ -e "BTCDATA_TEST_JDBC_URL=jdbc:postgresql://$name:5432/postgres?user=postgres" \ clojure:temurin-21-tools-deps-alpine clj -M:test >/dev/null COPYFILE_DISABLE=1 tar --no-xattrs -cf - deps.edn src resources test env/test | docker cp - "${name}-runner:/app" docker start --attach "${name}-runner" exit "$(docker inspect --format '{{.State.ExitCode}}' "${name}-runner")"