From b56045ca6a0ff81b98808ddcfd6fe8b12eb0a6fd Mon Sep 17 00:00:00 2001 From: zwitschi Date: Mon, 27 Oct 2025 19:44:43 +0100 Subject: [PATCH] feat: Add Docker Compose configuration for testing and API services --- docker-compose.test.yml | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 docker-compose.test.yml diff --git a/docker-compose.test.yml b/docker-compose.test.yml new file mode 100644 index 0000000..997413d --- /dev/null +++ b/docker-compose.test.yml @@ -0,0 +1,82 @@ +services: + tests: + build: + context: . + dockerfile: Dockerfile + command: > + sh -c "set -eu; pip install -r requirements-test.txt; python scripts/setup_database.py --ensure-database --ensure-role --ensure-schema --initialize-schema --run-migrations --seed-data --dry-run -v; python scripts/setup_database.py --ensure-database --ensure-role --ensure-schema --initialize-schema --run-migrations --seed-data -v; pytest $${PYTEST_TARGET:-tests/unit}" + environment: + DATABASE_DRIVER: postgresql + DATABASE_HOST: postgres + DATABASE_PORT: 5432 + DATABASE_NAME: calminer_test + DATABASE_USER: calminer_test + DATABASE_PASSWORD: calminer_test_password + DATABASE_SCHEMA: public + DATABASE_SUPERUSER: postgres + DATABASE_SUPERUSER_PASSWORD: postgres + DATABASE_SUPERUSER_DB: postgres + DATABASE_URL: postgresql+psycopg2://calminer_test:calminer_test_password@postgres:5432/calminer_test + PYTEST_TARGET: tests/unit + PYTHONPATH: /app + depends_on: + postgres: + condition: service_healthy + volumes: + - .:/app + - pip_cache_test:/root/.cache/pip + networks: + - calminer_test + + api: + build: + context: . + dockerfile: Dockerfile + command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload + environment: + DATABASE_DRIVER: postgresql + DATABASE_HOST: postgres + DATABASE_PORT: 5432 + DATABASE_NAME: calminer_test + DATABASE_USER: calminer_test + DATABASE_PASSWORD: calminer_test_password + DATABASE_SCHEMA: public + DATABASE_URL: postgresql+psycopg2://calminer_test:calminer_test_password@postgres:5432/calminer_test + PYTHONPATH: /app + depends_on: + postgres: + condition: service_healthy + ports: + - "8001:8000" + networks: + - calminer_test + + postgres: + image: postgres:16 + restart: unless-stopped + environment: + POSTGRES_DB: calminer_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + LANG: en_US.UTF-8 + LC_ALL: en_US.UTF-8 + POSTGRES_INITDB_ARGS: --encoding=UTF8 --locale=en_US.UTF-8 + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres -d calminer_test"] + interval: 10s + timeout: 5s + retries: 5 + ports: + - "5433:5432" + volumes: + - pg_data_test:/var/lib/postgresql/data + networks: + - calminer_test + +networks: + calminer_test: + driver: bridge + +volumes: + pg_data_test: + pip_cache_test: