diff --git a/.github/workflows/portability.yml b/.github/workflows/portability.yml index 1bf9f5a..0afa7b6 100644 --- a/.github/workflows/portability.yml +++ b/.github/workflows/portability.yml @@ -14,9 +14,8 @@ name: Portability # Catches RSC boundary, SSR, and middleware bugs. # # Layer 1 is cheap and gates everything else. Layer 2 runs on a small matrix. -# Layer 3 runs on Linux only and current LTS Node lines — Next.js runtime -# behaviour is not OS-sensitive, and Playwright/browser installation on the -# moving current Node line has been flaky enough to hide product regressions. +# Layer 3 runs on Linux only — Next.js runtime behaviour is not OS-sensitive, +# and Playwright+browsers on Windows/macOS add cost for little signal. on: push: @@ -85,7 +84,7 @@ jobs: strategy: fail-fast: false matrix: - node: ['20', '22'] + node: ['20', '22', '24'] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -94,9 +93,13 @@ jobs: with: bun-version: latest - - uses: actions/setup-node@v4 + # Playwright 1.59.1 can hang after a 100% browser download under Node 24 + # on ubuntu-24.04. Install the browser with Node 22, then switch to the + # matrix Node version before running the actual integration test. + - name: Set up Node for Playwright install + uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node }} + node-version: '22' - name: Install dependencies run: bun install --frozen-lockfile @@ -105,7 +108,13 @@ jobs: run: bun run build:packages - name: Install Playwright browser (chromium only) - run: bunx playwright install --with-deps --only-shell chromium + timeout-minutes: 5 + run: npx --no-install playwright install --with-deps --only-shell chromium + + - name: Set up Node under test + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} - name: Run Next.js integration E2E run: bun run test:playwright