Repository navigation
feat(cli): release for ppc64le and s390x Linux - #1281
Open
TylerJang27 wants to merge 4 commits into
Open
TylerJang27 wants to merge 4 commits into
TylerJang27 wants to merge 4 commits into
Conversation
Cross-compile trunk-analytics-cli for powerpc64le-unknown-linux-gnu and s390x-unknown-linux-gnu, smoke-test both under QEMU, and build them on every PR. Both link glibc dynamically; Cross.toml pins the cross 0.2.5 images so the floor stays at glibc 2.22/2.18 rather than 2.39. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
cross installs a missing target itself, so rust-toolchain.toml does not need ppc64le and s390x. The glibc check now fails above 2.28 (RHEL 8) instead of only logging the floor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1281 +/- ##
==========================================
+ Coverage 85.47% 85.67% +0.20%
==========================================
Files 86 86
Lines 19259 19259
==========================================
+ Hits 16461 16500 +39
+ Misses 2798 2759 -39 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Linked in the cross 0.2.5 image, the ppc64le binary dies with SIGILL at startup on glibc 2.34 and newer (RHEL 9, Ubuntu 24.04). Link it with zig against glibc 2.28 instead. The cross 0.2.5 release ignores the zig setting, so the glibc targets build with cross at a pinned commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The build jobs shared one rust-cache key across every Linux x64 target, so s390x could restore build scripts compiled for a newer glibc and run them in its Ubuntu 16.04 image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Build and release
trunk-analytics-clifor IBM Power (powerpc64le-unknown-linux-gnu) and IBM Z (s390x-unknown-linux-gnu).Details
Both targets cross-compile with
crossonubuntu-latest, like illumos. The release adds two assets,trunk-analytics-cli-powerpc64le-unknown-linux.tar.gzandtrunk-analytics-cli-s390x-unknown-linux.tar.gz, and smoke-tests each under QEMU user-mode, since GitHub has no hosted runners for either architecture. The PR workflow builds both too, so a dependency that breaks them fails on the PR rather than at release.Considerations
crosshas no musl image for either target, and a static glibc binary cannot resolve DNS through NSS.lddcannot read a foreign binary, so areadelfcheck replaces it: the binary may link only glibc's libraries, and must need glibc 2.28 (RHEL 8) or older.zig = "2.28"inCross.toml). Linked in the defaultcross0.2.5 image (Ubuntu 16.04), it crashes at startup with SIGILL on glibc 2.34 and newer, so on RHEL 9 and Ubuntu 24.04. This PR's first smoke-test run caught that.cross0.2.5 image. zig cannot link s390x, and that image's binary runs on every glibc tested.crosspinned to a commit for these two targets.actions-rust-crossinstalls the latestcrossrelease (0.2.5), which ignoreszig. The action now getscross-version: d5a5ead(cross-rsmain, 2026-10-30) for*-unknown-linux-gnuonly; illumos and the musl targets are unchanged.rust-cachekeyed the build jobs by job name and OS only, so every Linux x64 row shared onetarget/. s390x then ran build scripts compiled for a newer glibc inside its Ubuntu 16.04 image and failed, depending on which row saved the cache first. Each target now has its own cache, which also costs every target one cold build.skip-cli-toolsmatrix flag replaces the hard-coded illumos checks.Testing
Built both with
crossatd5a5ead(release-with-debug, as the release does) and ran the CI linkage check: ppc64le needs glibc 2.28, s390x 2.18, and both link only glibc libraries.Then ran each binary under QEMU 8.2 (the runner's version) against the glibc of three distributions, taken from the AlmaLinux 8/9 images (RHEL 8/9 rebuilds) and Ubuntu's cross packages. Each row ran
--version, anupload --dry-run, and anuploadto staging with a fake token:--versiona206284a-…a206284a-…a206284a-…a206284a-…a206284a-…a206284a-…The identical test ID on big-endian s390x and little-endian ppc64le is evidence against a byte-order bug. Nothing has run on real Power or Z hardware.
Follow-up Work
ppc64leands390xto the new asset names.pyo3.ymlstill usesmacos-14, which GitHub retires on 2026-11-02; its brownouts fail that job on every PR, this one included.🤖 Generated with Claude Code