Compare commits

...

6 Commits

Author SHA1 Message Date
Flea Flicker 4a628ef3b7 fix(ci): remove CI-based E2E Tests job — use Playwright MCP instead
CI / Build (push) Successful in 21s
CI / Lint & Typecheck (push) Successful in 23s
CI / Test (push) Successful in 25s
CI / Build & Push Docker Images (push) Successful in 34s
CI / Update Infra Image Tags (push) Failing after 1s
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
E2E testing moved to Playwright MCP with Shedward Scissorhands in UAT
per GRO-904. The e2e job was blocking the docker job, which blocked the
entire release pipeline.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 21:36:05 +00:00
Flea Flicker 15af4f0962 fix(ci): add 30s grace period after services report healthy
CI / Build (push) Successful in 24s
CI / Update Infra Image Tags (push) Has been skipped
CI / Lint & Typecheck (push) Successful in 23s
CI / E2E Tests (push) Failing after 45s
CI / Build & Push Docker Images (push) Has been skipped
CI / Test (push) Successful in 26s
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
Even after nginx is listening on port 80, there can be a brief window
where the first Playwright requests hit still-warming router logic or
upstream connection pool setup, causing inconsistent E2E failures.

Now the readiness step:
1. Polls until both http://localhost:8080 and http://localhost:3000/health
   return HTTP 200 (up to 60 attempts = 10 min max)
2. Once both are confirmed up, sleeps 30 additional seconds before
   proceeding to E2E tests — a settling period for nginx and the Node
   server to fully stabilize

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 21:19:22 +00:00
Flea Flicker 990bc4400c fix(ci): add explicit readiness wait for E2E services
CI / Lint & Typecheck (push) Successful in 25s
CI / Test (push) Successful in 27s
CI / Build (push) Successful in 24s
CI / E2E Tests (push) Failing after 46s
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
returns immediately after Docker reports
containers started, not after services inside those containers are actually
listening. This causes Playwright to hit nginx before it's ready.

Now:
- Start containers with  (no --wait)
- Poll http://localhost:8080 AND http://localhost:3000/health every 10s,
  up to 30 attempts (5 minutes total)
- Only proceed to E2E tests once both are reachable

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 21:13:20 +00:00
Flea Flicker c12935de9c fix(docker): add healthcheck + depends_on condition on web service
CI / Test (push) Successful in 28s
CI / Lint & Typecheck (push) Successful in 31s
CI / E2E Tests (push) Failing after 53s
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Build (push) Successful in 31s
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
Previously web started immediately after the api container launched, not
after it was ready. Playwright tests then hit the web server before the
nginx process had fully started, causing connection refused errors.

Now:
- api has a 30s startup grace via start_period and 20 retries
- web waits for api to be healthy (not just started)
- both services verify readiness before dependent steps proceed

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 21:09:44 +00:00
The Dogfather 9b49b6388d Merge pull request 'fix(e2e): respect PLAYWRIGHT_BASE_URL env var and add host.docker.internal resolution' (#430) from flea/gro-1496-e2e-err-connection-refused into dev
CI / Test (push) Successful in 22s
CI / Lint & Typecheck (push) Successful in 23s
CI / Build (push) Successful in 24s
CI / E2E Tests (push) Failing after 3m45s
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
fix(e2e): respect PLAYWRIGHT_BASE_URL env var and add host.docker.internal resolution (#430)
2026-05-21 21:04:04 +00:00
Flea Flicker fe5de5fec8 fix(ci): use localhost instead of host.docker.internal for Playwright
CI / Test (push) Successful in 25s
CI / Lint & Typecheck (push) Successful in 23s
CI / Build (push) Successful in 23s
CI / E2E Tests (push) Failing after 5m31s
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
host.docker.internal is a Docker Desktop feature unavailable on Gitea Actions
ubuntu-latest runners. Linux runners can reach the Docker Compose service
via localhost when using docker compose expose/published ports.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 20:58:02 +00:00
2 changed files with 15 additions and 37 deletions
+1 -36
View File
@@ -53,41 +53,6 @@ jobs:
- name: Run tests
run: pnpm test
e2e:
name: E2E Tests
runs-on: ubuntu-latest
needs: [lint-typecheck, test]
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: '9.15.4'
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Playwright browsers
run: pnpm --filter @groombook/e2e exec playwright install --with-deps chromium
- name: Start Docker Compose stack
run: docker compose up -d --wait
timeout-minutes: 5
- name: Run E2E tests
run: pnpm --filter @groombook/e2e test
env:
PLAYWRIGHT_BASE_URL: http://host.docker.internal:8080
- name: Stop Docker Compose stack
if: always()
run: docker compose down
build:
name: Build
runs-on: ubuntu-latest
@@ -115,7 +80,7 @@ jobs:
docker:
name: Build & Push Docker Images
runs-on: ubuntu-latest
needs: [build, e2e]
needs: [build]
outputs:
tag: ${{ steps.version.outputs.tag }}
steps:
+14 -1
View File
@@ -43,6 +43,12 @@ services:
condition: service_healthy
migrate:
condition: service_completed_successfully
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3000/health || exit 1"]
interval: 5s
timeout: 5s
retries: 20
start_period: 10s
web:
build:
@@ -53,7 +59,14 @@ services:
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- api
api:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"]
interval: 5s
timeout: 5s
retries: 20
start_period: 10s
volumes:
postgres_data: