Repository navigation
ci: install qemu-user, and resolve the emulator this matrix names - #36
Merged
Merged
Conversation
`ubuntu-latest` became Ubuntu 26.04 on 2026-10-19, where `qemu-user-static` is a VIRTUAL package and apt refuses to choose between its two providers: E: Package 'qemu-user-static' has no installation candidate The step exits 100 in about twenty seconds. This lane's `main` is green only because it has not run since the migration; 333 repositories of this account carried the same line. ⚠ Installing a provider is NOT the fix. `qemu-user-binfmt` registers binfmt handlers, it does not ship the `qemu-<arch>-static` binaries this lane invokes. `qemu-user` ships the dynamic `qemu-<arch>`, which is all `go test -exec` needs, so both packages are installed and BOTH NAMES are accepted at run time. ⛔ A missing emulator now FAILS this lane, and the lane PRINTS which emulator it ran (`running s390x under qemu-s390x`). Without that line, "ran under emulation" and "skipped" are indistinguishable from a green tick -- which is how a fix for this looks like it worked while testing nothing. ⚠ The matrix is left exactly as written: the `-static` name there is the FIRST candidate, not the defect. And the rewrite branches on an EMPTY `matrix.exec` instead of failing it: a lane with no emulator runs NATIVELY on purpose -- a 386 ELF executes directly on the x86-64 runner, and qemu-i386 was measured to lose the guest's floating-point state across the signal Go delivers for asynchronous preemption (five failures in eight runs, zero native). Nine of the eleven repositories in this family carry such a lane, and reading an empty exec as "no emulator found" would have turned a correct one red. Written by qemufix v0.40.0 (go-fleettools/fleettools), which refuses by name anything it does not recognise and is idempotent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tannevaled
force-pushed
the
ci-qemu-ubuntu26
branch
from
October 25, 2026 23:53
1261546 to
ff4b006
Compare
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.
What broke, and why nothing was committed
ubuntu-latestbecame Ubuntu 26.04 on 2026-10-19. Thereqemu-user-staticis a virtual package and apt refuses to choose between its two providers:The step exits 100 in about twenty seconds. 333 repositories in 258 organisations of this account carried the same line; this is part of that sweep.
⛔ This repository's
mainis green because the lane has not run since the migration, not because it works. A green tick here means "has not run".Two things that are not the fix
qemu-user-binfmtregisters binfmt handlers; it does not ship theqemu-<arch>-staticbinaries this lane invokes. A lane given only a provider takes itscommand -vbranch and goes green while testing nothing — worse than red.qemu-userships the dynamicqemu-<arch>, which is allgo test -execneeds, so both packages are installed and both binary names are accepted at run time.running s390x under qemu-s390x). Without that line, "ran under emulation" and "skipped" are indistinguishable from a green tick. Check that line in the lane's log, not the tick.⚠ The native lane, which is why this file needed a shape of its own
This job's matrix carries the whole flag (
exec: "-exec=qemu-riscv64-static"), and one of its lanes carries the empty string: 386 runs with no emulator on purpose, because a 386 ELF executes directly on the x86-64 runner andqemu-i386was measured to lose the guest's floating-point state across the signal Go delivers for asynchronous preemption — five failures in eight runs, zero native.So the rewrite branches on an empty
execand runs that lane natively (running 386 natively) instead of failing it for having no emulator. A fix that did not would have turned a correct lane red while claiming to repair it.The matrix itself is untouched: the
-staticname there is the first candidate, not the defect.Why the sweep's tool refused this file at first
It reported "step at line 75 has no
run:key". That was true of the enclosing list item and beside the point: line 75 is a matrix datum, and the- { … }around it is not a step that runs anything. A command lives at or after its step'srun:; anything before it is data. Fixed inqemufixwith a shape of its own and a test for the native lane.What did not change
Nothing but the package names and the emulator lookup. The test command keeps every other token it had, and the matrix keeps every lane it had.
How it was written
By
qemufixv0.40.0 (go-fleettools/fleettools#131): a tested Go tool that recognises seven workflow shapes, refuses by name anything else rather than guessing, and is idempotent — an already-fixed file comes back byte-identical and is reported already-fixed. Its tests assert the three invariants per shape, with a control that runs the invariant checkers against the unfixed input (so checkers that pass on everything cannot pass the suite), and a planted positive for the idempotence claim.Verified on the first merged lane of this campaign: the log reads
running <arch> under <emulator>and the packages pass under emulation (seego-tex/engine#645).🤖 Generated with Claude Code