Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CI for ADR-083 pinned QEMU (unconditional since ADR-090)

The default qemu-smoke jobs in .github/workflows/smoke.yml stay on distro QEMU (park path).

Job qemu-nmi-pin (“QEMU NMI pin smoke (taken SError)”) builds the pinned QEMU and runs the smoke with CTOS_REQUIRE_TAKEN_SERROR=1 on every push and pull request (ADR-090, sponsor D1/D5). Until ADR-090 it was gated by repo variable CTOS_BUILD_QEMU_NMI == '1'. That gate was removed because GitHub treats a job skipped by if: as passing a required check. The variable is now unused; the Dockerfile build-arg of the same name is unrelated and stays opt-in.

Workflow edits need a credential with the OAuth workflow scope (amd64 workstation gh login). The box OAuth app has gist, read:org, repo only.

Local / amd64 workstation (no GHA variable needed)

./scripts/build-qemu-nmi.sh
export CTOS_QEMU="$PWD/tools/qemu-nmi/bin/qemu-system-aarch64"
export CTOS_REQUIRE_TAKEN_SERROR=1
./scripts/qemu-smoke.sh

Dockerfile already supports --build-arg CTOS_BUILD_QEMU_NMI=1.

Job as landed (reference; see smoke.yml for the source of truth)

  qemu-nmi-pin:
    name: QEMU NMI pin smoke (taken SError)
    runs-on: ubuntu-24.04
    timeout-minutes: 90
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - uses: dtolnay/rust-toolchain@nightly
        with: { components: rust-src, llvm-tools-preview }
      - run: |
          sudo apt-get update
          sudo apt-get install -y ninja-build meson pkg-config python3-venv flex bison \
            libglib2.0-dev libpixman-1-dev libfdt-dev libslirp-dev
      - run: ./scripts/build-qemu-nmi.sh
      - env:
          CTOS_QEMU: ${{ github.workspace }}/tools/qemu-nmi/bin/qemu-system-aarch64
          CTOS_REQUIRE_TAKEN_SERROR: "1"
        run: ./scripts/qemu-smoke.sh