From b7a90d29a16614997533602eb969ba6c0da579b5 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 26 Jun 2026 01:45:52 -0700 Subject: [PATCH 1/3] chore(github): add issue templates for Playwright CLI and MCP (#41469) --- .github/ISSUE_TEMPLATE/playwright-cli.yml | 28 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/playwright-mcp.yml | 28 +++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/playwright-cli.yml create mode 100644 .github/ISSUE_TEMPLATE/playwright-mcp.yml diff --git a/.github/ISSUE_TEMPLATE/playwright-cli.yml b/.github/ISSUE_TEMPLATE/playwright-cli.yml new file mode 100644 index 0000000000000..5c4272b66cbf4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/playwright-cli.yml @@ -0,0 +1,28 @@ +name: Playwright CLI 🖥️ +description: Report a bug or request a feature for the Playwright CLI +title: '[CLI]: ' +body: + - type: markdown + attributes: + value: | + ### Thanks for filing a Playwright CLI issue! + + Describe what's going on in your own words — there's no strict format. The more detail (commands you ran, output you saw, what you expected), the faster we can help. + - type: textarea + id: details + attributes: + label: What's going on? + description: | + Describe the bug or feature request. Include anything that helps us understand and reproduce it — the exact command you ran, the output, what you expected, and your environment if relevant. + placeholder: | + e.g. `npx playwright ...` does X, but I expected Y. + validations: + required: true + - type: input + id: version + attributes: + label: Version + description: Which version of Playwright are you using? (optional, but helpful) + placeholder: ex. 1.41.1 + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/playwright-mcp.yml b/.github/ISSUE_TEMPLATE/playwright-mcp.yml new file mode 100644 index 0000000000000..9b9e6dd99c517 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/playwright-mcp.yml @@ -0,0 +1,28 @@ +name: Playwright MCP 🤖 +description: Report a bug or request a feature for the Playwright MCP server +title: '[MCP]: ' +body: + - type: markdown + attributes: + value: | + ### Thanks for filing a Playwright MCP issue! + + Describe what's going on in your own words — there's no strict format. Telling us which MCP client you use (Claude, VS Code, Cursor, etc.) and the tool call or config involved helps a lot. + - type: textarea + id: details + attributes: + label: What's going on? + description: | + Describe the bug or feature request. Include anything that helps us understand and reproduce it — the MCP client and config you use, the tool that misbehaved, the output you saw, and what you expected. + placeholder: | + e.g. Calling the `browser_click` tool from does X, but I expected Y. + validations: + required: true + - type: input + id: version + attributes: + label: Version + description: Which version of Playwright / the MCP server are you using? (optional, but helpful) + placeholder: ex. 1.41.1 + validations: + required: false From ae114c867bdf866455426057756e8e7d9d250ca9 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 26 Jun 2026 01:47:25 -0700 Subject: [PATCH 2/3] fix(trace-viewer): keep snapshot frame centered with margin (#41479) --- packages/trace-viewer/src/ui/snapshotTab.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/trace-viewer/src/ui/snapshotTab.tsx b/packages/trace-viewer/src/ui/snapshotTab.tsx index 4a9d4846dda85..6045b89935313 100644 --- a/packages/trace-viewer/src/ui/snapshotTab.tsx +++ b/packages/trace-viewer/src/ui/snapshotTab.tsx @@ -211,10 +211,16 @@ const SnapshotWrapper: React.FunctionComponent From 4b6f03135188565acb714c92f2872de30d9212c2 Mon Sep 17 00:00:00 2001 From: Kevin Turcios <106575910+KRRT7@users.noreply.github.com> Date: Fri, 26 Jun 2026 05:36:06 -0500 Subject: [PATCH 3/3] devops(docker): split browser layers and use zstd compression for faster pulls (#41232) --- utils/docker/Dockerfile.jammy | 27 +++++++++++++++++++-------- utils/docker/Dockerfile.noble | 27 +++++++++++++++++++-------- utils/docker/Dockerfile.resolute | 26 +++++++++++++++++++------- 3 files changed, 57 insertions(+), 23 deletions(-) diff --git a/utils/docker/Dockerfile.jammy b/utils/docker/Dockerfile.jammy index 626bdb48c69ef..20a96869529d4 100644 --- a/utils/docker/Dockerfile.jammy +++ b/utils/docker/Dockerfile.jammy @@ -11,7 +11,6 @@ ENV LC_ALL=C.UTF-8 # === INSTALL Node.js === RUN apt-get update && \ - # Install Node.js apt-get install -y curl wget gpg ca-certificates && \ mkdir -p /etc/apt/keyrings && \ curl -sL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ @@ -27,6 +26,7 @@ RUN apt-get update && \ adduser pwuser # === BAKE BROWSERS INTO IMAGE === +# Browsers are split into separate layers to enable parallel pulls. ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright @@ -34,16 +34,13 @@ ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright # The package should be built beforehand from tip-of-tree Playwright. COPY ./playwright-core.tar.gz /tmp/playwright-core.tar.gz -# 2. Bake in browsers & deps. -# Browsers will be downloaded in `/ms-playwright`. -# Note: make sure to set 777 to the registry so that any user can access -# registry. -RUN mkdir /ms-playwright && \ +# 2. Set up playwright-core and install all system dependencies in one layer. +RUN install -d -m 777 /ms-playwright /ms-playwright/.links && \ mkdir /ms-playwright-agent && \ cd /ms-playwright-agent && npm init -y && \ npm i /tmp/playwright-core.tar.gz && \ npm exec --no -- playwright-core mark-docker-image "${DOCKER_IMAGE_NAME_TEMPLATE}" && \ - npm exec --no -- playwright-core install --with-deps && rm -rf /var/lib/apt/lists/* && \ + npm exec --no -- playwright-core install-deps && \ # Workaround for https://github.com/microsoft/playwright/issues/27313 # While the gstreamer plugin load process can be in-process, it ended up throwing # an error that it can't have libsoup2 and libsoup3 in the same process because @@ -53,7 +50,21 @@ RUN mkdir /ms-playwright && \ else \ rm /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstwebrtc.so; \ fi && \ + rm -rf /var/lib/apt/lists/* + +# 3. Install each browser binary in its own layer for parallel pulling. +# Note: installing chromium also installs chromium-headless-shell and ffmpeg. +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install chromium && \ + chmod -R 777 /ms-playwright/chromium-* /ms-playwright/chromium_headless_shell-* /ms-playwright/ffmpeg-* + +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install firefox && \ + chmod -R 777 /ms-playwright/firefox-* + +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install webkit && \ rm /tmp/playwright-core.tar.gz && \ rm -rf /ms-playwright-agent && \ rm -rf ~/.npm/ && \ - chmod -R 777 /ms-playwright + chmod -R 777 /ms-playwright/webkit-* diff --git a/utils/docker/Dockerfile.noble b/utils/docker/Dockerfile.noble index 74bf34c0ac862..175bd21ca3f13 100644 --- a/utils/docker/Dockerfile.noble +++ b/utils/docker/Dockerfile.noble @@ -11,7 +11,6 @@ ENV LC_ALL=C.UTF-8 # === INSTALL Node.js === RUN apt-get update && \ - # Install Node.js apt-get install -y curl wget gpg ca-certificates && \ mkdir -p /etc/apt/keyrings && \ curl -sL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ @@ -27,6 +26,7 @@ RUN apt-get update && \ adduser pwuser # === BAKE BROWSERS INTO IMAGE === +# Browsers are split into separate layers to enable parallel pulls. ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright @@ -34,17 +34,28 @@ ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright # The package should be built beforehand from tip-of-tree Playwright. COPY ./playwright-core.tar.gz /tmp/playwright-core.tar.gz -# 2. Bake in browsers & deps. -# Browsers will be downloaded in `/ms-playwright`. -# Note: make sure to set 777 to the registry so that any user can access -# registry. -RUN mkdir /ms-playwright && \ +# 2. Set up playwright-core and install all system dependencies in one layer. +RUN install -d -m 777 /ms-playwright /ms-playwright/.links && \ mkdir /ms-playwright-agent && \ cd /ms-playwright-agent && npm init -y && \ npm i /tmp/playwright-core.tar.gz && \ npm exec --no -- playwright-core mark-docker-image "${DOCKER_IMAGE_NAME_TEMPLATE}" && \ - npm exec --no -- playwright-core install --with-deps && rm -rf /var/lib/apt/lists/* && \ + npm exec --no -- playwright-core install-deps && \ + rm -rf /var/lib/apt/lists/* + +# 3. Install each browser binary in its own layer for parallel pulling. +# Note: installing chromium also installs chromium-headless-shell and ffmpeg. +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install chromium && \ + chmod -R 777 /ms-playwright/chromium-* /ms-playwright/chromium_headless_shell-* /ms-playwright/ffmpeg-* + +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install firefox && \ + chmod -R 777 /ms-playwright/firefox-* + +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install webkit && \ rm /tmp/playwright-core.tar.gz && \ rm -rf /ms-playwright-agent && \ rm -rf ~/.npm/ && \ - chmod -R 777 /ms-playwright + chmod -R 777 /ms-playwright/webkit-* diff --git a/utils/docker/Dockerfile.resolute b/utils/docker/Dockerfile.resolute index 654c66edf9ed7..4900a6fa67f60 100644 --- a/utils/docker/Dockerfile.resolute +++ b/utils/docker/Dockerfile.resolute @@ -27,6 +27,7 @@ RUN apt-get update && \ adduser pwuser # === BAKE BROWSERS INTO IMAGE === +# Browsers are split into separate layers to enable parallel pulls. ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright @@ -34,17 +35,28 @@ ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright # The package should be built beforehand from tip-of-tree Playwright. COPY ./playwright-core.tar.gz /tmp/playwright-core.tar.gz -# 2. Bake in browsers & deps. -# Browsers will be downloaded in `/ms-playwright`. -# Note: make sure to set 777 to the registry so that any user can access -# registry. -RUN mkdir /ms-playwright && \ +# 2. Set up playwright-core and install all system dependencies in one layer. +RUN install -d -m 777 /ms-playwright /ms-playwright/.links && \ mkdir /ms-playwright-agent && \ cd /ms-playwright-agent && npm init -y && \ npm i /tmp/playwright-core.tar.gz && \ npm exec --no -- playwright-core mark-docker-image "${DOCKER_IMAGE_NAME_TEMPLATE}" && \ - npm exec --no -- playwright-core install --with-deps && rm -rf /var/lib/apt/lists/* && \ + npm exec --no -- playwright-core install-deps && \ + rm -rf /var/lib/apt/lists/* + +# 3. Install each browser binary in its own layer for parallel pulling. +# Note: installing chromium also installs chromium-headless-shell and ffmpeg. +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install chromium && \ + chmod -R 777 /ms-playwright/chromium-* /ms-playwright/chromium_headless_shell-* /ms-playwright/ffmpeg-* + +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install firefox && \ + chmod -R 777 /ms-playwright/firefox-* + +RUN cd /ms-playwright-agent && \ + npm exec --no -- playwright-core install webkit && \ rm /tmp/playwright-core.tar.gz && \ rm -rf /ms-playwright-agent && \ rm -rf ~/.npm/ && \ - chmod -R 777 /ms-playwright + chmod -R 777 /ms-playwright/webkit-*