mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
The arm64 render image had no pinned browser: chrome-for-testing publishes no linux-arm64 build, so Dockerfile.render fell back to Debian bookworm's rolling `chromium` package. Its current arm64 build (150.0.7871.46) SIGTRAPs at startup (exit 133), breaking `render --docker` 100% on Apple Silicon. Install a pinned, non-Debian chrome-headless-shell from Playwright on arm64 (Google's build, not Debian's repackage). The wrapper wires whichever binary landed into PRODUCER_HEADLESS_SHELL_PATH and now fails the build loudly if neither is present, instead of silently using the broken Debian chromium. Bonus: arm64 gains BeginFrame deterministic capture it previously lacked. amd64 path is unchanged. Verified on Apple Silicon: same arm64 image, Debian chromium 150 -> exit 133, Playwright arm64 headless-shell (Chromium 149) -> exit 0.
This commit is contained in:
@@ -1191,8 +1191,8 @@ function ensureDockerImage(version: string, platform: string, quiet: boolean): s
|
||||
|
||||
// Platform is now derived from the host arch (see resolveDockerPlatform).
|
||||
// Apple Silicon and other arm64 hosts get a native linux/arm64 build; the
|
||||
// Dockerfile skips chrome-headless-shell on arm64 and falls back to system
|
||||
// chromium because chrome-headless-shell ships linux64 only.
|
||||
// Dockerfile installs a pinned arm64 chrome-headless-shell from Playwright
|
||||
// (chrome-for-testing publishes no linux-arm64 build).
|
||||
//
|
||||
// TARGETARCH is passed explicitly rather than relying on BuildKit's
|
||||
// automatic platform args because the legacy builder (and some BuildKit
|
||||
@@ -1250,17 +1250,17 @@ function resolveDockerHostPlatform(options: RenderOptions): string {
|
||||
}
|
||||
|
||||
if (!options.quiet && platform === "linux/arm64") {
|
||||
// chrome-headless-shell doesn't publish a linux-arm64 build, so the arm64
|
||||
// image falls back to system chromium. That loses byte-for-byte parity
|
||||
// with amd64 renders — fine for end-user output, not fine if you're
|
||||
// comparing against an amd64 golden baseline. Set
|
||||
// HYPERFRAMES_DOCKER_PLATFORM=linux/amd64 to keep parity (qemu-emulated,
|
||||
// The arm64 image uses Playwright's pinned linux-arm64 chrome-headless-shell
|
||||
// (chrome-for-testing has no arm64 build). It's a different Chromium build
|
||||
// than amd64's chrome-for-testing binary, so output isn't byte-identical to
|
||||
// an amd64 golden baseline — fine for end-user output. Set
|
||||
// HYPERFRAMES_DOCKER_PLATFORM=linux/amd64 to force parity (qemu-emulated,
|
||||
// slower).
|
||||
console.log(
|
||||
c.dim(
|
||||
" Host is arm64 — using linux/arm64 image with system chromium " +
|
||||
"(output won't be byte-identical to amd64 renders; " +
|
||||
"set HYPERFRAMES_DOCKER_PLATFORM=linux/amd64 to force parity).",
|
||||
" Host is arm64 — using linux/arm64 image with Playwright's " +
|
||||
"chrome-headless-shell (output won't be byte-identical to amd64 " +
|
||||
"renders; set HYPERFRAMES_DOCKER_PLATFORM=linux/amd64 to force parity).",
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user