diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 2bfbffb5..111305d8 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -74,7 +74,16 @@ jobs: run: pnpm install --frozen-lockfile - name: Install Playwright Chromium - run: pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium + # Drop Google's chrome-stable apt source first: its index has been + # serving a broken Packages.gz ("Hash Sum mismatch", nightly run + # 34382957429, both attempts, three jobs), and `--with-deps` runs + # `apt-get update`, which fails the whole install with code 100. + # Playwright ships its own Chromium and takes system deps from the + # Ubuntu archives, so the repo is dead weight here. + run: | + sudo rm -f /etc/apt/sources.list.d/google-chrome.list + sudo rm -f /etc/apt/sources.list.d/google-chrome.sources + pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium - name: Provision MinIO env (defaults; smoke is OAuth-free) run: cp local-dev/.env.minio.example local-dev/.env.minio @@ -285,7 +294,16 @@ jobs: run: pnpm --filter @useupup/core --filter @useupup/react --filter @useupup/server build - name: Install Playwright Chromium - run: pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium + # Drop Google's chrome-stable apt source first: its index has been + # serving a broken Packages.gz ("Hash Sum mismatch", nightly run + # 34382957429, both attempts, three jobs), and `--with-deps` runs + # `apt-get update`, which fails the whole install with code 100. + # Playwright ships its own Chromium and takes system deps from the + # Ubuntu archives, so the repo is dead weight here. + run: | + sudo rm -f /etc/apt/sources.list.d/google-chrome.list + sudo rm -f /etc/apt/sources.list.d/google-chrome.sources + pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium # Flag-position --project (never the `-- --project` pnpm-forwarding # form, which Playwright reads as filename filters — see CLAUDE.md). diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 3eb540b7..0b838b05 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -44,7 +44,16 @@ jobs: run: pnpm install --frozen-lockfile - name: Install Playwright Chromium - run: pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium + # Drop Google's chrome-stable apt source first: its index has been + # serving a broken Packages.gz ("Hash Sum mismatch", nightly run + # 34382957429, both attempts, three jobs), and `--with-deps` runs + # `apt-get update`, which fails the whole install with code 100. + # Playwright ships its own Chromium and takes system deps from the + # Ubuntu archives, so the repo is dead weight here. + run: | + sudo rm -f /etc/apt/sources.list.d/google-chrome.list + sudo rm -f /etc/apt/sources.list.d/google-chrome.sources + pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium - name: Provision MinIO env (defaults; suites are OAuth-free) run: cp local-dev/.env.minio.example local-dev/.env.minio @@ -438,7 +447,12 @@ jobs: - name: Install Playwright Chromium if: steps.creds.outputs.present == 'true' - run: pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium + # See the Full E2E job above: Google's chrome-stable apt index is + # serving a broken Packages.gz, and `--with-deps` fails on it. + run: | + sudo rm -f /etc/apt/sources.list.d/google-chrome.list + sudo rm -f /etc/apt/sources.list.d/google-chrome.sources + pnpm --filter @useupup/e2e-test exec playwright install --with-deps chromium - name: Run landing feedback e2e + shared-PostHog ingestion verification if: steps.creds.outputs.present == 'true' diff --git a/apps/e2e-test/playwright.landing.config.ts b/apps/e2e-test/playwright.landing.config.ts index 0f437bcc..ddafe55b 100644 --- a/apps/e2e-test/playwright.landing.config.ts +++ b/apps/e2e-test/playwright.landing.config.ts @@ -13,7 +13,12 @@ import { defineConfig } from '@playwright/test' // The `flows` project (support + thumbs) runs first; the serial `ingestion` // project depends on it, so verification always runs LAST against landed data. -const LANDING_PORT = 53080 +// 31080, not 53080: Linux draws ephemeral source ports from 32768-60999, so a +// fixed listen port in that window can be transiently held by one of the +// runner's own outbound connections — the failure mode that killed the +// resume harness on :53062 (see apps/e2e-test/e2e/multipart-resume-harness.ts). +// Below 32768 the kernel never competes for it. +const LANDING_PORT = 31080 const MASTRA_PORT = 4144 const baseURL = `http://localhost:${LANDING_PORT}`