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.
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
|