From 89e9f9979d01a69936b5393246c4b352318d93e7 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Tue, 28 Jul 2026 11:50:40 +0100 Subject: [PATCH] chore: remove ubuntu 20.04 browser builds --- packages/playwright-core/browsers.json | 4 +- .../src/server/registry/index.ts | 34 +-- .../src/server/registry/nativeDeps.ts | 231 +----------------- .../src/server/webkit/wkPage.ts | 9 +- packages/utils/hostPlatform.ts | 2 +- 5 files changed, 22 insertions(+), 258 deletions(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index 2999e0c14dac8..ec64480e31080 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -49,9 +49,7 @@ "installByDefault": true, "revisionOverrides": { "mac14": "2251", - "mac14-arm64": "2251", - "ubuntu20.04-x64": "2092", - "ubuntu20.04-arm64": "2092" + "mac14-arm64": "2251" }, "browserVersion": "26.5", "title": "WebKit" diff --git a/packages/playwright-core/src/server/registry/index.ts b/packages/playwright-core/src/server/registry/index.ts index 9b1583e3f3a9a..754afe078754b 100644 --- a/packages/playwright-core/src/server/registry/index.ts +++ b/packages/playwright-core/src/server/registry/index.ts @@ -146,12 +146,12 @@ const DOWNLOAD_PATHS: Record = { 'chromium': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': cftUrl('linux64/chrome-linux64.zip'), + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': cftUrl('linux64/chrome-linux64.zip'), 'ubuntu24.04-x64': cftUrl('linux64/chrome-linux64.zip'), 'ubuntu26.04-x64': cftUrl('linux64/chrome-linux64.zip'), 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'ubuntu26.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', @@ -181,12 +181,12 @@ const DOWNLOAD_PATHS: Record = { 'chromium-headless-shell': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu24.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu26.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'ubuntu26.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', @@ -216,12 +216,12 @@ const DOWNLOAD_PATHS: Record = { 'chromium-tip-of-tree': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': cftUrl('linux64/chrome-linux64.zip'), + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': cftUrl('linux64/chrome-linux64.zip'), 'ubuntu24.04-x64': cftUrl('linux64/chrome-linux64.zip'), 'ubuntu26.04-x64': cftUrl('linux64/chrome-linux64.zip'), 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'ubuntu26.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', @@ -251,12 +251,12 @@ const DOWNLOAD_PATHS: Record = { 'chromium-tip-of-tree-headless-shell': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu24.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu26.04-x64': cftUrl('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'ubuntu26.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', @@ -286,12 +286,12 @@ const DOWNLOAD_PATHS: Record = { 'firefox': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': 'builds/firefox/%s/firefox-ubuntu-20.04.zip', + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': 'builds/firefox/%s/firefox-ubuntu-22.04.zip', 'ubuntu24.04-x64': 'builds/firefox/%s/firefox-ubuntu-24.04.zip', 'ubuntu26.04-x64': 'builds/firefox/%s/firefox-ubuntu-24.04.zip', 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/firefox/%s/firefox-ubuntu-20.04-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/firefox/%s/firefox-ubuntu-22.04-arm64.zip', 'ubuntu24.04-arm64': 'builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip', 'ubuntu26.04-arm64': 'builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip', @@ -321,7 +321,7 @@ const DOWNLOAD_PATHS: Record = { 'firefox-beta': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-20.04.zip', + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04.zip', 'ubuntu24.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip', 'ubuntu26.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip', @@ -356,12 +356,12 @@ const DOWNLOAD_PATHS: Record = { 'webkit': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': 'builds/webkit/%s/webkit-ubuntu-20.04.zip', + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': 'builds/webkit/%s/webkit-ubuntu-22.04.zip', 'ubuntu24.04-x64': 'builds/webkit/%s/webkit-ubuntu-24.04.zip', 'ubuntu26.04-x64': 'builds/webkit/%s/webkit-ubuntu-26.04.zip', 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/webkit/%s/webkit-ubuntu-20.04-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/webkit/%s/webkit-ubuntu-22.04-arm64.zip', 'ubuntu24.04-arm64': 'builds/webkit/%s/webkit-ubuntu-24.04-arm64.zip', 'ubuntu26.04-arm64': 'builds/webkit/%s/webkit-ubuntu-26.04-arm64.zip', @@ -391,12 +391,12 @@ const DOWNLOAD_PATHS: Record = { 'ffmpeg': { '': undefined, 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'ubuntu24.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'ubuntu26.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'ubuntu26.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', @@ -461,12 +461,12 @@ const DOWNLOAD_PATHS: Record = { 'android': { '': 'builds/android/%s/android.zip', 'ubuntu18.04-x64': undefined, - 'ubuntu20.04-x64': 'builds/android/%s/android.zip', + 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': 'builds/android/%s/android.zip', 'ubuntu24.04-x64': 'builds/android/%s/android.zip', 'ubuntu26.04-x64': 'builds/android/%s/android.zip', 'ubuntu18.04-arm64': undefined, - 'ubuntu20.04-arm64': 'builds/android/%s/android.zip', + 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/android/%s/android.zip', 'ubuntu24.04-arm64': 'builds/android/%s/android.zip', 'ubuntu26.04-arm64': 'builds/android/%s/android.zip', diff --git a/packages/playwright-core/src/server/registry/nativeDeps.ts b/packages/playwright-core/src/server/registry/nativeDeps.ts index 5e02aabbafd57..1a75f17cb92d7 100644 --- a/packages/playwright-core/src/server/registry/nativeDeps.ts +++ b/packages/playwright-core/src/server/registry/nativeDeps.ts @@ -16,224 +16,9 @@ // - This file is used to execute 'npx playwright install-deps' // - The reverse mappings "lib2package" are generated with the following script: -// ./utils/linux-browser-dependencies/run.sh ubuntu:20.04 +// ./utils/linux-browser-dependencies/run.sh ubuntu:22.04 export const deps: any = { - 'ubuntu20.04-x64': { - tools: [ - 'xvfb', - 'fonts-noto-color-emoji', - 'ttf-unifont', - 'libfontconfig', - 'libfreetype6', - 'xfonts-cyrillic', - 'xfonts-scalable', - 'fonts-liberation', - 'fonts-ipafont-gothic', - 'fonts-wqy-zenhei', - 'fonts-tlwg-loma-otf', - 'ttf-ubuntu-font-family', - ], - chromium: [ - 'fonts-liberation', - 'libasound2', - 'libatk-bridge2.0-0', - 'libatk1.0-0', - 'libatspi2.0-0', - 'libcairo2', - 'libcups2', - 'libdbus-1-3', - 'libdrm2', - 'libegl1', - 'libgbm1', - 'libglib2.0-0', - 'libgtk-3-0', - 'libnspr4', - 'libnss3', - 'libpango-1.0-0', - 'libx11-6', - 'libx11-xcb1', - 'libxcb1', - 'libxcomposite1', - 'libxdamage1', - 'libxext6', - 'libxfixes3', - 'libxrandr2', - 'libxshmfence1', - ], - firefox: [ - 'ffmpeg', - 'libatk1.0-0', - 'libcairo-gobject2', - 'libcairo2', - 'libdbus-1-3', - 'libdbus-glib-1-2', - 'libfontconfig1', - 'libfreetype6', - 'libgdk-pixbuf2.0-0', - 'libglib2.0-0', - 'libgtk-3-0', - 'libpango-1.0-0', - 'libpangocairo-1.0-0', - 'libpangoft2-1.0-0', - 'libx11-6', - 'libx11-xcb1', - 'libxcb-shm0', - 'libxcb1', - 'libxcomposite1', - 'libxcursor1', - 'libxdamage1', - 'libxext6', - 'libxfixes3', - 'libxi6', - 'libxrender1', - 'libxt6', - 'libxtst6' - ], - webkit: [ - 'libenchant-2-2', - 'libflite1', - 'libx264-155', - 'libatk-bridge2.0-0', - 'libatk1.0-0', - 'libcairo2', - 'libegl1', - 'libenchant1c2a', - 'libepoxy0', - 'libevdev2', - 'libfontconfig1', - 'libfreetype6', - 'libgdk-pixbuf2.0-0', - 'libgl1', - 'libgles2', - 'libglib2.0-0', - 'libgtk-3-0', - 'libgudev-1.0-0', - 'libharfbuzz-icu0', - 'libharfbuzz0b', - 'libhyphen0', - 'libicu66', - 'libjpeg-turbo8', - 'libnghttp2-14', - 'libnotify4', - 'libopengl0', - 'libopenjp2-7', - 'libopus0', - 'libpango-1.0-0', - 'libpng16-16', - 'libsecret-1-0', - 'libvpx6', - 'libwayland-client0', - 'libwayland-egl1', - 'libwayland-server0', - 'libwebp6', - 'libwebpdemux2', - 'libwoff1', - 'libx11-6', - 'libxcomposite1', - 'libxdamage1', - 'libxkbcommon0', - 'libxml2', - 'libxslt1.1', - 'libatomic1', - 'libevent-2.1-7', - ], - lib2package: { - 'libflite.so.1': 'libflite1', - 'libflite_usenglish.so.1': 'libflite1', - 'libflite_cmu_grapheme_lang.so.1': 'libflite1', - 'libflite_cmu_grapheme_lex.so.1': 'libflite1', - 'libflite_cmu_indic_lang.so.1': 'libflite1', - 'libflite_cmu_indic_lex.so.1': 'libflite1', - 'libflite_cmulex.so.1': 'libflite1', - 'libflite_cmu_time_awb.so.1': 'libflite1', - 'libflite_cmu_us_awb.so.1': 'libflite1', - 'libflite_cmu_us_kal16.so.1': 'libflite1', - 'libflite_cmu_us_kal.so.1': 'libflite1', - 'libflite_cmu_us_rms.so.1': 'libflite1', - 'libflite_cmu_us_slt.so.1': 'libflite1', - 'libx264.so': 'libx264-155', - 'libasound.so.2': 'libasound2', - 'libatk-1.0.so.0': 'libatk1.0-0', - 'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0', - 'libatspi.so.0': 'libatspi2.0-0', - 'libcairo-gobject.so.2': 'libcairo-gobject2', - 'libcairo.so.2': 'libcairo2', - 'libcups.so.2': 'libcups2', - 'libdbus-1.so.3': 'libdbus-1-3', - 'libdbus-glib-1.so.2': 'libdbus-glib-1-2', - 'libdrm.so.2': 'libdrm2', - 'libEGL.so.1': 'libegl1', - 'libenchant.so.1': 'libenchant1c2a', - 'libevdev.so.2': 'libevdev2', - 'libepoxy.so.0': 'libepoxy0', - 'libfontconfig.so.1': 'libfontconfig1', - 'libfreetype.so.6': 'libfreetype6', - 'libgbm.so.1': 'libgbm1', - 'libgdk_pixbuf-2.0.so.0': 'libgdk-pixbuf2.0-0', - 'libgdk-3.so.0': 'libgtk-3-0', - 'libgdk-x11-2.0.so.0': 'libgtk2.0-0', - 'libgio-2.0.so.0': 'libglib2.0-0', - 'libGL.so.1': 'libgl1', - 'libGLESv2.so.2': 'libgles2', - 'libglib-2.0.so.0': 'libglib2.0-0', - 'libgmodule-2.0.so.0': 'libglib2.0-0', - 'libgobject-2.0.so.0': 'libglib2.0-0', - 'libgthread-2.0.so.0': 'libglib2.0-0', - 'libgtk-3.so.0': 'libgtk-3-0', - 'libgtk-x11-2.0.so.0': 'libgtk2.0-0', - 'libgudev-1.0.so.0': 'libgudev-1.0-0', - 'libharfbuzz-icu.so.0': 'libharfbuzz-icu0', - 'libharfbuzz.so.0': 'libharfbuzz0b', - 'libhyphen.so.0': 'libhyphen0', - 'libicui18n.so.66': 'libicu66', - 'libicuuc.so.66': 'libicu66', - 'libjpeg.so.8': 'libjpeg-turbo8', - 'libnotify.so.4': 'libnotify4', - 'libnspr4.so': 'libnspr4', - 'libnss3.so': 'libnss3', - 'libnssutil3.so': 'libnss3', - 'libOpenGL.so.0': 'libopengl0', - 'libopenjp2.so.7': 'libopenjp2-7', - 'libopus.so.0': 'libopus0', - 'libpango-1.0.so.0': 'libpango-1.0-0', - 'libpangocairo-1.0.so.0': 'libpangocairo-1.0-0', - 'libpangoft2-1.0.so.0': 'libpangoft2-1.0-0', - 'libpng16.so.16': 'libpng16-16', - 'libsecret-1.so.0': 'libsecret-1-0', - 'libsmime3.so': 'libnss3', - 'libvpx.so.6': 'libvpx6', - 'libwayland-client.so.0': 'libwayland-client0', - 'libwayland-egl.so.1': 'libwayland-egl1', - 'libwayland-server.so.0': 'libwayland-server0', - 'libwebp.so.6': 'libwebp6', - 'libwebpdemux.so.2': 'libwebpdemux2', - 'libwoff2dec.so.1.0.2': 'libwoff1', - 'libX11-xcb.so.1': 'libx11-xcb1', - 'libX11.so.6': 'libx11-6', - 'libxcb-dri3.so.0': 'libxcb-dri3-0', - 'libxcb-shm.so.0': 'libxcb-shm0', - 'libxcb.so.1': 'libxcb1', - 'libXcomposite.so.1': 'libxcomposite1', - 'libXcursor.so.1': 'libxcursor1', - 'libXdamage.so.1': 'libxdamage1', - 'libXext.so.6': 'libxext6', - 'libXfixes.so.3': 'libxfixes3', - 'libXi.so.6': 'libxi6', - 'libxkbcommon.so.0': 'libxkbcommon0', - 'libxml2.so.2': 'libxml2', - 'libXrandr.so.2': 'libxrandr2', - 'libXrender.so.1': 'libxrender1', - 'libxslt.so.1': 'libxslt1.1', - 'libXt.so.6': 'libxt6', - 'libXtst.so.6': 'libxtst6', - 'libxshmfence.so.1': 'libxshmfence1', - 'libatomic.so.1': 'libatomic1', - 'libenchant-2.so.2': 'libenchant-2-2', - 'libevent-2.1.so.7': 'libevent-2.1-7', - }, - }, - 'ubuntu22.04-x64': { tools: [ 'xvfb', @@ -1204,20 +989,6 @@ export const deps: any = { }, }; -deps['ubuntu20.04-arm64'] = { - tools: [...deps['ubuntu20.04-x64'].tools], - chromium: [...deps['ubuntu20.04-x64'].chromium], - firefox: [ - ...deps['ubuntu20.04-x64'].firefox, - ], - webkit: [ - ...deps['ubuntu20.04-x64'].webkit, - ], - lib2package: { - ...deps['ubuntu20.04-x64'].lib2package, - }, -}; - deps['ubuntu22.04-arm64'] = { tools: [...deps['ubuntu22.04-x64'].tools], chromium: [...deps['ubuntu22.04-x64'].chromium], diff --git a/packages/playwright-core/src/server/webkit/wkPage.ts b/packages/playwright-core/src/server/webkit/wkPage.ts index 8e6dc38672381..224093897b3bf 100644 --- a/packages/playwright-core/src/server/webkit/wkPage.ts +++ b/packages/playwright-core/src/server/webkit/wkPage.ts @@ -953,13 +953,8 @@ export class WKPage implements PageDelegate { const buffer = Buffer.from(event.data, 'base64'); void this._page.screencast.onScreencastFrame({ buffer, - frameSwapWallTime: event.timestamp - // timestamp is in seconds, we need to convert to milliseconds. - ? event.timestamp * 1000 - // Fallback for Ubuntu 20.04 where WebKit is frozen on an older - // version that did not send timestamp. - // TODO: remove this fallback when Ubuntu 20.04 is EOL. - : Date.now(), + // timestamp is in seconds, we need to convert to milliseconds. + frameSwapWallTime: event.timestamp * 1000, viewportWidth: event.deviceWidth, viewportHeight: event.deviceHeight, }).then(() => { diff --git a/packages/utils/hostPlatform.ts b/packages/utils/hostPlatform.ts index 82974b982c7c6..d633ca383aee2 100644 --- a/packages/utils/hostPlatform.ts +++ b/packages/utils/hostPlatform.ts @@ -88,7 +88,7 @@ function calculatePlatform(): { hostPlatform: HostPlatform, isOfficiallySupporte if (major < 20) return { hostPlatform: ('ubuntu18.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false }; if (major < 22) - return { hostPlatform: ('ubuntu20.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: isUbuntu && version === '20.04' }; + return { hostPlatform: ('ubuntu20.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false }; if (major < 24) return { hostPlatform: ('ubuntu22.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: isUbuntu && version === '22.04' }; if (major < 26)