Skip to content

Build Linux binaries natively instead of with cross - #10283

Merged
mergify[bot] merged 7 commits into
unstablefrom
ci/native-builds
Oct 13, 2026
Merged

mergify[bot] merged 7 commits into
unstablefrom
ci/native-builds

Conversation

@antondlr

@antondlr antondlr commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

Issue Addressed

CI builds Linux binaries with cross, which pulls third-party build images (ghcr.io/cross-rs), needs QEMU for arm64 docker images, and broke on the recent cc bump (#10278).

Stacked on the runner PR (#10282).

Proposed Changes

  • Build each architecture natively on a runner of that architecture, inside a pinned rust:1.99.0-bookworm image (scripts/ci/build-linux.sh).
  • Use it in release.yml and docker.yml; no cross or QEMU left in CI.
  • Add a RELEASE_RUNNER_ARM64 repository variable for the arm64 release runner (falls back to free ubuntu-24.04-arm).
  • Keep the make build-* cross targets for local use and binary-builder.

Additional Info

Concerns:

  • glibc floor goes up from 2.18 to 2.34. Release tarballs will no longer run on Ubuntu 20.04, Debian 11 or RHEL 8 (Ubuntu 22.04, Debian 12 and RHEL 9 are fine).
  • Rust is pinned by the image (1.99.0) instead of rustup update stable; bumping is a one-line change in the script.
  • Needs an arm64 release runner. maxperf runs out of memory on the free 16 GB arm runner; releases need an 8-core / 32 GB arm64 larger runner.
  • Trust: drops the cross-rs images, adds the Docker Hub official rust image (already used by Dockerfile.reproducible).

Tested on a fork with free runners (run): lighthouse x86_64/aarch64 and lcli aarch64 (release), and lighthouse x86_64 (maxperf, release features) all build natively, and the docker images run.

🤖 Generated with Claude Code

antondlr and others added 6 commits October 9, 2026 09:52
#10229 set CXX=clang++ in .cargo/config.toml to work around LevelDB's
-Wthread-safety probe, but the cross images only ship GCC: x86_64 can't
find clang++ and aarch64 uses its target-specific GCC and hits the
original bug. Use GCC in cross and pre-seed the probe via a CMake wrapper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Matches the non-cross Dockerfiles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d Node 24 actions

- docker.yml: unstable builds use free GitHub-hosted runners; tag builds use
  the paid larger runner named by the RELEASE_RUNNER repo variable.
- release.yml: Linux builds use RELEASE_RUNNER (free runners on forks).
- Drop self-hosted runners and the SELF_HOSTED_RUNNERS toggles.
- Pin cross to 0.2.5 and docker/* actions to commit SHAs.
- Bump runners to ubuntu-24.04 and actions to Node 24 releases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
maxperf (fat LTO) peaks at ~16 GB and swaps on free 16 GB runners; release
peaks at ~11 GB and builds in about half the time. Tags keep maxperf.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The free 7 GB macOS runner swaps during the maxperf link (54 min); the
14 GB M2 Pro xlarge runner builds the same in 18 min.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build each architecture on a runner of that architecture, inside a pinned
Debian Bookworm Rust image. Removes cross and QEMU from CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@antondlr
antondlr marked this pull request as ready for review October 9, 2026 10:51
@michaelsproul michaelsproul added ready-for-review The code is ready for review infra-ci v8.3.0 Lighthouse release early Q3 2026 labels Oct 11, 2026
@michaelsproul
michaelsproul changed the base branch from ci/release-runners to unstable October 12, 2026 07:01
@michaelsproul

Copy link
Copy Markdown
Member

conflicts @antondlr

@michaelsproul michaelsproul added the backwards-incompat Backwards-incompatible API change label Oct 12, 2026
@mergify

mergify Bot commented Oct 12, 2026

Copy link
Copy Markdown

This pull request has merge conflicts. Could you please resolve them @antondlr? 🙏

@mergify mergify Bot added waiting-on-author The reviewer has suggested changes and awaits thier implementation. and removed ready-for-review The code is ready for review labels Oct 12, 2026
# Conflicts:
#	.github/workflows/docker.yml
#	.github/workflows/release.yml
@antondlr

Copy link
Copy Markdown
Member Author

conflicts @antondlr

resolved

@michaelsproul michaelsproul left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looks good

@michaelsproul michaelsproul added ready-for-merge This PR is ready to merge. and removed waiting-on-author The reviewer has suggested changes and awaits thier implementation. labels Oct 12, 2026
@mergify mergify Bot added the queued label Oct 12, 2026
@mergify

mergify Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Merge Queue Status

  • ✅ Entered queue — 2026-10-12 07:49 UTC · Rule: default · triggered by rule Add ready-to-merge labeled PRs to merge queue
  • ❌ Checks failed · on draft merge queue: checking #10283 on unstable (0c3765e) #10320
  • 🚫 Left the queue — 2026-10-12 08:20 UTC · at 5e1d7426f16dd0703b46902fcc32e6d30232286d

This pull request spent 30 minutes 56 seconds in the queue, including 29 minutes 19 seconds running CI.

Reason

The merge conditions cannot be satisfied due to failing checks

  • test-suite-success

Hint

You may have to fix your CI before adding the pull request to the queue again.
If you update this pull request, to fix the CI, it will automatically be requeued once the queue conditions match again.
If you think this was a flaky issue instead, you can requeue the pull request, without updating it, by posting a @mergifyio queue comment.

Waiting for
  • check-success=test-suite-success
All conditions

Requeued — the merge queue status continues in this comment ↓.

@mergify mergify Bot added dequeued and removed queued labels Oct 12, 2026
@michaelsproul

Copy link
Copy Markdown
Member

@mergify requeue

@mergify

mergify Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Merge Queue Status

This pull request spent 29 minutes 53 seconds in the queue, including 28 minutes 7 seconds running CI.

Required conditions to merge

@mergify mergify Bot added the queued label Oct 13, 2026
@mergify mergify Bot removed the dequeued label Oct 13, 2026
@mergify
mergify Bot merged commit 705a788 into unstable Oct 13, 2026
41 checks passed
@mergify mergify Bot removed the queued label Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backwards-incompat Backwards-incompatible API change infra-ci ready-for-merge This PR is ready to merge. v8.3.0 Lighthouse release early Q3 2026

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants