Skip to content

ci: fix translation PDF builds on Ubuntu 26.04 (TeX Live 2025) - #3343

Open
RobinLassonde wants to merge 4 commits into
google:mainfrom
RobinLassonde:fix-ubuntu-26-04-pdf
Open

RobinLassonde wants to merge 4 commits into
google:mainfrom
RobinLassonde:fix-ubuntu-26-04-pdf

Conversation

@RobinLassonde

@RobinLassonde RobinLassonde commented Nov 13, 2026 •

Copy link
Copy Markdown

ubuntu-latest recently migrated to Ubuntu 26.04 (TeX Live 2025; see actions/runner-images#14748), and runner images also updated to Chrome 156/157, which broke translation PDF generation (ar, bn, da, de, el, es, fa, fr, it, pl, pt-BR, ro, tr, vi) and web-tests. We expect landing this fix to unblock the backlog of unmerged PRs currently failing these checks.

There are three underlying issues:

  1. Missing babel .ldf packages (da, de, el, es, fr, it, pl, pt-BR, ro, tr, vi): Pandoc emits \usepackage[...,]{babel} without provide=*, so LuaLaTeX requires installed .ldf files for these languages.

    • Fix: Install the 9 missing texlive-lang-* packages (european, french, german, greek, italian, other, polish, portuguese, spanish) in .github/workflows/install-mdbook/action.yml.
  2. selnolig.lua crash under HarfBuzz shaping (ar, bn, fa): Pandoc unconditionally loads selnolig under LuaLaTeX, which crashes at selnolig.lua:134 (bad argument #1 to 'char') on HarfBuzz glyph nodes emitted for these scripts.

    • Fix: In .github/workflows/build.sh, prepend a temporary no-op selnolig.sty via TEXINPUTS scoped to ar, bn, and fa (keeping selnolig enabled for Latin/German builds).
  3. web-tests popup timeout under Chrome 156/157 (speaker-notes.test.ts): Under WebDriver BiDi on Chrome 156/157, querying #aspect-ratio-helper inside the window.open() speaker-notes popup hangs until Mocha's 60s timeout. Additionally, localStorage["speakerNotes"] wasn't reset between tests, causing <details> to start hidden on Test 3.

    • Fix: In tests/wdio.conf.ts, set wdio:enforceWebDriverClassic: true specifically for tests/src/speaker-notes.test.ts (keeping BiDi enabled for playground.test.ts's browser.mock()), and clear localStorage in beforeEach in tests/src/speaker-notes.test.ts.

Because build.sh restores book.toml from historical commits matching each translation's POT-Creation-Date, changing Pandoc defaults in book.toml on main would not apply to translated builds, so the TeX Live fixes live in .github/workflows/.

Ubuntu 26.04 upgrades TeX Live from 2023 to 2025 and Pandoc 3.5+ requires babel .ldf language files unless provide=* is set:

1. Install the 9 missing texlive-lang-* packages in install-mdbook/action.yml needed by da, de, el, es, fr, it, pl, pt-BR, ro, tr, and vi.
2. Provide a no-op selnolig.sty stub via TEXINPUTS in build.sh for ar, bn, and fa to avoid the selnolig.lua:134 crash under Babel HarfBuzz shaping.
@fw-immunant fw-immunant self-assigned this Nov 13, 2026
On Ubuntu 26.04 (Chrome 156.0.8078.79), speaker-notes.test.ts times out at 60s querying #aspect-ratio-helper inside the window.open() popup.

Keep the TeX Live / build matrix on ubuntu-latest (Ubuntu 26.04) and temporarily pin only web-tests to ubuntu-24.04 so PRs can unblock immediately.
Touching build.yml caused zizmor to flag two pre-existing floating major version comments whose action SHAs actually point to v7.0.1 and v8.0.1 rather than the moved v7/v8 tags.
@RobinLassonde
RobinLassonde marked this pull request as ready for review November 13, 2026 23:56
@djmitche

Copy link
Copy Markdown
Collaborator

Hi Robin!

It looks like there's still one failing test. Otherwise, these fixes are certainly outside my area of expertise but look reasonable enough.

ubuntu-24.04 has also updated to Chrome 157 (157.0.8103.50), where speaker-notes.test.ts hits the same WebDriver BiDi popup timeout as Chrome 156 on Ubuntu 26.04.

- Revert build.yml back to origin/main (keeping all jobs on ubuntu-latest).
- Configure wdio:enforceWebDriverClassic: true specifically for speaker-notes.test.ts in wdio.conf.ts so playground.test.ts keeps BiDi for browser.mock().
- Clear localStorage in speaker-notes.test.ts beforeEach so state from earlier tests does not hide <details> on reload.

This branch has not been deployed

No deployments
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.

3 participants