Files
Spoolman/tests_frontend/docker-compose.yml
T
Donkie 638466bc70 Bake client_v2 into the image and serve it by default
Build the new Svelte client (client_v2) in CI, bake it into the Docker
image alongside the legacy React client, and serve it by default. Set
SPOOLMAN_LEGACY_CLIENT=TRUE to fall back to the old client.

SinglePageApplication is generalized to serve either client: the React
client keeps its index.html + base-path rewriting, while the Svelte
client uses a 200.html SPA fallback, serves prerendered per-route pages,
and serves relative-path assets verbatim. The tweaked-HTML store is moved
off self.html, which StaticFiles uses as its HTML-mode flag.

The Playwright frontend suite targets the React DOM, so it's pinned to
the legacy client via SPOOLMAN_LEGACY_CLIENT for now.

Claude-Session: https://claude.ai/code/session_01VQQtwPBPiMCoZCpBbbqS64
2026-07-18 23:05:00 +02:00

50 lines
1.7 KiB
YAML

# Spins up Spoolman exactly as it is deployed for real: the production image
# (client baked in, served on the same origin as the API) backed by a real
# PostgreSQL database. The frontend integration tests (Playwright) drive this
# through a browser on the host via the published port.
services:
db:
image: postgres:16-alpine
environment:
- POSTGRES_PASSWORD=spoolman
- POSTGRES_USER=spoolman
- POSTGRES_DB=spoolman
healthcheck:
test: ["CMD-SHELL", "pg_isready -U spoolman"]
interval: 1s
timeout: 5s
retries: 30
spoolman:
image: donkie/spoolman:test
environment:
- SPOOLMAN_DB_TYPE=postgres
- SPOOLMAN_DB_HOST=db
- SPOOLMAN_DB_PORT=5432
- SPOOLMAN_DB_NAME=spoolman
- SPOOLMAN_DB_USERNAME=spoolman
- SPOOLMAN_DB_PASSWORD=spoolman
- SPOOLMAN_LOGGING_LEVEL=INFO
# These Playwright tests target the legacy (React) client's DOM. The new
# Svelte client is now the default, so pin this suite to the legacy client.
# TODO: port these tests to the new client and drop this override.
- SPOOLMAN_LEGACY_CLIENT=TRUE
- TZ=Europe/Stockholm
ports:
# Host port is configurable so the suite can avoid clashing with a
# locally running Spoolman. Container always listens on 8000.
- "${SPOOLMAN_HOST_PORT:-8000}:8000"
healthcheck:
test:
- "CMD"
- "python"
- "-c"
- "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://localhost:8000/api/v1/health').status==200 else 1)"
interval: 2s
timeout: 5s
retries: 45
start_period: 5s
depends_on:
db:
condition: service_healthy