# Boot-smoke harness: run the backend's OWN image against a throwaway TimescaleDB and # assert it actually boots + serves its contract (build alone doesn't prove boot). Used # by scripts/smoke.sh; not a deploy file. DB data is tmpfs (ephemeral) — no volume, no # residue. See Makefile `smoke` and README. services: db: image: timescale/timescaledb:${TIMESCALEDB_TAG:-latest-pg18} environment: POSTGRES_USER: thermograph POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-smoke} POSTGRES_DB: thermograph tmpfs: # pg18 images place PGDATA in a major-version subdir under the mount, so mount at # /var/lib/postgresql (matches the infra compose), not /var/lib/postgresql/data. - /var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U thermograph -d thermograph"] interval: 3s timeout: 5s retries: 20 backend: # Defaults to a locally-built `:local` image (scripts/smoke.sh builds it). In CI, # set BACKEND_IMAGE_TAG=sha-<12hex> to smoke the exact published image. # The path must match what build-push.yml publishes -- jinemi/thermograph/backend. # It read admin_emi/thermograph-backend/app (the retired split-era path) until this # was corrected; harmless for the default `:local` build, wrong the moment # BACKEND_IMAGE_TAG names a real published tag. image: ${REGISTRY_HOST:-git.thermograph.org}/${BACKEND_IMAGE_PATH:-jinemi/thermograph/backend}:${BACKEND_IMAGE_TAG:-local} depends_on: db: condition: service_healthy environment: THERMOGRAPH_DATABASE_URL: postgresql+asyncpg://thermograph:${POSTGRES_PASSWORD:-smoke}@db:5432/thermograph # Required at import (web/app.py). The smoke never exercises a proxied page, so an # unreachable placeholder is fine — it only hits /healthz and {BASE}/api/version. THERMOGRAPH_FRONTEND_BASE_INTERNAL: http://127.0.0.1:1 THERMOGRAPH_BASE: "/" THERMOGRAPH_ENABLE_NOTIFIER: "0" THERMOGRAPH_ENABLE_HEARTBEAT: "0" PORT: "8137" WORKERS: "1" ports: # Host port defaults to 18137 to avoid colliding with a running dev server on 8137. - "127.0.0.1:${SMOKE_HOST_PORT:-18137}:8137"