Skip to content

ci: test unsupported AOT runtimes in the build legs - #5791

Draft
ric-oliv wants to merge 3 commits into
mainfrom
ci/unsupported-aot-in-build-legs
Draft

ric-oliv wants to merge 3 commits into
mainfrom
ci/unsupported-aot-in-build-legs

Conversation

@ric-oliv

@ric-oliv ric-oliv commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

The two Unsupported AOT jobs check that Sentry turns SentryNative off on runtimes that have no native SDK, linux-arm and win-x86. They wait for the whole build matrix, because they test the macOS leg's packages. On #5788 they started 14 minutes after macOS had uploaded those packages, as soon as the slowest leg finished, and added 1.5 minutes after the matrix.

They don't need the macOS packages, though. Every leg already packs its own and runs the same aot.Tests.ps1 against them in its integration tests. The macOS artifact was simply the package that was around when #4347 added the jobs.

This PR runs the test inside the legs instead:

  • linux-arm in the linux-arm64 leg, which uses the same ubuntu-24.04-arm runner.
  • win-x86 in the win-x64 leg, which uses windows-latest like the old job.
  • The unsupported-aot job is gone, and so is the tail after the matrix.

The linux-arm job also had a flake. 4 of the last 57 attempts failed, and the one whose log was still around failed with "Exec format error". The test app built, but the host couldn't start a 32-bit ARM binary, and the same commit had passed on its first attempt. Some arm64 hosts can't run 32-bit ARM code, so the test no longer depends on the host:

  • The leg registers QEMU for 32-bit ARM with docker/setup-qemu-action, pinned like in alpine.yml. QEMU then runs the test app and its container on every host.
  • A 32-bit ARM process sees aarch64 when the arm64 kernel runs it and armv7l under QEMU. The leg compiles a tiny uname program, logs what the host does natively next to its CPU part, and fails unless QEMU runs it. So every run proves the QEMU path, and the log tells us which hosts caused the flake.

On today's main, win-x86 adds about 1.3 minutes to win-x64, which is one of the slowest legs until #5782 lands.

Measured on the first run:

  • The tail after the matrix is gone. The last legs finished at 23:14 and the workflow ended there.
  • On linux-arm64, the four new steps took about 1 minute: 18 seconds for the dependencies, 4 for QEMU, 38 for the test. Aot passed in 14.7 seconds and Container in 16.3, both under QEMU.
  • That host was a Neoverse N2, CPU part 0xd49, and it ran 32-bit ARM natively, printing aarch64. So the flaky hosts are a different CPU, and the next one will show up in this log.
  • On win-x64 the test took 38 seconds. Aot passed and Container was skipped, as in the old job, because it only runs on Linux.
  • The workflow still took 42.5 minutes, because linux-x64 spent 19 minutes in Setup Environment on a slow Mono download. ci: stop installing Mono #5794 removes that download.
  • The run after the comment fix matched: the QEMU check passed, the test took 36 seconds, and linux-x64 hit the same slow download again, with Setup Environment at 13.5 minutes.

#skip-changelog

ric-oliv and others added 2 commits October 24, 2026 00:29
The Unsupported AOT jobs waited for the whole build matrix to use the
macOS packages, but any leg's packages work. Every leg already packs and
runs aot.Tests.ps1 against its own. linux-arm now runs in the linux-arm64
leg and win-x86 in the win-x64 leg, which removes two jobs and the tail
after the matrix.

Some arm64 hosts can't run 32-bit ARM binaries and failed with "Exec
format error", so QEMU runs them on every host. The leg also logs whether
its host runs them natively.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A registered QEMU handler doesn't prove it ran the binary. A 32-bit ARM
process sees armv8l when the arm64 kernel runs it and armv7l under QEMU,
so the leg compiles a tiny uname program, logs what the host does
natively, and fails unless QEMU runs it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 76.12%. Comparing base (b41b96c) to head (3803459).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5791      +/-   ##
==========================================
- Coverage   76.13%   76.12%   -0.02%     
==========================================
  Files         528      528              
  Lines       19579    19579              
  Branches     3829     3829              
==========================================
- Hits        14906    14904       -2     
- Misses       3791     3792       +1     
- Partials      882      883       +1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

On the arm64 kernel, a 32-bit ARM process sees aarch64, not armv8l. It
only sees armv8l when it starts in 32-bit mode through linux32. The
check still holds, because only QEMU reports armv7l.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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.

1 participant