fix(ci): the macos runner has no Hypervisor.framework

Hosted macOS runners run without nested virtualization: kern
.hv_support is 0 and no binary can boot a VM there, entitlement or
not. The macos job keeps the full compile gate and asserts the probe
reports the known HVF absence with a working engine load, so any
other regression still fails; the boot e2e stays on Linux and real
Macs.
This commit is contained in:
vhaudiquet committed 2026-10-31 18:52:02 -05:00
1 parent 775592482b
commit ac08b106bc
2 files changed
+17 -9

No files matched your search

+11 -7
View File
@@ -39,7 +39,7 @@ jobs:
run: cargo test run: cargo test
macos: macos:
name: macos — fmt, clippy, test, boot name: macos — fmt, clippy, test, probe
runs-on: macos-26 runs-on: macos-26
timeout-minutes: 45 timeout-minutes: 45
steps: steps:
@@ -78,15 +78,19 @@ jobs:
- name: Sign the binary with the hypervisor entitlement - name: Sign the binary with the hypervisor entitlement
run: codesign --force --sign - --entitlements packaging/homebrew/ecrou.entitlements target/release/ecrou run: codesign --force --sign - --entitlements packaging/homebrew/ecrou.entitlements target/release/ecrou
# GitHub's macOS runners expose no Hypervisor.framework (they run
# without nested virtualization), so nothing boots here — the
# boot e2e lives on Linux (the snap e2e) and on real Macs. The
# probe must still behave: the engine loads from the krun tap,
# the tools are found, and the HVF absence is reported as that.
- name: Probe - name: Probe
run: ./target/release/ecrou probe
- name: Boot alpine
run: | run: |
set -euo pipefail set -euo pipefail
guest="$(./target/release/ecrou run --quiet alpine -- uname -r | tail -n 1)" out="$(./target/release/ecrou probe || true)"
echo "guest kernel: $guest" printf '%s\n' "$out"
test -n "$guest" grep -q "libkrun: ok" <<<"$out"
grep -q "e2fsprogs: ok" <<<"$out"
grep -q "no Hypervisor.framework support" <<<"$out"
t6: t6:
name: T6 strace audit name: T6 strace audit
+6 -2
View File
@@ -328,8 +328,12 @@ unpacks the rootfs to a tree and lets mke2fs populate from the
directory — slower, and run states it in the log. The T6 strace audit directory — slower, and run states it in the log. The T6 strace audit
and the `/dev/kvm` gating stay Linux-only: strace does not exist on and the `/dev/kvm` gating stay Linux-only: strace does not exist on
macOS and the hypervisor gate is the entitlement probe instead. CI macOS and the hypervisor gate is the entitlement probe instead. CI
runs the whole gate plus a real `ecrou run` boot on a `macos-26` runs the whole gate on a `macos-26` runner; hosted macOS runners
runner; the release workflow ships a signed darwin-arm64 tarball. expose no Hypervisor.framework, so the boot e2e is the Linux snap
e2e and any real Mac — CI only asserts that the probe loads the
engine from the krun tap and reports the HVF absence. The release
workflow ships a signed darwin-arm64 tarball (build and sign only,
no boot).
## Homebrew ## Homebrew