Skip to content

chromium-bin: source true Chromium on amd64, not Chrome for Testing (inbox#284) - #414

Merged
twitchyliquid64 merged 3 commits into
mainfrom
fix/chromium-bin-true-chromium
Jul 15, 2026
Merged

chromium-bin: source true Chromium on amd64, not Chrome for Testing (inbox#284)#414
twitchyliquid64 merged 3 commits into
mainfrom
fix/chromium-bin-true-chromium

Conversation

@bryan-minimal

Copy link
Copy Markdown
Member

The amd64 legs shipped Chrome for Testing - a branded Google Chrome build
governed by the Chrome ToS, which does not permit redistribution - while
declaring license_spdx BSD-3-Clause (true only of Chromium). Our public
binary cache redistributes, so this was both mislabeled and a ToS problem
(gominimal/inbox#284). Bonus drift: amd64 shipped Chrome 150.0.7871.46 while
arm64 shipped rev-1217 Chromium (147.0.7727.15) - different browser versions
per arch.

Playwright itself no longer publishes linux-x64 Chromium (its registry
fetches CfT directly for x64; verified against playwright-core 1.58/1.59
registry code - the amd64 zips are gone from cdn.playwright.dev after ~rev
1194), so the fix sources amd64 from Chromium's official snapshot bucket at
snapshot_position 1596534 - the main-branch position Chrome 147.0.7727.15
branched from (chromiumdash), i.e. the same code the arm64 build was cut
from, minus branch cherry-picks. arm64 legs unchanged.

build.sh normalizes the snapshot layouts to what Playwright's x64 registry
expects (chrome-linux -> chrome-linux64; headless-shell ->
chrome-headless-shell-linux64 + an in-dir chrome-headless-shell symlink to
headless_shell), so PLAYWRIGHT_BROWSERS_PATH discovery keeps working on both
arches. Layout logic dry-run-verified against the real zips; the amd64
runtime is exercised by this PR's build via the launch_check standalone test.

browser_version corrected to 147.0.7727.15 (a downgrade for amd64 from the
branded 150, and now truthful + arch-consistent). license_spdx BSD-3-Clause
is now accurate on both arches.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

…box#284)

The amd64 legs shipped Chrome for Testing - a *branded Google Chrome* build
governed by the Chrome ToS, which does not permit redistribution - while
declaring license_spdx BSD-3-Clause (true only of Chromium). Our public
binary cache redistributes, so this was both mislabeled and a ToS problem
(gominimal/inbox#284). Bonus drift: amd64 shipped Chrome 150.0.7871.46 while
arm64 shipped rev-1217 Chromium (147.0.7727.15) - different browser versions
per arch.

Playwright itself no longer publishes linux-x64 Chromium (its registry
fetches CfT directly for x64; verified against playwright-core 1.58/1.59
registry code - the amd64 zips are gone from cdn.playwright.dev after ~rev
1194), so the fix sources amd64 from Chromium's official snapshot bucket at
snapshot_position 1596534 - the main-branch position Chrome 147.0.7727.15
branched from (chromiumdash), i.e. the same code the arm64 build was cut
from, minus branch cherry-picks. arm64 legs unchanged.

build.sh normalizes the snapshot layouts to what Playwright's x64 registry
expects (chrome-linux -> chrome-linux64; headless-shell ->
chrome-headless-shell-linux64 + an in-dir chrome-headless-shell symlink to
headless_shell), so PLAYWRIGHT_BROWSERS_PATH discovery keeps working on both
arches. Layout logic dry-run-verified against the real zips; the amd64
runtime is exercised by this PR's build via the launch_check standalone test.

browser_version corrected to 147.0.7727.15 (a downgrade for amd64 from the
branded 150, and now truthful + arch-consistent). license_spdx BSD-3-Clause
is now accurate on both arches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 7 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e7bfc79a-4902-4037-ac23-fe2975720d5c

📥 Commits

Reviewing files that changed from the base of the PR and between 96ac3f1 and f78c4a2.

📒 Files selected for processing (6)
  • packages/chromium-bin/README.md
  • packages/chromium-bin/build.ncl
  • packages/chromium-bin/build.sh
  • packages/chromium-headless-shell-bin/README.md
  • packages/chromium-headless-shell-bin/build.ncl
  • packages/chromium-headless-shell-bin/build.sh
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/chromium-bin-true-chromium

Comment @coderabbitai help to get the list of available commands.

The snapshot bucket's headless-shell.zip ships only the binary + its .paks;
headless_shell FATALs at startup on the missing icudtl.dat (caught by the PR
build's launch_check). The CfT and Playwright bundles carry the support set
inline; the snapshot build expects it beside the binary.

Fetch the full-browser chrome-linux.zip at the SAME snapshot position as an
amd64-only second source (arch-conditional array concat) and copy exactly the
support members the working Playwright arm64 bundle ships: icudtl.dat,
v8_context_snapshot.bin, and the GL/SwiftShader fallback libs. Dry-run
verified against the real zips - the final layout now matches the working
arm64 reference set file-for-file.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bryan-minimal

Copy link
Copy Markdown
Member Author

The launch_check failure was the snapshot headless-shell.zip shipping only the binary + .paks — no icudtl.dat (hence the ICU FATAL), no v8 snapshot, no GL fallback libs. The CfT/Playwright bundles carry those inline. Fixed by fetching the full-browser chrome-linux.zip at the same snapshot position as an amd64-only second source and grafting exactly the support members the working arm64 bundle ships. Dry-ran the full flow against the real zips: the final layout now matches the working arm64 reference file-for-file. The full-browser chromium-bin leg passed its launch_check already (its zip includes the support set).

…amd64

Second launch_check iteration: with ICU/v8/GL grafted the binary boots (the
remaining stderr was benign dbus noise) but --dump-dom emitted nothing. In
standalone headless, --dump-dom & friends are implemented by the command
handler loaded from headless_command_resources.pak - which NO snapshot
artifact ships. The full build rolls those resources into chrome's own
resources.pak, which is exactly why chromium-bin's launch_check passes while
headless_shell fails silently.

Borrow the pak (~3 KB of arch-independent grit resource data, same 7727
branch) from the Playwright arm64 bundle - the arm64 leg's exact artifact,
same sha256 pin - as an amd64-only extra source. Primary-zip extraction
becomes explicit per arch since the donor zip's name collides with the old
glob. Dry-run against the real zips: the amd64 bundle now has file-for-file
parity with the working arm64 reference, nothing missing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bryan-minimal

Copy link
Copy Markdown
Member Author

Round 2: the ICU FATAL is fixed (binary boots; remaining stderr was benign dbus noise) but --dump-dom emitted nothing. Root cause: standalone headless implements --dump-dom via the command handler loaded from headless_command_resources.pak — which no snapshot artifact ships. The full build rolls those resources into chrome's own resources.pak, which is exactly why chromium-bin's launch_check passes while headless failed silently. Fix: borrow the pak (~3 KB, arch-independent grit data, same 7727 branch) from the Playwright arm64 bundle — the arm64 leg's exact pinned artifact — as an amd64-only extra source. Dry-run on the real zips shows the amd64 bundle now has file-for-file parity with the working arm64 reference.

@twitchyliquid64
twitchyliquid64 added this pull request to the merge queue Jul 15, 2026
Merged via the queue into main with commit 18aa69e Jul 15, 2026
7 checks passed
@twitchyliquid64
twitchyliquid64 deleted the fix/chromium-bin-true-chromium branch July 15, 2026 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants