name: gizmoduck x-app: &app build: . image: gizmoduck-local x-runtime: &runtime DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:?Set DJANGO_SECRET_KEY in .env} DB_NAME: gizmoduck DB_HOST: db DB_USER: gizmoduck_app DB_PASSWORD: ${RUNTIME_PASSWORD:?Set RUNTIME_PASSWORD in .env} services: db: image: postgres:17 environment: POSTGRES_DB: gizmoduck POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} MIGRATION_PASSWORD: ${MIGRATION_PASSWORD:?Set MIGRATION_PASSWORD in .env} RUNTIME_PASSWORD: ${RUNTIME_PASSWORD:?Set RUNTIME_PASSWORD in .env} volumes: - postgres_data:/var/lib/postgresql/data - ./docker/postgres/init.sh:/docker-entrypoint-initdb.d/10-roles.sh:ro healthcheck: test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U postgres -d gizmoduck"] interval: 2s timeout: 3s retries: 30 ports: - "127.0.0.1:5432:5432" web: <<: *app environment: *runtime volumes: - ./imports:/app/imports ports: ["127.0.0.1:8000:8000"] depends_on: db: {condition: service_healthy} manage: <<: *app profiles: ["tools"] environment: <<: *runtime DB_USER: gizmoduck_migrate DB_PASSWORD: ${MIGRATION_PASSWORD:?Set MIGRATION_PASSWORD in .env} volumes: - ./imports:/app/imports - ./exports:/app/exports - ./backups:/app/backups entrypoint: ["python", "manage.py"] command: ["check"] depends_on: db: {condition: service_healthy} test-db: image: postgres:17 profiles: ["test", "backup"] environment: POSTGRES_DB: gizmoduck_tests POSTGRES_PASSWORD: ${TEST_PASSWORD:?Set TEST_PASSWORD in .env} tmpfs: [/var/lib/postgresql/data] volumes: - ./docker/postgres/test-init.sh:/docker-entrypoint-initdb.d/10-test.sh:ro healthcheck: test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U postgres -d gizmoduck_tests"] interval: 2s timeout: 3s retries: 30 test: <<: *app profiles: ["test"] environment: DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:?Set DJANGO_SECRET_KEY in .env} DB_HOST: test-db DB_NAME: gizmoduck_tests DB_USER: gizmoduck_test DB_PASSWORD: ${TEST_PASSWORD:?Set TEST_PASSWORD in .env} command: ["pytest", "-q", "-p", "no:cacheprovider"] depends_on: test-db: {condition: service_healthy} permissions: <<: *app profiles: ["tools"] environment: *runtime command: ["python", "tests/check_permissions.py"] depends_on: db: {condition: service_healthy} restore-db: image: postgres:17 profiles: ["backup"] environment: POSTGRES_DB: gizmoduck_restore POSTGRES_USER: gizmoduck_restore POSTGRES_PASSWORD: ${TEST_PASSWORD:?Set TEST_PASSWORD in .env} tmpfs: [/var/lib/postgresql/data] healthcheck: test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U gizmoduck_restore -d gizmoduck_restore"] interval: 2s timeout: 3s retries: 30 verify-backup: <<: *app profiles: ["backup"] environment: DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:?Set DJANGO_SECRET_KEY in .env} DB_HOST: restore-db DB_NAME: gizmoduck_restore DB_USER: gizmoduck_restore DB_PASSWORD: ${TEST_PASSWORD:?Set TEST_PASSWORD in .env} BACKUP_ROOT: /app/backups BACKUP_VERIFY_ALLOWED: "1" LIVE_DB_HOST: db LIVE_DB_NAME: gizmoduck BACKUP_SOURCE_HOST: test-db BACKUP_SOURCE_NAME: gizmoduck_tests BACKUP_SOURCE_USER: gizmoduck_test BACKUP_SOURCE_PASSWORD: ${TEST_PASSWORD:?Set TEST_PASSWORD in .env} volumes: - ./backups:/app/backups depends_on: restore-db: {condition: service_healthy} test-db: {condition: service_healthy} volumes: postgres_data: