diff --git a/deployment/config/nginx-smoke/default.conf b/deployment/config/nginx-smoke/default.conf index 05b8d662e..2fa28305a 100644 --- a/deployment/config/nginx-smoke/default.conf +++ b/deployment/config/nginx-smoke/default.conf @@ -1,22 +1,34 @@ ## -## nginx-smoke — Stub gateway for deployment smoke tests in CI. -## Serves placeholder 200 responses for all web app paths so smoke tests -## can verify routing plumbing without requiring custom-built app images. -## Real admin tool containers (phpMyAdmin, Mongo Express, RedisInsight) -## run alongside this stub on their own ports. +## nginx-smoke — Gateway for deployment smoke tests in CI. +## +## Real apps (workflowui, pastebin) are proxied to playwright's webServer +## processes running on the host (reached via host.docker.internal). +## Remaining apps (codegen, emailclient, etc.) return stub 200 responses +## since they are not started as dev servers in CI. ## server { listen 80; server_name localhost; - # Portal — must contain "MetaBuilder" for the portal smoke test - location = / { - add_header Content-Type text/html; - return 200 '

MetaBuilder Portal

'; + # ── Real apps — proxied to playwright webServer processes on host ───── + + location /workflowui { + proxy_pass http://host.docker.internal:3000; + proxy_set_header Host localhost; + proxy_set_header X-Real-IP $remote_addr; + proxy_read_timeout 120s; } - # DBAL API stubs + location /pastebin { + proxy_pass http://host.docker.internal:3001; + proxy_set_header Host localhost; + proxy_set_header X-Real-IP $remote_addr; + proxy_read_timeout 120s; + } + + # ── DBAL API stubs ──────────────────────────────────────────────────── + location = /api/health { add_header Content-Type application/json; return 200 '{"status":"ok"}'; @@ -27,12 +39,21 @@ server { return 200 '{"version":"smoke-stub"}'; } - # Postgres dashboard — redirect (smoke test checks < 500, redirects are fine) + # ── Portal — must contain "MetaBuilder" ─────────────────────────────── + + location = / { + add_header Content-Type text/html; + return 200 '

MetaBuilder Portal

'; + } + + # ── Postgres redirect ───────────────────────────────────────────────── + location = /postgres { return 307 /postgres/dashboard; } - # All other paths — return minimal HTML with non-empty body + # ── Remaining apps — stub (codegen, emailclient, diagrams, etc.) ────── + location / { add_header Content-Type text/html; return 200 'MetaBuilder App'; diff --git a/deployment/docker-compose.smoke.yml b/deployment/docker-compose.smoke.yml index 32d8095b4..f088e8c79 100644 --- a/deployment/docker-compose.smoke.yml +++ b/deployment/docker-compose.smoke.yml @@ -22,6 +22,11 @@ services: - "80:80" volumes: - ./config/nginx-smoke/default.conf:/etc/nginx/conf.d/default.conf:ro + # host.docker.internal lets nginx proxy to playwright's webServer processes + # running on the host (workflowui :3000, pastebin :3001). + # On Linux (GitHub Actions) this requires the host-gateway extra_host. + extra_hosts: + - "host.docker.internal:host-gateway" healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1/"] interval: 5s diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts index 195e02569..1c9367331 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -26,19 +26,35 @@ export default defineConfig({ screenshot: 'only-on-failure', }, - /* Start workflowui dev server automatically when not running against Docker stack */ - webServer: process.env.PLAYWRIGHT_BASE_URL ? undefined : { - command: 'npm run dev -w workflowui', - url: 'http://localhost:3000/workflowui/', - reuseExistingServer: !process.env.CI, - timeout: 120_000, - env: { - NODE_ENV: 'development', - NEXT_PUBLIC_API_URL: 'http://localhost:8080', - NEXTAUTH_SECRET: 'test-secret', - NEXTAUTH_URL: 'http://localhost:3000', + /* Start dev servers automatically when not running against a live Docker stack */ + webServer: process.env.PLAYWRIGHT_BASE_URL ? undefined : [ + { + command: 'npm run dev -w workflowui', + url: 'http://localhost:3000/workflowui/', + reuseExistingServer: !process.env.CI, + timeout: 120_000, + env: { + NODE_ENV: 'development', + NEXT_PUBLIC_API_URL: 'http://localhost:8080', + NEXTAUTH_SECRET: 'test-secret', + NEXTAUTH_URL: 'http://localhost:3000', + }, }, - }, + { + command: 'PORT=3001 npm run dev -w codesnippet', + url: 'http://localhost:3001/pastebin/', + reuseExistingServer: !process.env.CI, + timeout: 120_000, + env: { + NODE_ENV: 'development', + PORT: '3001', + NEXT_PUBLIC_DBAL_API_URL: 'http://localhost:8080', + NEXT_PUBLIC_FLASK_BACKEND_URL: 'http://localhost:5000', + NEXTAUTH_SECRET: 'test-secret', + NEXTAUTH_URL: 'http://localhost:3001', + }, + }, + ], projects: [ {