Skip to content

[backport] Add arm64 Linux support for chrome-headless-shell and deprecate chromium installer#14335

Open
cderv wants to merge 19 commits intov1.9from
backport/arm64-chrome-headless-shell
Open

[backport] Add arm64 Linux support for chrome-headless-shell and deprecate chromium installer#14335
cderv wants to merge 19 commits intov1.9from
backport/arm64-chrome-headless-shell

Conversation

@cderv
Copy link
Copy Markdown
Collaborator

@cderv cderv commented Apr 8, 2026

Important

Partial backport from #14334

Summary

  • Add arm64 Linux support for quarto install chrome-headless-shell using Playwright CDN as download source (Chrome for Testing has no arm64 Linux builds)
  • Add deprecation warning on quarto install chromium and quarto update chromium directing users to chrome-headless-shell
  • Add quarto check install warning when legacy Chromium is detected in the installed tools list
  • Add CI workflow (test-install.yml) testing tool installation on arm64 Linux and macOS, and chromium deprecation warnings across all platforms

arm64 Linux via Playwright CDN

On arm64 Linux, chrome-headless-shell install uses Microsoft's Playwright CDN as the download source (same approach as Remotion). Version metadata comes from Playwright's browsers.json. The arm64 binary is named headless_shell (vs CfT's chrome-headless-shell); chromeHeadlessShellBinaryName() abstracts this difference.

Deprecation warnings

  • quarto install chromium shows deprecation before proceeding (including on WSL, where the install is also blocked)
  • quarto update chromium shows deprecation before proceeding
  • quarto check install shows migration guidance when legacy Chromium is in the installed tools list, regardless of whether system Chrome is also available

Backport scope

Only the arm64 support and deprecation warnings from #14334. Excluded from this backport to keep the diff minimal on a stable branch:

  • Function/type renames (cosmetic)
  • Full deprecation redirect (chromiumchrome-headless-shell transparent install)
  • Binder script changes

CI workflow: test-install.yml

New workflow testing quarto install on platforms not covered by smoke tests:

  • test-install job: arm64 Linux + macOS — installs tinytex and chrome-headless-shell, runs quarto check install
  • test-chromium-deprecation job: all 4 OS/arch — verifies deprecation warnings on install and update, verifies quarto check outdated warning when chromium is installed
  • Path-filtered to src/tools/** with weekly schedule for upstream CDN/API breakage detection
  • Added to paths-ignore in test-smokes-parallel.yml and test-ff-matrix.yml

Prerequisite: #14336 (merged) added the workflow file to main so triggers work.

Test plan

  • Existing chrome-for-testing unit tests pass
  • Existing chrome-headless-shell unit tests pass
  • New unit tests for Playwright CDN helpers
  • New unit test for chromeHeadlessShellBinaryName
  • Unit tests handle arm64 binary layout differences
  • CI test-install job passes on arm64 Linux and macOS
  • CI test-chromium-deprecation job passes on all 4 platforms
  • Full smoke test suite passes

Fixes #11877
Fixes #9710

@cderv cderv marked this pull request as draft April 8, 2026 13:07
cderv and others added 11 commits April 8, 2026 15:41
* Add CI workflow for tool install on arm64 Linux and macOS

Integration test for quarto install tinytex and chrome-headless-shell on
platforms not covered by smoke tests (arm64 Linux, macOS). Path-filtered
to src/tools/** with weekly schedule for upstream breakage detection.

Also add test-install.yml to paths-ignore in test-smokes-parallel.yml
and test-ff-matrix.yml so changes to the new workflow don't trigger
unrelated test suites.

* Skip chrome-headless-shell install on arm64 until #14334 lands
…s-shell

Remove the arm64 skip for chrome-headless-shell (this branch has the
Playwright CDN code). Add a second job testing that quarto install
chromium shows the deprecation warning on all OS/arch combinations.
…heck

Split deprecation warning verification into Unix/Windows steps to avoid
Git Bash not finding quarto.cmd. Drop quarto check outdated assertion
since it depends on whether system Chrome is pre-installed on the runner.
The warning now appears in the tools listing section where Chromium
is shown as installed, rather than in the Chrome Headless detection
section which short-circuits when system Chrome is found. This ensures
users see the migration message regardless of what other browsers are
available.

Also add quarto check assertion to the CI deprecation test job.
Use GITHUB_OUTPUT to pass install results between steps instead of temp
files. Add a bash wrapper for quarto.cmd on Windows so all steps use
unified bash syntax. No more pwsh/bash duplication.
- latestRelease test: Playwright CDN URLs contain a revision number, not
  the browserVersion. Assert CDN host instead of version in URL on arm64.
- preparePackage test: use chromeHeadlessShellBinaryName() instead of
  hardcoded "chrome-headless-shell" (arm64 uses "headless_shell").
- isInstalled tests: use dynamic binary name for arm64 compatibility.
WSL users running 'quarto install chromium' now see the deprecation
message directing them to chrome-headless-shell before the WSL-specific
warning blocks the install. Previously the WSL branch returned early
and these users never learned about the migration path.
- Use grep -Fq with specific strings instead of broad pattern matches
- Use install command exit code instead of grepping for "Installation
  successful" to determine if chromium was installed
- Remove || true from quarto check install (no reason to suppress)
- Use set +e/set -e to capture exit codes without swallowing errors
Assert steps now run unconditionally and check the condition inside,
so they show as green (success) in the UI instead of grey (skipped).
@cderv
Copy link
Copy Markdown
Collaborator Author

cderv commented Apr 8, 2026

What will show now

[>] Checking tools....................OK
      Chromium: 869685
            (Chromium is outdated. Run "quarto uninstall chromium" then "quarto install chrome-headless-shell")
      TinyTeX: (not installed)
      Chrome Headless Shell: (not installed)
      VeraPDF: (not installed)
quarto install chromium --no-prompt

leads to

WARN: "quarto install chromium" is deprecated and will be removed in Quarto 1.10. Use "quarto install chrome-headless-shell" instead.
Installing chromium
Downloading Chromium 869685

same for

quarto update chromium --no-prompt

Remove the comment saying linux aarch64 is unsupported — it was added
to the platform map by this PR.
@cderv cderv marked this pull request as ready for review April 8, 2026 15:36
@cderv
Copy link
Copy Markdown
Collaborator Author

cderv commented Apr 8, 2026

CI results

test-install.yml workflow — all 6 jobs pass:

Job OS Result
Install tools ubuntu-24.04-arm
Install tools macos-latest
Chromium deprecation ubuntu-latest
Chromium deprecation ubuntu-24.04-arm
Chromium deprecation macos-latest
Chromium deprecation windows-latest

This is the first time configure.sh and quarto install chrome-headless-shell have run on a real arm64 Linux runner in this repo's CI.

What's verified

  • quarto install chrome-headless-shell works on arm64 Linux (Playwright CDN) and macOS (CfT API)
  • quarto install tinytex works on arm64 Linux and macOS
  • quarto install chromium shows deprecation warning on all 4 platforms
  • quarto update chromium shows deprecation warning on all 4 platforms
  • quarto check install shows "Chromium is outdated" when legacy chromium is installed (verified on platforms where Puppeteer install succeeds)

Prerequisite

#14336 added the workflow file to main so pull_request, schedule, and workflow_dispatch triggers work. Already merged.

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.

1 participant