# Docker Compose stack for e2e smoke testing with aimock. # Mastra runs in-process with Next.js — only needs aimock + app (no agent service). # Usage: docker compose -f docker-compose.test.yml up -d services: aimock: image: ghcr.io/copilotkit/aimock:latest volumes: - ./fixtures:/fixtures:ro command: ["--fixtures", "/fixtures", "--host", "0.0.0.0", "--validate-on-load"] app: build: context: . dockerfile: docker/Dockerfile.app environment: - OPENAI_API_KEY=test-key-for-aimock - OPENAI_BASE_URL=http://aimock:4010/v1 depends_on: aimock: condition: service_started healthcheck: test: [ "CMD", "node", "-e", "const http = require('http'); const req = http.get('http://localhost:3000/', (res) => { process.exit(res.statusCode === 200 ? 0 : 1); }); req.on('error', () => process.exit(1)); req.setTimeout(2000, () => { req.destroy(); process.exit(1); });", ] interval: 5s timeout: 10s retries: 30 start_period: 60s tests: # The image tag (playwright:v1.52.0-noble) pins both the browser binaries # and the system libs bundled in the image. It MUST stay aligned with the # @playwright/test version declared in showcase/tests/package.json — if # the client drifts to a newer version whose required system libs are # missing from this image, `npx playwright install chromium` will fetch # the matching browser binary but cannot install system libs. Bump both # together, or re-add `--with-deps` for that run. image: mcr.microsoft.com/playwright:v1.52.0-noble working_dir: /tests volumes: - ../../../showcase/tests:/tests - test-results:/tests/test-results environment: - STARTER=${STARTER:-mastra} - STARTER_URL=http://app:3000 depends_on: app: condition: service_healthy command: [ "bash", "-c", "cd /tests && npm install --no-audit --no-fund 2>/dev/null && npx playwright install chromium && npx playwright test starter-smoke --reporter=list", ] volumes: test-results: