services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: ${AIGW_POSTGRES_USER:?set AIGW_POSTGRES_USER} POSTGRES_PASSWORD: ${AIGW_POSTGRES_PASSWORD:?set AIGW_POSTGRES_PASSWORD} POSTGRES_DB: ${AIGW_POSTGRES_DB:?set AIGW_POSTGRES_DB} ports: - "127.0.0.1:5432:5432" volumes: - aigw-postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 5s timeout: 3s retries: 20 redis: image: redis:7-alpine ports: - "127.0.0.1:6379:6379" volumes: - aigw-redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 20 mailpit: image: axllent/mailpit:v1.27 ports: - "127.0.0.1:8025:8025" - "127.0.0.1:1025:1025" healthcheck: test: ["CMD", "/mailpit", "readyz"] interval: 5s timeout: 3s retries: 20 aigw: image: aigw-debug:local build: . depends_on: postgres: condition: service_healthy mailpit: condition: service_healthy ports: - "127.0.0.1:8080:8080" - "127.0.0.1:8081:8081" - "127.0.0.1:8082:8082" - "127.0.0.1:9090:9090" environment: AIGW_SERVER_ADDRESS: ${AIGW_SERVER_ADDRESS:?set AIGW_SERVER_ADDRESS} AIGW_PUBLIC_ADDRESS: ${AIGW_PUBLIC_ADDRESS:-:8080} AIGW_ADMIN_ADDRESS: ${AIGW_ADMIN_ADDRESS:-:8081} AIGW_WEBHOOK_ADDRESS: ${AIGW_WEBHOOK_ADDRESS:-:8082} AIGW_OPERATIONS_ADDRESS: ${AIGW_OPERATIONS_ADDRESS:-:9090} AIGW_TRUSTED_PROXY_CIDRS: ${AIGW_TRUSTED_PROXY_CIDRS:-} AIGW_REQUIRE_HTTPS: ${AIGW_REQUIRE_HTTPS:-false} AIGW_DEPLOYMENT_REGION: ${AIGW_DEPLOYMENT_REGION:-} AIGW_DATABASE_URL: ${AIGW_DATABASE_URL_DOCKER:?set AIGW_DATABASE_URL_DOCKER} AIGW_REDIS_URL: ${AIGW_REDIS_URL_DOCKER:-} AIGW_CREDENTIAL_KEY: ${AIGW_CREDENTIAL_KEY:?set AIGW_CREDENTIAL_KEY} AIGW_CREDENTIAL_PREVIOUS_KEYS: ${AIGW_CREDENTIAL_PREVIOUS_KEYS:-} AIGW_ADMIN_TOKEN: ${AIGW_ADMIN_TOKEN:?set AIGW_ADMIN_TOKEN} AIGW_PUBLIC_URL: ${AIGW_PUBLIC_URL:?set AIGW_PUBLIC_URL} AIGW_INFERENCE_PUBLIC_URL: ${AIGW_INFERENCE_PUBLIC_URL:?set AIGW_INFERENCE_PUBLIC_URL} AIGW_WEBAUTHN_RP_ID: ${AIGW_WEBAUTHN_RP_ID:?set AIGW_WEBAUTHN_RP_ID} AIGW_WEBAUTHN_ORIGINS: ${AIGW_WEBAUTHN_ORIGINS:?set AIGW_WEBAUTHN_ORIGINS} AIGW_SMTP_FROM_ADDRESS: ${AIGW_SMTP_FROM_ADDRESS:?set AIGW_SMTP_FROM_ADDRESS} AIGW_SMTP_ADDRESS: ${AIGW_SMTP_ADDRESS_DOCKER:?set AIGW_SMTP_ADDRESS_DOCKER} AIGW_SMTP_USERNAME: ${AIGW_SMTP_USERNAME:-} AIGW_SMTP_PASSWORD: ${AIGW_SMTP_PASSWORD:-} AIGW_STRIPE_ENABLED: ${AIGW_STRIPE_ENABLED:-false} AIGW_STRIPE_API_KEY: ${AIGW_STRIPE_API_KEY:-} AIGW_STRIPE_WEBHOOK_SECRET: ${AIGW_STRIPE_WEBHOOK_SECRET:-} AIGW_STRIPE_SUCCESS_URL: ${AIGW_STRIPE_SUCCESS_URL:-} AIGW_STRIPE_CANCEL_URL: ${AIGW_STRIPE_CANCEL_URL:-} AIGW_STRIPE_PORTAL_RETURN_URL: ${AIGW_STRIPE_PORTAL_RETURN_URL:-http://localhost:8081/admin/?billing=portal} AIGW_STRIPE_AUTOMATIC_TAX_ENABLED: ${AIGW_STRIPE_AUTOMATIC_TAX_ENABLED:-false} AIGW_STRIPE_TAX_REGISTRATION_CONFIRMED: ${AIGW_STRIPE_TAX_REGISTRATION_CONFIRMED:-false} AIGW_STRIPE_PRODUCT_TAX_CODE: ${AIGW_STRIPE_PRODUCT_TAX_CODE:-} AIGW_SETTLEMENT_SPOOL_PATH: /var/lib/aigw/settlements.jsonl volumes: - ./config.control.example.json:/etc/aigw/config.json:ro - aigw-settlements:/var/lib/aigw healthcheck: test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:9090/readyz"] interval: 3s timeout: 2s retries: 20 start_period: 5s integration-test: image: aigw-test:local build: context: . target: test profiles: ["test"] working_dir: /src depends_on: postgres: condition: service_healthy environment: AIGW_TEST_DATABASE_URL: ${AIGW_DATABASE_URL_DOCKER:?set AIGW_DATABASE_URL_DOCKER} GOCACHE: /go-build-cache volumes: - .:/src:ro - aigw-go-build:/go-build-cache command: ["go", "test", "-p=1", "./internal/controlplane", "./internal/billing", "-count=1"] volumes: aigw-postgres: aigw-redis: aigw-settlements: aigw-go-build: