From 8f29d27a39831d9229c74b8db3d771d784285dc7 Mon Sep 17 00:00:00 2001 From: RealBhupesh Date: Sun, 2 Aug 2026 15:39:31 +0530 Subject: [PATCH] fix(build): support Playwright 1.58 dry-run output (#3924) --- .changeset/playwright-158-dry-run-parser.md | 5 ++ .../build/src/extensions/playwright.test.ts | 48 +++++++++++++++++++ packages/build/src/extensions/playwright.ts | 2 +- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 .changeset/playwright-158-dry-run-parser.md create mode 100644 packages/build/src/extensions/playwright.test.ts diff --git a/.changeset/playwright-158-dry-run-parser.md b/.changeset/playwright-158-dry-run-parser.md new file mode 100644 index 00000000000..9311ffb7cdc --- /dev/null +++ b/.changeset/playwright-158-dry-run-parser.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/build": patch +--- + +Playwright 1.58+ deployments can now install browser binaries correctly. diff --git a/packages/build/src/extensions/playwright.test.ts b/packages/build/src/extensions/playwright.test.ts new file mode 100644 index 00000000000..90584811098 --- /dev/null +++ b/packages/build/src/extensions/playwright.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it } from "vitest"; +import type { BuildContext, BuildLayer } from "@trigger.dev/core/v3/build"; +import type { BuildManifest } from "@trigger.dev/core/v3"; +import { playwright } from "./playwright.js"; + +function runExtension(browsers: ("chromium" | "firefox" | "webkit")[]): BuildLayer | undefined { + let captured: BuildLayer | undefined; + + const context = { + target: "deploy", + config: { project: "proj_test" }, + logger: { + debug() {}, + }, + addLayer: (layer: BuildLayer) => { + captured = layer; + }, + } as unknown as BuildContext; + + const manifest = { + externals: [{ name: "playwright", version: "1.58.0" }], + } as unknown as BuildManifest; + + playwright({ browsers }).onBuildComplete!(context, manifest); + + return captured; +} + +describe("playwright extension browser metadata parsing", () => { + it("matches the legacy and Playwright 1.58 dry-run headers", () => { + const instructions = runExtension(["chromium"])?.image?.instructions ?? []; + + expect(instructions).toContain( + "RUN grep -A5 -m1 -E '^(browser: chromium-headless-shell( |$)|.*\\(playwright chromium-headless-shell v)' /tmp/browser-info.txt > /tmp/chromium-headless-shell-info.txt" + ); + }); + + it("uses a browser-specific selector for each requested browser", () => { + const instructions = runExtension(["chromium", "firefox"])?.image?.instructions ?? []; + + expect(instructions).toContain( + "RUN grep -A5 -m1 -E '^(browser: chromium-headless-shell( |$)|.*\\(playwright chromium-headless-shell v)' /tmp/browser-info.txt > /tmp/chromium-headless-shell-info.txt" + ); + expect(instructions).toContain( + "RUN grep -A5 -m1 -E '^(browser: firefox( |$)|.*\\(playwright firefox v)' /tmp/browser-info.txt > /tmp/firefox-info.txt" + ); + }); +}); diff --git a/packages/build/src/extensions/playwright.ts b/packages/build/src/extensions/playwright.ts index 0931a4855c7..60a32ad869f 100644 --- a/packages/build/src/extensions/playwright.ts +++ b/packages/build/src/extensions/playwright.ts @@ -317,7 +317,7 @@ class PlaywrightExtension implements BuildExtension { Array.from(browsersToInstall).forEach((browser) => { instructions.push( - `RUN grep -A5 -m1 "browser: ${browser}" /tmp/browser-info.txt > /tmp/${browser}-info.txt`, + `RUN grep -A5 -m1 -E '^(browser: ${browser}( |$)|.*\\(playwright ${browser} v)' /tmp/browser-info.txt > /tmp/${browser}-info.txt`, `RUN INSTALL_DIR=$(grep "Install location:" /tmp/${browser}-info.txt | cut -d':' -f2- | xargs) && \ DIR_NAME=$(basename "$INSTALL_DIR") && \