The job kept the fixed container names and the fixed 5432 that compose.ci.yml resets for every other job, so a second run could not start. Layering that file leaves the db on a port Docker assigns, which the suite is told about, and the project name is now per run so one teardown cannot take another run's database with it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7LwYgJfpkbLCTeiAf8U4A
66 lines
2.3 KiB
YAML
66 lines
2.3 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
|
|
# The one service a job may need from the host: test-backend.yml runs pytest
|
|
# on the runner. Host side left to Docker, so concurrent jobs get a port
|
|
# each — `docker compose port db 5432` says which.
|
|
ports: !override
|
|
- "5432"
|
|
|
|
redis:
|
|
container_name: !reset null
|
|
|
|
adminer:
|
|
container_name: !reset null
|
|
ports: !reset []
|
|
|
|
mailcatcher:
|
|
ports: !reset []
|
|
|
|
prestart:
|
|
container_name: !reset null
|
|
|
|
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
|