From 42c0f13ee44c4c6fa7fd6e1a008a0f9c0301989f Mon Sep 17 00:00:00 2001 From: Tim Nunamaker Date: Thu, 5 Nov 2026 11:48:46 -0600 Subject: [PATCH 1/2] ci: pin the browser-test runner to ubuntu-24.04 and install Chromium explicitly The reference-implementation shard jobs and the Postgres workflow ran on ubuntu-latest, which moved to ubuntu-26.04. Patchright publishes no Chromium build for that image, so its install step logs "Skipping the optional browser download" and `owner-connection-delete.test.ts` fails with "Executable doesn't exist at ~/.cache/ms-playwright/chromium_headless_shell-1243". The jobs only passed before because the shared node_modules cache restored a browser downloaded on the older image. Two causes, two fixes: - Pin the typecheck job, the test shards and the Postgres job to ubuntu-24.04, with a comment saying when to lift the pin. Key the node_modules cache by that image (v3) so a tree built on another image is never restored. - Install Chromium with `npx patchright install chromium` before the tests, so the cache no longer decides whether a browser exists. Tests are not changed to skip without a browser; a missing browser still fails. Assisted-by: AI Signed-off-by: Tim Nunamaker --- .../reference-implementation-postgres.yml | 11 +++++++++- .../workflows/reference-implementation.yml | 22 +++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/workflows/reference-implementation-postgres.yml b/.github/workflows/reference-implementation-postgres.yml index 1f3daead4..3ed72fc31 100644 --- a/.github/workflows/reference-implementation-postgres.yml +++ b/.github/workflows/reference-implementation-postgres.yml @@ -44,7 +44,11 @@ permissions: jobs: test-postgres: name: test reference implementation (postgres) - runs-on: ubuntu-latest + # Pinned, not ubuntu-latest: latest moved to 26.04, for which Patchright publishes + # no Chromium build, so the browser tests cannot run. Lift the pin once Patchright + # supports the new image (its install step then stops printing "Skipping the + # optional browser download"). + runs-on: ubuntu-24.04 timeout-minutes: 120 steps: - name: Checkout @@ -73,6 +77,11 @@ jobs: - name: Install dependencies run: npm ci + # The reference tests drive a real Chromium; install it explicitly rather + # than relying on the dependency postinstall to have fetched one. + - name: Install Chromium for browser tests + run: npx patchright install chromium + - name: Build workspace packages run: | npm --prefix packages/connector-protocol run build diff --git a/.github/workflows/reference-implementation.yml b/.github/workflows/reference-implementation.yml index f426bd348..2b34370b6 100644 --- a/.github/workflows/reference-implementation.yml +++ b/.github/workflows/reference-implementation.yml @@ -139,7 +139,9 @@ jobs: name: typecheck reference implementation needs: classify if: needs.classify.outputs.reference_impacting == 'true' && needs.classify.outputs.has_content == 'true' - runs-on: ubuntu-latest + # Pinned to the same image as the test shards: both save the node_modules cache + # under one key, so a different image here would write a tree the shards restore. + runs-on: ubuntu-24.04 timeout-minutes: 20 steps: - name: Checkout @@ -167,7 +169,7 @@ jobs: packages/local-collector/node_modules apps/console/node_modules ~/.cache/ms-playwright - key: node-modules-v2-${{ runner.os }}-node24.22.1-${{ hashFiles('package-lock.json') }} + key: node-modules-v3-ubuntu-24.04-node24.22.1-${{ hashFiles('package-lock.json') }} - name: Install dependencies if: steps.node-modules-cache.outputs.cache-hit != 'true' @@ -205,7 +207,11 @@ jobs: name: test reference implementation shard ${{ matrix.shard }} needs: classify if: needs.classify.outputs.reference_impacting == 'true' && needs.classify.outputs.has_content == 'true' - runs-on: ubuntu-latest + # Pinned, not ubuntu-latest: latest moved to 26.04, for which Patchright publishes + # no Chromium build, so the browser tests cannot run. Lift the pin once Patchright + # supports the new image (its install step then stops printing "Skipping the + # optional browser download"). + runs-on: ubuntu-24.04 timeout-minutes: 20 strategy: fail-fast: false @@ -237,7 +243,7 @@ jobs: packages/local-collector/node_modules apps/console/node_modules ~/.cache/ms-playwright - key: node-modules-v2-${{ runner.os }}-node24.22.1-${{ hashFiles('package-lock.json') }} + key: node-modules-v3-ubuntu-24.04-node24.22.1-${{ hashFiles('package-lock.json') }} - name: Install dependencies if: steps.node-modules-cache.outputs.cache-hit != 'true' @@ -256,6 +262,14 @@ jobs: npm --prefix reference-implementation/vendor/mcp-server run build npm --prefix reference-implementation/vendor/cli run build + # The reference tests drive a real Chromium. Install it explicitly instead of + # relying on the cache above to carry it: the cache is shared with jobs that + # never use a browser, and a cold cache on an image Patchright does not + # support silently produced a tree without one. This is a no-op when the + # browser is already present. + - name: Install Chromium for browser tests + run: npx patchright install chromium + - name: Build workspace packages # The root tsconfig.json's project references only cover the app # (tsconfig.app.json/tsconfig.node.json) -- `npx tsc -b` never From 470976de1e3d40a7ccf8cfb5130c317dabbd1100 Mon Sep 17 00:00:00 2001 From: Tim Nunamaker Date: Thu, 5 Nov 2026 21:39:01 -0600 Subject: [PATCH 2/2] ci: run browser tests on Google Chrome stable on ubuntu-latest Patchright publishes no Chromium build for ubuntu-latest (26.04), so its installer skips the download and the browser tests fail. This keeps ubuntu-latest, installs Google Chrome stable from Google's package, and runs the tests with PDPP_BROWSER_CHANNEL=chrome. Assisted-by: AI Signed-off-by: Tim Nunamaker --- .../reference-implementation-postgres.yml | 19 ++++++------ .../workflows/reference-implementation.yml | 30 ++++++++----------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/.github/workflows/reference-implementation-postgres.yml b/.github/workflows/reference-implementation-postgres.yml index 3ed72fc31..949f68dfe 100644 --- a/.github/workflows/reference-implementation-postgres.yml +++ b/.github/workflows/reference-implementation-postgres.yml @@ -44,11 +44,7 @@ permissions: jobs: test-postgres: name: test reference implementation (postgres) - # Pinned, not ubuntu-latest: latest moved to 26.04, for which Patchright publishes - # no Chromium build, so the browser tests cannot run. Lift the pin once Patchright - # supports the new image (its install step then stops printing "Skipping the - # optional browser download"). - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest timeout-minutes: 120 steps: - name: Checkout @@ -77,10 +73,14 @@ jobs: - name: Install dependencies run: npm ci - # The reference tests drive a real Chromium; install it explicitly rather - # than relying on the dependency postinstall to have fetched one. - - name: Install Chromium for browser tests - run: npx patchright install chromium + # Patchright publishes no Chromium build for ubuntu-latest (26.04) yet. + # Google Chrome stable ships for it, so the browser tests run on the + # branded channel (PDPP_BROWSER_CHANNEL=chrome on the test step). + - name: Install Google Chrome for browser tests + run: | + wget -q -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + sudo apt-get install -y /tmp/chrome.deb + google-chrome --version - name: Build workspace packages run: | @@ -95,6 +95,7 @@ jobs: - name: Test reference implementation (postgres) env: + PDPP_BROWSER_CHANNEL: chrome PDPP_OWNER_PASSWORD: reference-implementation-ci TEST_SANDBOX_PG_UNSAFE_HOST: "1" # test/search-index-repair-correctness.postgres.test.ts has a 20k-record diff --git a/.github/workflows/reference-implementation.yml b/.github/workflows/reference-implementation.yml index 2b34370b6..b3720c52a 100644 --- a/.github/workflows/reference-implementation.yml +++ b/.github/workflows/reference-implementation.yml @@ -139,9 +139,7 @@ jobs: name: typecheck reference implementation needs: classify if: needs.classify.outputs.reference_impacting == 'true' && needs.classify.outputs.has_content == 'true' - # Pinned to the same image as the test shards: both save the node_modules cache - # under one key, so a different image here would write a tree the shards restore. - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout @@ -169,7 +167,7 @@ jobs: packages/local-collector/node_modules apps/console/node_modules ~/.cache/ms-playwright - key: node-modules-v3-ubuntu-24.04-node24.22.1-${{ hashFiles('package-lock.json') }} + key: node-modules-v3-${{ runner.os }}-node24.22.1-${{ hashFiles('package-lock.json') }} - name: Install dependencies if: steps.node-modules-cache.outputs.cache-hit != 'true' @@ -207,11 +205,7 @@ jobs: name: test reference implementation shard ${{ matrix.shard }} needs: classify if: needs.classify.outputs.reference_impacting == 'true' && needs.classify.outputs.has_content == 'true' - # Pinned, not ubuntu-latest: latest moved to 26.04, for which Patchright publishes - # no Chromium build, so the browser tests cannot run. Lift the pin once Patchright - # supports the new image (its install step then stops printing "Skipping the - # optional browser download"). - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest timeout-minutes: 20 strategy: fail-fast: false @@ -243,7 +237,7 @@ jobs: packages/local-collector/node_modules apps/console/node_modules ~/.cache/ms-playwright - key: node-modules-v3-ubuntu-24.04-node24.22.1-${{ hashFiles('package-lock.json') }} + key: node-modules-v3-${{ runner.os }}-node24.22.1-${{ hashFiles('package-lock.json') }} - name: Install dependencies if: steps.node-modules-cache.outputs.cache-hit != 'true' @@ -262,13 +256,14 @@ jobs: npm --prefix reference-implementation/vendor/mcp-server run build npm --prefix reference-implementation/vendor/cli run build - # The reference tests drive a real Chromium. Install it explicitly instead of - # relying on the cache above to carry it: the cache is shared with jobs that - # never use a browser, and a cold cache on an image Patchright does not - # support silently produced a tree without one. This is a no-op when the - # browser is already present. - - name: Install Chromium for browser tests - run: npx patchright install chromium + # Patchright publishes no Chromium build for ubuntu-latest (26.04) yet. + # Google Chrome stable ships for it, so the browser tests run on the + # branded channel (PDPP_BROWSER_CHANNEL=chrome on the test step). + - name: Install Google Chrome for browser tests + run: | + wget -q -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + sudo apt-get install -y /tmp/chrome.deb + google-chrome --version - name: Build workspace packages # The root tsconfig.json's project references only cover the app @@ -295,6 +290,7 @@ jobs: - name: Test reference implementation env: + PDPP_BROWSER_CHANNEL: chrome PDPP_OWNER_PASSWORD: reference-implementation-ci PDPP_TEST_PROFILE: "memory-default" PDPP_TEST_SHARD_INDEX: ${{ matrix.shard }}