fix: update Playwright for Ubuntu 26.04 support (#30228)

## Problem

Fresh Ubuntu 26.04 workspaces emitted Playwright unsupported-OS warnings
even after upgrading the package. The repository pinned Playwright
1.55.1, and the dogfood image baked in
`PLAYWRIGHT_HOST_PLATFORM_OVERRIDE=ubuntu24.04-x64`, which prevented
native OS detection.

## Fix

Update `@playwright/test` and its lockfile resolutions to 1.63.0, which
supports Ubuntu 26.04, and remove the obsolete platform override from
`dogfood/coder/ubuntu-26.04/Dockerfile.base`.

Companion https://github.com/coder/dogfood/pull/638 upgrades the
separate Playwright MCP installer and clears the inherited override at
runtime for already-published images.

## Validation

- Fresh TEST workspace `startup-warnings-clean` reached ready and
healthy. Its 15 captured startup log files (774 lines) contained zero
`node-gyp: not found`, optional crypto-binding failure, `EBADENGINE`,
Playwright missing-dependency (`without first`), or unsupported-OS
(`BEWARE`) warnings. The logs recorded one native-binding success and
one dashboard start. The preceding fresh-startup test reproduced five
Playwright `BEWARE` warnings.
- Site Chromium `153.0.8010.12` launch/navigation passed. The actual
generated `~/.claude.json` MCP configuration passed launch,
initialization, navigation, and close; the Codex TOML command matched.
Agent-browser smoke testing also passed.
- This used repository commit `d137476055` and the published Ubuntu
26.04 image with the template clearing its inherited platform override.
The image-source removal was not present in the tested image; no
rebuilt-image startup test was performed.
- Earlier frozen-lockfile installation, frontend formatting, checks, and
lint passed. Fresh Chromium downloads, headless-shell and full-Chromium
launch/click/assertion smoke tests, and all 15 Button Storybook tests
passed locally.
- Current CI passed the Ubuntu 26.04 image build, lint, formatting,
generation, JavaScript tests, application E2E tests, Flake Check, and
the required-check aggregator. The newly built image has not been
startup-tested.
[Storybook/Pixel](https://github.com/coder/coder/actions/runs/36856302955/job/110349479622)
again failed with HTTP 500 (`could not record snapshot`), aborting after
11 failed snapshot reports.

<details>
<summary>Implementation decisions and verification limits</summary>

Runtime verification used inactive template version
`startup-warnings-native-os` (`7a0ea80e-60ef-4fb0-abc9-fbb8ec32d9a3`).
The active shared version `cf3c11f` remained unchanged.

Use native Ubuntu 26.04 support rather than filtering warnings or
forcing fallback builds. Remove the override at its image source and
clear it in the companion template so existing images benefit without
waiting for a rebuild. Keep dependency changes limited to Playwright and
its lockfile resolutions.

Firefox, WebKit, and local Nix compatibility remain unverified. An
earlier dependency-install dry run reported missing system packages
despite successful Chromium smoke tests. Local Storybook retained its
existing Vitest package-version mismatch warning and teardown timeout.

The Mux AI SDK/Ollama peer-dependency warning ([upstream
issue](https://github.com/coder/xum/issues/5372)) and generic
agent-browser Linux advisory remain. Provisioning also reports unrelated
`coder_agent.dir` deprecation and Desktop file-sync warnings. This does
not claim a warning-free workspace.

</details>

> 🤖 This PR was created with the help of Coder Agents, and needs a human
review. 🧑💻
This commit is contained in:
Atif Ali
2026-10-01 20:12:40 +05:00
committed by GitHub
parent d11809f095
commit 4691192299
3 changed files with 25 additions and 38 deletions
@@ -274,6 +274,3 @@ ENV GOPRIVATE="coder.com,cdr.dev,go.coder.com,github.com/cdr,github.com/coder"
# Increase memory allocation to NodeJS
ENV NODE_OPTIONS="--max-old-space-size=8192"
# This should be removed when we can upgrade to Playwright 1.61.
ENV PLAYWRIGHT_HOST_PLATFORM_OVERRIDE=ubuntu24.04-x64
+1 -1
View File
@@ -119,7 +119,7 @@
"@biomejs/biome": "2.5.10",
"@coder/pixel-storybook": "0.3.0",
"@octokit/types": "12.6.0",
"@playwright/test": "1.55.1",
"@playwright/test": "1.63.0",
"@rolldown/plugin-babel": "0.2.3",
"@shadcn/lint": "0.2.0",
"@storybook/addon-a11y": "10.3.3",
+24 -34
View File
@@ -244,13 +244,13 @@ importers:
version: 2.5.10
'@coder/pixel-storybook':
specifier: 0.3.0
version: 0.3.0(playwright-core@1.55.1)(storybook@10.5.10(@types/react@19.2.18)(prettier@3.4.1)(react@19.2.8))
version: 0.3.0(playwright-core@1.63.0)(storybook@10.5.10(@types/react@19.2.18)(prettier@3.4.1)(react@19.2.8))
'@octokit/types':
specifier: 12.6.0
version: 12.6.0
'@playwright/test':
specifier: 1.55.1
version: 1.55.1
specifier: 1.63.0
version: 1.63.0
'@rolldown/plugin-babel':
specifier: 0.2.3
version: 0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.2.4)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))
@@ -346,7 +346,7 @@ importers:
version: 6.1.0(@rolldown/plugin-babel@0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.2.4)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3)))(babel-plugin-react-compiler@1.0.0)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))
'@vitest/browser-playwright':
specifier: 4.1.10
version: 4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.55.1)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
version: 4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.63.0)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
babel-plugin-react-compiler:
specifier: 1.0.0
version: 1.0.0
@@ -1792,9 +1792,9 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz}
engines: {node: '>=14'}
'@playwright/test@1.55.1':
resolution: {integrity: sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==, tarball: https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz}
engines: {node: '>=18'}
'@playwright/test@1.63.0':
resolution: {integrity: sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==, tarball: https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz}
engines: {node: '>=20'}
hasBin: true
'@polka/url@1.0.0-next.29':
@@ -4459,11 +4459,6 @@ packages:
resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz}
engines: {node: '>=14.14'}
fsevents@2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -5593,14 +5588,14 @@ packages:
picoquery@2.5.0:
resolution: {integrity: sha512-j1kgOFxtaCyoFCkpoYG2Oj3OdGakadO7HZ7o5CqyRazlmBekKhbDoUnNnXASE07xSY4nDImWZkrZv7toSxMi/g==, tarball: https://registry.npmjs.org/picoquery/-/picoquery-2.5.0.tgz}
playwright-core@1.55.1:
resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==, tarball: https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz}
engines: {node: '>=18'}
playwright-core@1.63.0:
resolution: {integrity: sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==, tarball: https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz}
engines: {node: '>=20'}
hasBin: true
playwright@1.55.1:
resolution: {integrity: sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==, tarball: https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz}
engines: {node: '>=18'}
playwright@1.63.0:
resolution: {integrity: sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==, tarball: https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz}
engines: {node: '>=20'}
hasBin: true
pngjs@7.0.0:
@@ -7053,11 +7048,11 @@ snapshots:
'@chevrotain/types@11.1.2': {}
'@coder/pixel-storybook@0.3.0(playwright-core@1.55.1)(storybook@10.5.10(@types/react@19.2.18)(prettier@3.4.1)(react@19.2.8))':
'@coder/pixel-storybook@0.3.0(playwright-core@1.63.0)(storybook@10.5.10(@types/react@19.2.18)(prettier@3.4.1)(react@19.2.8))':
dependencies:
get-port-please: 3.1.2
jsonc-parser: 3.3.1
playwright-core: 1.55.1
playwright-core: 1.63.0
serve-handler: 6.1.7
storybook: 10.5.10(@types/react@19.2.18)(prettier@3.4.1)(react@19.2.8)
zod: 3.23.8
@@ -7994,9 +7989,9 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@playwright/test@1.55.1':
'@playwright/test@1.63.0':
dependencies:
playwright: 1.55.1
playwright: 1.63.0
'@polka/url@1.0.0-next.29': {}
@@ -9084,7 +9079,7 @@ snapshots:
storybook: 10.5.10(@types/react@19.2.18)(prettier@3.4.1)(react@19.2.8)
optionalDependencies:
'@vitest/browser': 4.1.10(msw@2.4.8(typescript@6.0.2))(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
'@vitest/browser-playwright': 4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.55.1)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
'@vitest/browser-playwright': 4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.63.0)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
'@vitest/runner': 4.1.11
vitest: 4.1.11(@types/node@20.19.41)(@vitest/browser-playwright@4.1.10)(jsdom@27.2.0)(msw@2.4.8(typescript@6.0.2))(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))
transitivePeerDependencies:
@@ -9672,11 +9667,11 @@ snapshots:
'@rolldown/plugin-babel': 0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.2.4)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))
babel-plugin-react-compiler: 1.0.0
'@vitest/browser-playwright@4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.55.1)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)':
'@vitest/browser-playwright@4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.63.0)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)':
dependencies:
'@vitest/browser': 4.1.10(msw@2.4.8(typescript@6.0.2))(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
'@vitest/mocker': 4.1.10(msw@2.4.8(typescript@6.0.2))(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))
playwright: 1.55.1
playwright: 1.63.0
tinyrainbow: 3.1.1
vitest: 4.1.11(@types/node@20.19.41)(@vitest/browser-playwright@4.1.10)(jsdom@27.2.0)(msw@2.4.8(typescript@6.0.2))(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))
transitivePeerDependencies:
@@ -10752,9 +10747,6 @@ snapshots:
jsonfile: 6.2.1
universalify: 2.0.1
fsevents@2.3.2:
optional: true
fsevents@2.3.3:
optional: true
@@ -12193,13 +12185,11 @@ snapshots:
picoquery@2.5.0: {}
playwright-core@1.55.1: {}
playwright-core@1.63.0: {}
playwright@1.55.1:
playwright@1.63.0:
dependencies:
playwright-core: 1.55.1
optionalDependencies:
fsevents: 2.3.2
playwright-core: 1.63.0
pngjs@7.0.0: {}
@@ -13410,7 +13400,7 @@ snapshots:
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 20.19.41
'@vitest/browser-playwright': 4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.55.1)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
'@vitest/browser-playwright': 4.1.10(msw@2.4.8(typescript@6.0.2))(playwright@1.63.0)(vite@8.2.1(@types/node@20.19.41)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.11)
jsdom: 27.2.0
transitivePeerDependencies:
- msw