[ci] Update playwright to 1.61.0 (#94871)

[Playwright v1.61.0 adds support for
ubuntu-26.04](https://github.com/microsoft/playwright/releases/tag/v1.61.0).
When Lindsey created our arm64 runners (see
https://github.com/vercel/next.js/pull/94870), [he picked the
ubuntu-26.04
image](https://vercel.slack.com/archives/C01LN7C5QR5/p1781608258610389?thread_ts=1781118174.353839&cid=C01LN7C5QR5)
(which is technically still [in
preview](https://github.com/actions/runner-images#available-images), but
IMO that's fine).
This commit is contained in:
Benjamin Woodruff
2026-06-18 21:39:11 +00:00
committed by GitHub
parent 7be5e2cd47
commit 7cb54ace75
9 changed files with 74 additions and 77 deletions
+1 -1
View File
@@ -12,6 +12,6 @@
"devDependencies": {
"rimraf": "6.0.1",
"next": "workspace:*",
"playwright": "1.58.2"
"playwright": "1.61.0"
}
}
+3 -3
View File
@@ -245,8 +245,8 @@
"octokit": "3.1.0",
"outdent": "0.8.0",
"pixrem": "5.0.0",
"playwright": "1.58.2",
"playwright-chromium": "1.58.2",
"playwright": "1.61.0",
"playwright-chromium": "1.61.0",
"postcss": "8.5.10",
"postcss-nested": "4.2.1",
"postcss-pseudoelements": "5.0.0",
@@ -345,7 +345,7 @@
"@modelcontextprotocol/sdk": "patches/@modelcontextprotocol__sdk.patch",
"@vercel/blob": "patches/@vercel__blob.patch",
"postcss-scss": "patches/postcss-scss.patch",
"playwright-core@1.58.2": "patches/playwright-core@1.58.2.patch"
"playwright-core@1.61.0": "patches/playwright-core@1.61.0.patch"
}
}
}
+1 -1
View File
@@ -25,7 +25,7 @@
}
},
"devDependencies": {
"@playwright/test": "1.58.2",
"@playwright/test": "1.61.0",
"typescript": "6.0.2"
}
}
+1 -1
View File
@@ -170,7 +170,7 @@
"@next/react-refresh-utils": "16.3.0-canary.57",
"@next/swc": "16.3.0-canary.57",
"@opentelemetry/api": "1.6.0",
"@playwright/test": "1.58.2",
"@playwright/test": "1.61.0",
"@rspack/core": "1.6.7",
"@storybook/addon-a11y": "8.6.0",
"@storybook/addon-essentials": "8.6.0",
-24
View File
@@ -1,24 +0,0 @@
diff --git a/lib/client/browserContext.js b/lib/client/browserContext.js
index 0b5cb3356cdc4917d9198a184f1a2cb391924453..3ad3d86bebde7a7e25af4f94b964d003e10d40a0 100644
--- a/lib/client/browserContext.js
+++ b/lib/client/browserContext.js
@@ -183,6 +183,19 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
_onRequestFailed(request, responseEndTiming, failureText, page) {
request._failureText = failureText || null;
request._setResponseEndTiming(responseEndTiming);
+ // PATCH (next.js): mirror what `_onRequestFinished` does for the
+ // response, so callers awaiting `response.finished()` don't hang on
+ // failed/canceled requests. The server side already resolves the
+ // server-side `_finishedPromise` from `_onLoadingFailed` (see
+ // chromium/crNetworkManager.js), but only the `requestFinished` IPC
+ // carries a response payload — `requestFailed` does not, so the
+ // client-side Response's `_finishedPromise` is otherwise never
+ // resolved. We look up the response via the existing async RPC and
+ // resolve it fire-and-forget; catch is a no-op so we never produce
+ // an unhandled rejection if the context tears down concurrently.
+ request.response().then((response) => {
+ if (response !== null) response._finishedPromise.resolve(null);
+ }).catch(() => {});
this.emit(import_events.Events.BrowserContext.RequestFailed, request);
if (page)
page.emit(import_events.Events.Page.RequestFailed, request);
+24
View File
@@ -0,0 +1,24 @@
diff --git a/lib/coreBundle.js b/lib/coreBundle.js
index 1d36a373cb14a856c9a69e218df5183bb250d2f0..560bd6cc4fc3fd11937b6039279bbfcb08152172 100644
--- a/lib/coreBundle.js
+++ b/lib/coreBundle.js
@@ -60688,6 +60688,19 @@ var init_browserContext2 = __esm({
_onRequestFailed(request2, responseEndTiming, failureText, page) {
request2._failureText = failureText || null;
request2._setResponseEndTiming(responseEndTiming);
+ // PATCH (next.js): mirror what `_onRequestFinished` does for the
+ // response, so callers awaiting `response.finished()` don't hang on
+ // failed/canceled requests. The server side already resolves the
+ // server-side `_finishedPromise` from `_onLoadingFailed` (see
+ // chromium/crNetworkManager.js), but only the `requestFinished` IPC
+ // carries a response payload — `requestFailed` does not, so the
+ // client-side Response's `_finishedPromise` is otherwise never
+ // resolved. We look up the response via the existing async RPC and
+ // resolve it fire-and-forget; catch is a no-op so we never produce
+ // an unhandled rejection if the context tears down concurrently.
+ request2.response().then((response2) => {
+ if (response2 !== null) response2._finishedPromise.resolve(null);
+ }).catch(() => {});
this.emit(Events.BrowserContext.RequestFailed, request2);
if (page)
page.emit(Events.Page.RequestFailed, request2);
+38 -46
View File
@@ -43,9 +43,9 @@ patchedDependencies:
[email protected]:
hash: 587688821244aaee46680929cd869947377a284ac1b30c9ae8660a5ea7d2be67
path: patches/[email protected]
playwright-core@1.58.2:
hash: 064d5ffec38700c624b4c1a08fa7a1833aecdf196702f97d61f655385d18f886
path: patches/playwright-core@1.58.2.patch
playwright-core@1.61.0:
hash: 1a56033776b3ac43fe8f35b6c9afa6d9f13a0d5163892f2a31d7661504b93b93
path: patches/playwright-core@1.61.0.patch
postcss-scss:
hash: 88893e632b3e099730dc0ffcc93cf3654b31c277da9e2796e822f6b5aeedc093
path: patches/postcss-scss.patch
@@ -481,11 +481,11 @@ importers:
specifier: 5.0.0
version: 5.0.0
playwright:
specifier: 1.58.2
version: 1.58.2
specifier: 1.61.0
version: 1.61.0
playwright-chromium:
specifier: 1.58.2
version: 1.58.2
specifier: 1.61.0
version: 1.61.0
postcss:
specifier: 8.5.10
version: 8.5.10
@@ -689,7 +689,7 @@ importers:
version: 0.554.0([email protected])
next:
specifier: 16.2.3
version: 16.2.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/test@1.58.2)([email protected])([email protected])([email protected]([email protected]))([email protected])([email protected])
version: 16.2.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/test@1.61.0)([email protected])([email protected])([email protected]([email protected]))([email protected])([email protected])
next-themes:
specifier: ^0.4.6
version: 0.4.6([email protected]([email protected]))([email protected])
@@ -800,8 +800,8 @@ importers:
specifier: workspace:*
version: link:../../packages/next
playwright:
specifier: 1.58.2
version: 1.58.2
specifier: 1.61.0
version: 1.61.0
rimraf:
specifier: 6.0.1
version: 6.0.1
@@ -1202,8 +1202,8 @@ importers:
specifier: 1.6.0
version: 1.6.0
'@playwright/test':
specifier: 1.58.2
version: 1.58.2
specifier: 1.61.0
version: 1.61.0
'@rspack/core':
specifier: 1.6.7
version: 1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/[email protected])
@@ -1380,7 +1380,7 @@ importers:
version: 3.0.0
axe-playwright:
specifier: 2.0.3
version: 2.0.3(playwright@1.58.2)
version: 2.0.3(playwright@1.61.0)
babel-loader:
specifier: 10.0.0
version: 10.0.0(@babel/[email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
@@ -1855,8 +1855,8 @@ importers:
packages/next-playwright:
devDependencies:
'@playwright/test':
specifier: 1.58.2
version: 1.58.2
specifier: 1.61.0
version: 1.61.0
typescript:
specifier: 6.0.2
version: 6.0.2
@@ -2023,8 +2023,8 @@ importers:
specifier: ^2.0.5
version: 2.0.5
playwright-chromium:
specifier: 1.58.2
version: 1.58.2
specifier: 1.61.0
version: 1.61.0
split2:
specifier: ^4.2.0
version: 4.2.0
@@ -4856,8 +4856,8 @@ packages:
resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
'@playwright/test@1.58.2':
resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==}
'@playwright/test@1.61.0':
resolution: {integrity: sha512-cKA5B6lpFEMyMGjxF54QihfYpB4FkEGH+qZhtArDEG+wezQAJY8Pq6C7T1SjWz+FFzt3TbyoXBQYk/0292TdJA==}
engines: {node: '>=18'}
hasBin: true
@@ -14566,23 +14566,18 @@ packages:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
engines: {node: '>=8'}
playwright-chromium@1.58.2:
resolution: {integrity: sha512-SCoQ3hjBs7FfO46CoOtgAUg77BuYwCni1bzQgm47IUyLBTipnGkLxLnaUNRKXvPYO4hAyt8++Z6wVShVnhrzmw==}
playwright-chromium@1.61.0:
resolution: {integrity: sha512-7gZbsqqLT4WSeK/DUrsAFFvPdzP3Bh3kn9sK+YLZ9Q2e6CB+vd0TeqHvmkPQKK2IyXhPNGx5DV0YbEP6sTFBHA==}
engines: {node: '>=18'}
hasBin: true
playwright-core@1.51.1:
resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==}
playwright-core@1.61.0:
resolution: {integrity: sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==}
engines: {node: '>=18'}
hasBin: true
playwright[email protected]:
resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==}
engines: {node: '>=18'}
hasBin: true
[email protected]:
resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==}
playwright@1.61.0:
resolution: {integrity: sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==}
engines: {node: '>=18'}
hasBin: true
@@ -15477,7 +15472,6 @@ packages:
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
deprecated: |-
You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
[email protected]:
@@ -21875,9 +21869,9 @@ snapshots:
'@pkgr/[email protected]': {}
'@playwright/test@1.58.2':
'@playwright/test@1.61.0':
dependencies:
playwright: 1.58.2
playwright: 1.61.0
'@polka/[email protected]': {}
@@ -23078,7 +23072,7 @@ snapshots:
jest-serializer-html: 7.1.0
jest-watch-typeahead: 2.2.2([email protected](@types/[email protected](patch_hash=9c31d25336aea4076b3cb942c35e59fd160c540947f01ea455a060367153f9fd))([email protected]))
nyc: 15.1.0
playwright: 1.58.2
playwright: 1.61.0
storybook: 8.6.0([email protected])
transitivePeerDependencies:
- '@swc/helpers'
@@ -24752,14 +24746,14 @@ snapshots:
axe-core: 4.10.0
mustache: 4.2.0
[email protected](playwright@1.58.2):
[email protected](playwright@1.61.0):
dependencies:
'@types/junit-report-builder': 3.0.2
axe-core: 4.10.0
axe-html-reporter: 2.2.11([email protected])
junit-report-builder: 5.1.1
picocolors: 1.1.1
playwright: 1.58.2
playwright: 1.61.0
[email protected]:
dependencies:
@@ -30515,7 +30509,7 @@ snapshots:
jest-process-manager: 0.4.0([email protected])
jest-runner: 29.7.0
nyc: 15.1.0
playwright-core: 1.51.1
playwright-core: 1.61.0(patch_hash=1a56033776b3ac43fe8f35b6c9afa6d9f13a0d5163892f2a31d7661504b93b93)
rimraf: 3.0.2
uuid: 8.3.2
transitivePeerDependencies:
@@ -32743,7 +32737,7 @@ snapshots:
[email protected]: {}
[email protected](@babel/[email protected])(@opentelemetry/[email protected])(@playwright/test@1.58.2)([email protected])([email protected])([email protected]([email protected]))([email protected])([email protected]):
[email protected](@babel/[email protected])(@opentelemetry/[email protected])(@playwright/test@1.61.0)([email protected])([email protected])([email protected]([email protected]))([email protected])([email protected]):
dependencies:
'@next/env': 16.2.3
'@swc/helpers': 0.5.15
@@ -32763,7 +32757,7 @@ snapshots:
'@next/swc-win32-arm64-msvc': 16.2.3
'@next/swc-win32-x64-msvc': 16.2.3
'@opentelemetry/api': 1.9.0
'@playwright/test': 1.58.2
'@playwright/test': 1.61.0
babel-plugin-react-compiler: 0.0.0-experimental-1371fcb-20260227
sass: 1.77.8
sharp: 0.34.5
@@ -33793,17 +33787,15 @@ snapshots:
dependencies:
find-up: 3.0.0
playwright-chromium@1.58.2:
playwright-chromium@1.61.0:
dependencies:
playwright-core: 1.58.2(patch_hash=064d5ffec38700c624b4c1a08fa7a1833aecdf196702f97d61f655385d18f886)
playwright-core: 1.61.0(patch_hash=1a56033776b3ac43fe8f35b6c9afa6d9f13a0d5163892f2a31d7661504b93b93)
playwright-core@1.51.1: {}
playwright-core@1.61.0(patch_hash=1a56033776b3ac43fe8f35b6c9afa6d9f13a0d5163892f2a31d7661504b93b93): {}
playwright[email protected](patch_hash=064d5ffec38700c624b4c1a08fa7a1833aecdf196702f97d61f655385d18f886): {}
[email protected]:
playwright@1.61.0:
dependencies:
playwright-core: 1.58.2(patch_hash=064d5ffec38700c624b4c1a08fa7a1833aecdf196702f97d61f655385d18f886)
playwright-core: 1.61.0(patch_hash=1a56033776b3ac43fe8f35b6c9afa6d9f13a0d5163892f2a31d7661504b93b93)
optionalDependencies:
fsevents: 2.3.2
@@ -170,6 +170,7 @@ describe.each(['', '/docs'])(
// ensure direct port with mismatching port is blocked
const browser = await next.browser('/about', {
baseUrl: `http://127.0.0.1:${port}`,
permissions: ['local-network-access'],
})
await browser.eval(websocketSnippet)
await retry(async () => {
@@ -306,6 +307,7 @@ describe.each(['', '/docs'])(
const browser = await next.browser('/about', {
baseUrl: `http://127.0.0.1:${port}`,
permissions: ['local-network-access'],
})
await browser.get(`https://example.vercel.sh/`)
await browser.eval(websocketSnippet)
@@ -375,6 +377,7 @@ describe.each(['', '/docs'])(
// ensure direct port with mismatching port is allowed when configured
const browser = await next.browser('/about', {
baseUrl: `http://127.0.0.1:${port}`,
permissions: ['local-network-access'],
})
await browser.eval(websocketSnippet)
await retry(async () => {
@@ -454,6 +457,7 @@ describe.each(['', '/docs'])(
try {
const browser = await next.browser('/about', {
baseUrl: `http://127.0.0.1:${port}`,
permissions: ['local-network-access'],
})
const imageSnippet = `(() => {
@@ -520,6 +524,7 @@ describe.each(['', '/docs'])(
try {
const browser = await next.browser('/', {
baseUrl: `http://127.0.0.1:${port}`,
permissions: ['local-network-access'],
})
await retry(async () => {
+1 -1
View File
@@ -49,7 +49,7 @@
"minimist": "^1.2.8",
"picocolors": "1.0.1",
"pidusage-tree": "^2.0.5",
"playwright-chromium": "1.58.2",
"playwright-chromium": "1.61.0",
"split2": "^4.2.0",
"tree-kill": "^1.2.2"
}