8000 chromium-headless-shell-bin: source from Chrome for Testing Stable 153.0.8010.52 by bryan-minimal · Pull Request #718 · gominimal/pkgs · GitHub
[go: up one dir, main page]

Skip to content

chromium-headless-shell-bin: source from Chrome for Testing Stable 153.0.8010.52 - #718

Merged
bryan-minimal merged 2 commits into
mainfrom
chromium-headless-shell-cft
Sep 18, 2026
Merged

bryan-minimal merged 2 commits into
mainfrom
chromium-headless-shell-cft

Conversation

@bryan-minimal
@bryan-minimal bryan-minimal commented Sep 18, 2026 •
Copy link
Copy Markdown
Member

Closes the headless-shell half of #684. Details in #717.

Why

The arm64 leg pointed at Playwright's own build, and Playwright stopped producing those. r1243 was the last one ever — re-verified following redirects (a bare HEAD returns 307 for every revision, real or not, which is what made this look ambiguous in #684):

r1243 -> HTTP 200      r1245/1250/1260/1270 -> HTTP 400

We ship r1243. We landed on the final artifact by luck of timing when #678 merged on 09-14. There is no newer revisio 8000 n to walk to, so on arm64 this package could not be updated at all.

The licensing premise that turned out not to apply

We moved off CfT on 2026-07-15 (inbox#284) because CfT is branded Google Chrome, whose ToS forbids redistribution, and our cache redistributes.

That is about the chrome bundle. It does not hold for chrome-headless-shell. Verified against both CfT zips at 153.0.8010.52:

linux-arm64 linux64
WidevineCdm/** entries 0 0
LICENSE.headless_shell 2,352,658 B, opens "The Chromium Project" + BSD-3-Clause same
not open source / separate license agreement with Google / may not use, modify, sell 0 0
total entries 287 287
binary ELF 64-bit LSB pie, ARM aarch64 —

So license_spdx stays BSD-3-Clause, the package stays cache-served, and it does not need the redistributable = false posture #684 assumed every CfT-sourced leg would need. chromium-bin is untouched and still faces that decision.

Stable, not Beta

CfT Beta is 154.0.8037.0. It matches ~0 CVEs today and will match a few hundred the day M154 goes stable in early October — pkgmgr-rs#646's "ahead of the published feed, not audited clean" trap. The security win is the channel, not the hostname. Targeting Stable also makes this a patch bump within the same branch: 153.0.8010.12 → 153.0.8010.52.

What this deletes

The snapshot bucket's headless-shell.zip ships only the binary + its .paks, so build.sh grafted icudtl.dat, the v8 snapshot and the GL/SwiftShader libs out of chrome-linux.zip, then borrowed headless_command_resources.pak from the arm64 Playwright zip because no snapshot artifact ships it.

CfT carries all of it inline. The pak is present at an identical 3,109 bytes on both arches, confirming the old comment's guess that it is arch-independent grit data. So three Sources become one per arch, and snapshot_position is gone — which also retires the re-derivation trap of pkgmgr-rs#540.

Side effect: the updater is unstuck

pkg_action_state has read state=failed for this package since 2026-07-15:

multi-arch build.ncl has 4 sha256 literals but the updater can map only 3 … Update manually.

Those 4 literals were only 3 distinct artifacts — the arm64 zip appeared twice (same sha at the old build.ncl:84 and :110) and count_sha256_literals counts occurrences. There are 2 now, and I checked against the real regex ("[0-9a-f]{64}") that has_unmappable_source_sha returns False. Two months of manual-only updates end as a side effect.

Compatibility

CfT's arm64 layout is chrome-headless-shell-linux-arm64/chrome-headless-shell; the old Playwright arm64 build extracted to chrome-linux/headless_shell. amd64 is unaffected (same dir and binary names as before). For arm64, build.sh adds the old names as symlinks so a PLAYWRIGHT_BROWSERS_PATH consumer pinned to playwright-core ^1.59 still resolves, while newer playwright-core — which already expects the CfT layout — uses the real directory. revision is retained purely as the registry directory key. Importers are agent-browser and mermaid-cli.

build.sh also gains fail-closed guards on icudtl.dat and headless_command_resources.pak: an incomplete bundle would otherwise surface as a launch FATAL, or worse, as --dump-dom quietly returning nothing.

Verification

Built in the Linux sandbox (min package build --rebuild --verbose), and I confirmed the sandbox was running this build.sh rather than a snapshot/cache — the documented exit 97 negative control failed with exited with code 97, and removing it built clean. min check --packages chromium-headless-shell-bin passes every check:

spec name matches dir / spec name valid / cycle breaker naming / output naming /
enumerate bins / output types valid / missing runtime_deps /
build scripts are executable / build script disallowed-patterns /
standalone tests / source urls valid / parse / import line / imports   ... all Pass
fmt ... Fail

⚠ The fmt failure is pre-existing and not from this PR. I verified it by checking out this package pristine at origin/main and running the same check — it fails there too. I deliberately did not "fix" it: the local nickel is 1.17.0 and reformats to a newer style than the repo uses, which would have buried this change under an unrelated whole-file reformat. Worth a separate look at why this one package is out of step with whatever nickel CI pins.

Not covered

The CVE count may not drop as much as the dashboard implies — NVD's Chrome CPE ranges are unbounded below, so a 153.x pin matches CVEs that 153 itself fixed (the glibc false-positive shape). Worth measuring against the new pin rather than assuming.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Updates
    • Updated the bundled headless browser to Chrome for Testing Stable version 153.0.8010.52.
    • Added complete architecture-specific headless-shell packages for amd64 and arm64.
    • Strengthened validation of the required executable and runtime resources during packaging.
    • Preserved compatibility with legacy directory and binary names.
    • Standardized the bundled browser contents across supported architectures for more consistent headless operation.

…3.0.8010.52

The arm64 leg pointed at Playwright's own build, and Playwright stopped
producing those. r1243 was the last one ever — re-verified following
redirects: r1243 -> HTTP 200, r1245/1250/1260/1270 -> HTTP 400. We shipped
the final artifact by luck of timing. There was no newer revision to walk
to, so the package could not be updated on arm64 at all.

We had moved OFF Chrome for Testing on 2026-07-15 (inbox#284) because CfT
is branded Google Chrome whose ToS forbids redistribution and our cache
redistributes. That reasoning is about the `chrome` bundle and does not
hold for `chrome-headless-shell`. Verified against both CfT zips at
153.0.8010.52:

  * ZERO WidevineCdm/** entries on either arch
  * each ships LICENSE.headless_shell (2,352,658 B) opening with the
    Chromium Project BSD-3-Clause grant, containing zero occurrences of
    "not open source" / "separate license agreement with Google" /
    "may not use, modify, sell"
  * 287 entries per arch, arm64 binary is ELF 64-bit LSB pie ARM aarch64

So license_spdx stays BSD-3-Clause and the package stays cache-served; it
does NOT need the redistributable=false posture pkgs#684 assumed every
CfT-sourced leg would need.

Stable, not Beta. CfT Beta is 154.0.8037.0, which matches ~0 CVEs today
and a few hundred the day M154 goes stable. The security win is the
channel, not the hostname (pkgmgr-rs#646). This is also a patch bump
within the same branch: .12 -> .52.

Deletes the amd64 graft. The snapshot bucket's headless-shell.zip carries
only the binary + .paks, so build.sh grafted icudtl.dat / the v8 snapshot
/ the GL+SwiftShader libs out of chrome-linux.zip and borrowed
headless_command_resources.pak from the arm64 Playwright zip. CfT carries
all of it inline — the pak is present at an identical 3,109 B on both
arches, confirming the old comment's guess that it is arch-independent
grit data. Three Sources become one per arch and snapshot_position is
gone, which also retires the re-derivation trap of pkgmgr-rs#540.

Side effect: the updater is unstuck. pkg_action_state has read
state=failed for this package since 2026-07-15 with "multi-arch build.ncl
has 4 sha256 literals but the updater can map only 3". Those 4 literals
were only 3 distinct artifacts — the arm64 zip appeared twice, and
count_sha256_literals counts occurrences. Two literals now, confirmed
against the real regex that has_unmappable_source_sha goes False.

build.sh keeps a compat symlink for the pre-CfT arm64 layout
(chrome-linux/headless_shell) so PLAYWRIGHT_BROWSERS_PATH consumers on
playwright-core ^1.59 still resolve, and gains fail-closed guards on
icudtl.dat and headless_command_resources.pak — a silently incomplete
bundle would otherwise surface as a launch FATAL or as --dump-dom quietly
returning nothing.

Refs #684, #717

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@bryan-minimal
bryan-minimal requested a review from a team as a code owner September 18, 2026 16:54
@coderabbitai
coderabbitai Bot commented Sep 18, 2026 •
Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Essentials

Run ID: f52a5fe3-cc67-45c1-a056-b0ba4e39148d

📥 Commits

Reviewing files that changed from the base of the PR and between d6d3793 and c3bd7a7.

📒 Files selected for processing (1)
  • packages/chromium-headless-shell-bin/build.ncl
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/chromium-headless-shell-bin/build.ncl

Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


📝 Walkthrough

Walkthrough

The package now uses Stable Chrome for Testing headless-shell archives for amd64 and arm64. The build extracts each complete archive, validates its binary and runtime resources, and adds compatibility symlinks for legacy names.

Changes

Chrome for Testing headless shell

Layer / File(s) Summary
Chrome for Testing source configuration
packages/chromium-headless-shell-bin/build.ncl
The package uses Stable Chrome for Testing version 153.0.8010.52. It removes Chromium snapshot and graft sources, updates checksums and provenance URLs, and maps both architectures to complete headless-shell archives.
Direct archive packaging
packages/chromium-headless-shell-bin/build.sh
The build extracts the architecture-specific archive, validates chrome-headless-shell, icudtl.dat, and headless_command_resources.pak, and adds compatibility symlinks for chrome-linux and headless_shell when needed.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Suggested reviewers: mitodrummer

Merge Risk: ⚪ Minimal · up to c3bd7

The package migration preserves the expected browser paths and validates required runtime files, with no concrete merge-blocking issue identified.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely identifies the package and its main change: sourcing Chrome for Testing Stable 153.0.8010.52.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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

CI failed `chromium-headless-shell-bin :: fmt` on both arches while the
builds themselves succeeded. I had called this failure pre-existing and
deliberately left it — verified it fails on pristine origin/main — on the
theory that the repo used an older nickel than my local 1.17 CLI and that
reformatting would bury the change in unrelated churn.

That reasoning was backwards. `min check`'s fmt uses
`nickel_lang_core::format` linked into the min binary, and the canonical
output is `build_deps = [` on one line — exactly what nickel 1.17 emits and
what I reverted. The file on main was simply mis-formatted; nothing was
protecting the old shape.

Applied via `min check --packages chromium-headless-shell-bin --fix`, which
formats with the same library version the check compares against, so this
cannot drift from whatever CI runs.

Note for anyone doing this: `--fix` writes into the session's snapshot, not
your worktree, so the file has to be read back out of the session
afterwards — `git diff` looks empty otherwise and it appears to have done
nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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

0