# cspell:ignore isready uuser ppassword x-postgres-healthcheck: &postgres-healthcheck healthcheck: test: ["CMD-SHELL", "pg_isready -U user -d better_auth"] interval: 1s timeout: 5s retries: 10 x-mysql-healthcheck: &mysql-healthcheck healthcheck: # Use 127.0.0.1 (not localhost) to force TCP. localhost resolves to a Unix # socket on Linux, which can falsely succeed against the temporary init # server that runs with --skip-networking. test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uuser", "-ppassword"] interval: 1s timeout: 5s retries: 10 # MySQL cold-start (data dir init, system tables, user/db creation) takes # 10-20s in CI. Without start_period, docker compose --wait fails immediately # once retries are exhausted — it does NOT wait for --wait-timeout. start_period: 30s services: mongodb: image: mongo:latest container_name: mongodb ports: - "27017:27017" volumes: - mongodb_data:/data/db healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 1s timeout: 5s retries: 10 redis: image: redis:latest container_name: redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 1s timeout: 5s retries: 10 # drizzle postgres: <<: *postgres-healthcheck image: postgres:latest container_name: postgres environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: better_auth ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql postgres-kysely: <<: *postgres-healthcheck image: postgres:latest container_name: postgres-kysely environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: better_auth ports: - "5433:5432" volumes: - postgres-kysely_data:/var/lib/postgresql postgres-kysely2: <<: *postgres-healthcheck image: postgres:latest container_name: postgres-kysely2 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: better_auth ports: - "5435:5432" volumes: - postgres-kysely2_data:/var/lib/postgresql postgres-prisma: <<: *postgres-healthcheck image: postgres:latest container_name: postgres-prisma environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: better_auth ports: - "5434:5432" volumes: - postgres-prisma_data:/var/lib/postgresql # Drizzle tests mysql: <<: *mysql-healthcheck image: mysql:latest container_name: mysql environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: better_auth MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql mysql-kysely: <<: *mysql-healthcheck image: mysql:latest container_name: mysql-kysely environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: better_auth MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3307:3306" volumes: - mysql-kysely_data:/var/lib/mysql mysql-prisma: <<: *mysql-healthcheck image: mysql:latest container_name: mysql-prisma environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: better_auth MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3308:3306" volumes: - mysql-prisma_data:/var/lib/mysql mssql: image: mcr.microsoft.com/mssql/server:latest container_name: mssql environment: SA_PASSWORD: "Password123!" ACCEPT_EULA: "Y" ports: - "1433:1433" volumes: - mssql_data:/var/opt/mssql healthcheck: test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U SA -P 'Password123!' -Q 'SELECT 1' -b -o /dev/null"] interval: 1s timeout: 5s retries: 30 start_period: 5s volumes: mongodb_data: redis_data: postgres_data: postgres-kysely_data: postgres-prisma_data: mysql_data: mssql_data: mysql-kysely_data: mysql-prisma_data: postgres-kysely2_data: