Skip to content

fix(setup-r): install resolute binaries on the Ubuntu 26.04 runner - #12263

Merged
MarkusNeusinger merged 3 commits into
mainfrom
fix/setup-r-resolute
Oct 23, 2026
Merged

MarkusNeusinger merged 3 commits into
mainfrom
fix/setup-r-resolute

Conversation

@MarkusNeusinger

Copy link
Copy Markdown
Owner

Summary

  • Posit snapshot noble → resolute in .github/actions/setup-r/action.yml. ubuntu-latest is Ubuntu 26.04 (resolute) now, but the action still installed Posit's 24.04 (noble) binaries. They install without error there, but stringi links libicuuc.so.74/libicui18n.so.74 (checked with readelf), and 26.04 ships ICU 78. So library(stringr) fails with libicui18n.so.74: cannot open shared object file. The snapshot date stays at 2026-10-20, so the ggplot2 4.0.3 note and core/library_versions.py are unchanged.
  • R itself needs no change. r-lib/actions/setup-r resolves R 4.6.1 through the r-hub API to Posit's ubuntu-2604 deb on its own, and r-hub names resolute as the matching binary repo.
  • The smoke test also loads tidyr and stringr and calls str_detect(). The old smoke test loaded only ggplot2 and ragg, so it passed on the mismatched binaries and hid the failure. A binary built for another Ubuntu release now fails the setup step instead of a generation run.
  • The test_version_sources.py fixture models the real line, so it now names resolute too.

Plan

N/A

Test plan

  • Container runs on Ubuntu 26.04.1 (resolute). The run: steps of the action ran verbatim after an emulation of r-lib/actions/setup-r: the same r-hub-resolved R deb, its apt prerequisites, and the HTTPUserAgent that makes Posit serve binaries. LANG=C.UTF-8 matches the runners.
    • This branch (resolute): the apt step, 39 packages all installed as binaries, and the new smoke step all pass. line-multi, which loads tidyr, renders 3200×1800 in both themes with correct glyphs.
    • main (noble, negative control): the same steps install and the old smoke step passes. The new smoke step fails with libicui18n.so.74: cannot open shared object file.
  • Whole catalogue on both builds. All 325 ggplot2 implementations rendered in light theme on each install.
    • Same result on both: 322 render and 3 fail identically. contour-map-geographic and flowmap-origin-destination need maps, and qrcode-basic needs qrcode; none of these is in the action's install set.
    • No current implementation reaches stringi. tidyr imports stringr lazily, and only separate(), extract() and some pivot_longer() paths call it. So today the mismatch would hit new generations, not the catalogue.
  • ruff check, ruff format --check and mypy api core pass. tests/unit/core/test_version_sources.py passes (46), and the ggplot2 pin still resolves to 4.0.3.
  • pytest tests/unit tests/integration with -n 4: 12714 passed, 1 failed. The failure is test_host_data.py::test_a_run_that_floods_stderr_past_its_timeout_is_killed_and_reaped, which is unrelated to this diff and passes 3 of 3 in isolation.
  • tools.changelog check passes.

Known gaps

  • No PR check runs .github/actions/setup-r. Only impl-generate.yml and impl-repair.yml use it, so the 26.04 container run above is the closest proof. The first ggplot2 impl-generate run after the merge is the real test.

Observed, not changed

  • setup-julia installs libfreetype6-dev, which is no longer a real package in 26.04. libfreetype-dev (2.14.2+dfsg-1) declares Provides: libfreetype6-dev, and it is the only provider, so apt substitutes it.
  • All other apt names in setup-r and setup-julia exist in resolute.

MarkusNeusinger and others added 2 commits October 23, 2026 15:52
GitHub's ubuntu-latest now resolves to Ubuntu 26.04 (resolute), but the
setup-r action still pinned Posit Package Manager's noble (24.04)
binaries. They install without error there; stringi then fails to load
because its binary links libicuuc.so.74/libicui18n.so.74 and 26.04
ships ICU 78. The old smoke test loaded only ggplot2 and ragg, so it
passed and hid the mismatch.

- Switch the snapshot URL to __linux__/resolute/2026-10-20. The date
  stays, so the ggplot2 4.0.3 note and core/library_versions.py are
  unchanged. R itself needs no change: r-lib/actions/setup-r resolves
  4.6.1 to Posit's ubuntu-2604 deb on its own.
- The smoke test also loads tidyr and stringr and calls str_detect(),
  so a binary built for another Ubuntu release fails the setup step.
- The test_version_sources fixture models the real line, so it now
  names resolute too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175hA62juZoajMcqKxWFGza
Copilot AI lite review requested due to automatic review settings October 23, 2026 13:55
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175hA62juZoajMcqKxWFGza

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The shared CI setup change affects runner-dependent binary compatibility and requires final human review.

No open issues 🎉

What changed in this PR

This pull request updates the R setup action for Ubuntu 26.04 (resolute) runners, preventing ICU compatibility failures when loading stringr.

Changes:

  • Switches the Posit snapshot repository from noble to resolute.
  • Extends the smoke test to load tidyr and stringr and call str_detect().
  • Updates the version-source fixture and adds a changelog fragment.
File Description
tests/​unit/​core/​test_version_sources.py Aligns the fixture with the updated resolute snapshot URL.
changelog.d/​setup-r-resolute.md Documents the Ubuntu 26.04 compatibility fix.
.github/​actions/​setup-r/​action.yml Uses Ubuntu 26.04-compatible R binaries and validates stringr loading.

Review effort: Lite

@codecov

codecov Bot commented Oct 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@MarkusNeusinger
MarkusNeusinger merged commit 6dd4873 into main Oct 23, 2026
16 checks passed
@MarkusNeusinger
MarkusNeusinger deleted the fix/setup-r-resolute branch October 23, 2026 15:34
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