From 1910ea0ebfba89afa063322373935de63e1c0057 Mon Sep 17 00:00:00 2001 From: Bilal Godil Date: Mon, 13 Apr 2026 12:24:52 -0700 Subject: [PATCH] ci: skip emulator boot/verify on arm64 (same-arch TCG can't run backend) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Start/Verify/Stop emulator steps boot the freshly-built qcow2 and wait for all services — including the Next.js backend — to respond on their ports. Under same-arch TCG on ubuntu-24.04-arm there's no KVM, so the backend can't come up within any reasonable window (this is the same reason the build-time smoke test is already skipped on arm64). Today the step just burns the 53-minute EMULATOR_READY_TIMEOUT and fails. Gate those three steps to amd64. The build step still fully produces and validates the arm64 image; it just doesn't try to run it under emulation. The amd64 job continues to prove the image's service stack end-to-end, and the arm64 artifact is trusted to be equivalent since real arm64 hardware has KVM. --- .github/workflows/qemu-emulator-build.yaml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/qemu-emulator-build.yaml b/.github/workflows/qemu-emulator-build.yaml index 0957d80f0..08b4ab62c 100644 --- a/.github/workflows/qemu-emulator-build.yaml +++ b/.github/workflows/qemu-emulator-build.yaml @@ -80,7 +80,13 @@ jobs: - name: Generate emulator env run: node docker/local-emulator/generate-env-development.mjs + # VM boot + service verification is amd64-only. Under same-arch TCG on + # the arm64 runner there's no KVM, and the Next.js backend can't come + # up within any reasonable window under software emulation — same + # reason the build-time smoke test is skipped on arm64. The arm64 + # image is built and uploaded blind; it runs on real arm64 hardware. - name: Start emulator and verify + if: matrix.arch == 'amd64' run: | chmod +x docker/local-emulator/qemu/run-emulator.sh EMULATOR_ARCH=${{ matrix.arch }} \ @@ -88,12 +94,13 @@ jobs: docker/local-emulator/qemu/run-emulator.sh start - name: Verify services are healthy + if: matrix.arch == 'amd64' run: | EMULATOR_ARCH=${{ matrix.arch }} \ docker/local-emulator/qemu/run-emulator.sh status - name: Stop emulator - if: always() + if: always() && matrix.arch == 'amd64' run: | EMULATOR_ARCH=${{ matrix.arch }} \ docker/local-emulator/qemu/run-emulator.sh stop