Skip to content

ci: switch release runner to ubuntu-24.04 to unblock multi-arch build#246

Merged
mayankpande88 merged 2 commits into
mainfrom
ci/fix-qemu-arm64
May 14, 2026
Merged

ci: switch release runner to ubuntu-24.04 to unblock multi-arch build#246
mayankpande88 merged 2 commits into
mainfrom
ci/fix-qemu-arm64

Conversation

@mayankpande88

@mayankpande88 mayankpande88 commented May 14, 2026

Copy link
Copy Markdown
Contributor

Summary

The v0.1.0 release workflow run (#25854609926) failed in the arm64 builder during `apt-get install build-essential`:

```
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
installed libc-bin package post-installation script subprocess returned error exit status 139
```

Root cause

Not actually QEMU regression — runner regression introduced by this fork.

The old `prod-ci.yaml` used `runs-on: ubuntu-latest` and was successfully building multi-arch (`linux/amd64,linux/arm64`) until its last green run on 2026-04-29 (run #25093167883). When I rewrote the workflow in PR #245, I inherited `runs-on: ubuntu-22.04` from the upstream coroot `release.yml` (which had never been exercised in this fork) without realising the working workflows had been on `ubuntu-latest` (= 24.04 today).

The 22.04 runner ships an older binfmt/QEMU combo that segfaults inside glibc `ldconfig` when emulating arm64 against `debian:bullseye`. 24.04 handles it.

Change

Single line: `runs-on: ubuntu-22.04` → `runs-on: ubuntu-24.04`.

(First commit on this branch pinned the binfmt image as an alternative fix; second commit reverts that and switches the runner instead — closer to what was working, no extra third-party image dependency.)

Follow-up

Once merged, delete remote tag `v0.1.0` (failed run, nothing published to GHCR) and re-tag main as v0.1.0 to trigger a fresh release build.

Test plan

  • Merge to main.
  • Delete `v0.1.0` tag and re-tag; confirm the arm64 builder gets past `apt-get install`.
  • Confirm multi-arch image lands at `ghcr.io/nudgebee/node-agent:0.1.0` and the GitHub release has both binaries attached.

The default binfmt image bundled with docker/setup-qemu-action@v3 ships
an older QEMU that segfaults inside glibc post-install hooks
(libc-bin's ldconfig) when emulating arm64 on the GitHub Actions runner
kernel. Pinning to tonistiigi/binfmt:qemu-v8.1.5 uses a newer QEMU
build that handles the syscall path correctly.

Caused the v0.1.0 release run to fail in the arm64 builder during
apt-get install of build-essential.
@gemini-code-assist

Copy link
Copy Markdown

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

RamanKharchee
RamanKharchee previously approved these changes May 14, 2026
Reverts the binfmt pin from the previous commit in favor of matching
the runner that prod-ci.yaml had been using successfully (ubuntu-latest
== 24.04 today). The 22.04 runner's older binfmt/QEMU defaults segfault
inside glibc's ldconfig when emulating arm64 against debian:bullseye;
24.04 handles it. The old prod-ci.yaml's last green multi-arch run was
2026-04-29 on ubuntu-latest, which is why this only surfaced now.
@mayankpande88 mayankpande88 changed the title ci: pin binfmt to qemu-v8.1.5 to fix arm64 segfault ci: switch release runner to ubuntu-24.04 to unblock multi-arch build May 14, 2026
@mayankpande88 mayankpande88 merged commit d4c4a28 into main May 14, 2026
1 check passed
@mayankpande88 mayankpande88 deleted the ci/fix-qemu-arm64 branch May 14, 2026 10:35
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