Files
app/docker/compose.ci.yml
T
stroblmeandClaude Opus 5 73eeec29b1 Keep the engine's state in SQLite, not Postgres
One process owns this database — the image has run a single uvicorn
worker for that reason since the four-engines bug — so a file beside the
flows is the honest shape for it, and it is what lets `fluksio serve`
need no infrastructure at all. Live values, node execution and the work
queue never came here anyway; what does is a rollup a minute at a time,
a row per cascade and the run history, and WAL keeps the readers going
while that one writer works.

DATA_DIR is now the one setting that moves everything an installation
keeps; the rest derive from it and the images still spell theirs out.
The schema is prepared in-process at startup, so the prestart service is
gone, and the ten Postgres-only revisions collapse into one portable
baseline.

Three things only worked because psycopg was casting for us: a token's
subject arriving as a string where the column is a UUID, `greatest`, and
`date_bin`. The timestamps needed a column type of their own — SQLite
stores no offset, and a naive datetime read back either raises against an
aware `now` or serialises as local time.

Postgres stays in the stack only for Umami, behind the analytics profile.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-21 22:19:45 +02:00

58 lines
2.0 KiB
YAML

# CI isolation overrides — layered on top of compose.yml + compose.dev.yml by
# the Playwright shards and the compose smoke job in .gitea/workflows/.
#
# A self-hosted runner can put several jobs on the same host. A per-job
# COMPOSE_PROJECT_NAME keeps their containers, networks and volumes apart, but
# it does not cover the two things that are global to the Docker daemon:
#
# 1. `container_name` ignores the project name, so a second job fails with
# "the container name /fluksio-db is already in use".
# 2. Published host ports are first come, first served.
#
# Neither is needed in CI: everything reaches everything else by compose
# service name on the project network.
services:
proxy:
ports: !reset []
db:
container_name: !reset null
redis:
container_name: !reset null
adminer:
container_name: !reset null
ports: !reset []
mailcatcher:
ports: !reset []
backend:
container_name: !reset null
ports: !reset []
frontend:
container_name: !reset null
ports: !reset []
# Baked at build time. compose.dev.yml bakes http://localhost:8000, which
# resolves to the playwright container itself; the browser has to reach the
# API by service name on the project network instead.
build:
args:
- VITE_API_URL=http://backend:8000
# Image tags are daemon-global too, and this one no longer holds the same
# bytes as the smoke job's: without a per-job tag the two jobs overwrite
# each other's `fluksio-frontend:latest` and the SPA calls the wrong API.
image: '${DOCKER_IMAGE_FRONTEND?Variable not set}:${COMPOSE_PROJECT_NAME:-ci}'
playwright:
ports: !reset []
# frontend/playwright.config.ts defaults baseURL to http://app.localhost,
# which is right for a local run against the integrated stack but resolves
# to 127.0.0.1 in here. In CI the nginx `frontend` service serves the SPA.
# This origin must stay in BACKEND_CORS_ORIGINS (.env.example).
environment:
- PLAYWRIGHT_BASE_URL=http://frontend