mirror of
https://github.com/Donkie/Spoolman.git
synced 2026-10-22 10:02:17 -05:00
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
50 lines
1.7 KiB
YAML
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
|