Skip to content

qemu-nightly

qemu-nightly #38

Workflow file for this run

name: qemu-nightly
# Linux and appliance evidence that needs a real kernel remains scheduled and
# advisory. Each job keeps its historical budget, accelerator fallback, and
# independent failure signal.
on:
schedule:
- cron: "43 4 * * *"
workflow_dispatch:
permissions:
contents: read
jobs:
needs-linux:
runs-on: ubuntu-latest
continue-on-error: true
timeout-minutes: 180
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install QEMU dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential git qemu-system-x86 qemu-utils openssh-client curl
- name: Grant KVM access (best effort)
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
| sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules || true
sudo udevadm trigger --name-match=kvm || true
ls -l /dev/kvm || echo "no /dev/kvm: QEMU will fall back to TCG"
- name: Restore the runtime kernel cache
id: kernel-cache
uses: actions/cache/restore@v6
with:
path: ~/.cache/ze
key: ze-runtime-kernel-amd64-${{ hashFiles('internal/appliance/kernel.version', 'gokrazy/kernel/**', 'tools/kernel-builder/**') }}
- name: Materialize the native runtime kernel
run: |
./le build-artifacts host
./ze-host appliance kernel --target runtime --arch amd64
- name: Save the runtime kernel cache
if: steps.kernel-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.cache/ze
key: ze-runtime-kernel-amd64-${{ hashFiles('internal/appliance/kernel.version', 'gokrazy/kernel/**', 'tools/kernel-builder/**') }}
- name: Cross-build native guest binaries
run: |
FEATURES='ze_anomaly ze_as112 ze_bfd ze_bgp ze_bmp ze_copp ze_cos ze_ddos ze_dhcpserver ze_exabgp ze_flowexport ze_geodns ze_gnmi ze_grpc ze_ike ze_isis ze_l2tp ze_ldp ze_lg ze_mcp ze_mpls ze_mrt ze_ntp ze_ospf ze_policyroute ze_pxe ze_radius ze_rest ze_rsvpte ze_ssh ze_tacacs ze_telemetry ze_trafficusage ze_vpp ze_vrrp ze_web'
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_core zetest ze_distro ze_setup $FEATURES" -o bin/ze-linux-amd64 ./cmd/ze
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags 'ze_core' -o bin/ze-stripped-linux-amd64 ./cmd/ze
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_test $FEATURES" -o bin/ze-test-linux-amd64 ./cmd/ze
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_le $FEATURES" -o bin/ze-le-linux-amd64 ./cmd/ze
- name: Run every Linux-only functional test in the VM
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_PARALLEL: "2"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run
kernel tmp/kernel/build/vmlinuz
packages "coreutils nftables iproute2 iputils-ping kmod iptables e2fsprogs e2fsprogs-extra"
timeout 5400s
command 'ZE_QEMU_LINUX_ONLY=1 ZE_BIN=bin/ze-linux-amd64 ZE_STRIPPED_BIN=bin/ze-stripped-linux-amd64 ZE_TEST_BIN=bin/ze-test-linux-amd64 ZE_QEMU_SKIP_SUITES=web ZE_QEMU_PARALLEL=2 bin/ze-le-linux-amd64 le qemu all-tests'
protocol-labs:
runs-on: ubuntu-latest
continue-on-error: true
timeout-minutes: 120
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install QEMU dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential git qemu-system-x86 qemu-utils openssh-client curl
- name: Grant KVM access (best effort)
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
| sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules || true
sudo udevadm trigger --name-match=kvm || true
ls -l /dev/kvm || echo "no /dev/kvm: QEMU will fall back to TCG"
- name: Restore the runtime kernel cache
id: kernel-cache
uses: actions/cache/restore@v6
with:
path: ~/.cache/ze
key: ze-runtime-kernel-amd64-${{ hashFiles('internal/appliance/kernel.version', 'gokrazy/kernel/**', 'tools/kernel-builder/**') }}
- name: Materialize the native runtime kernel
run: |
./le build-artifacts host
./ze-host appliance kernel --target runtime --arch amd64
- name: Save the runtime kernel cache
if: steps.kernel-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.cache/ze
key: ze-runtime-kernel-amd64-${{ hashFiles('internal/appliance/kernel.version', 'gokrazy/kernel/**', 'tools/kernel-builder/**') }}
- name: Cross-build the guest LE personality
run: |
FEATURES='ze_anomaly ze_as112 ze_bfd ze_bgp ze_bmp ze_copp ze_cos ze_ddos ze_dhcpserver ze_exabgp ze_flowexport ze_geodns ze_gnmi ze_grpc ze_ike ze_isis ze_l2tp ze_ldp ze_lg ze_mcp ze_mpls ze_mrt ze_ntp ze_ospf ze_policyroute ze_pxe ze_radius ze_rest ze_rsvpte ze_ssh ze_tacacs ze_telemetry ze_trafficusage ze_vpp ze_vrrp ze_web'
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_le $FEATURES" -o bin/ze-le-linux-amd64 ./cmd/ze
- name: LDP against FRR
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run kernel tmp/kernel/build/vmlinuz
packages "frr iproute2 kmod"
timeout 150s
command 'go test -tags integration -count=1 -timeout 150s -run TestLDPInteropFRR ./internal/plugins/ldp/...'
- name: IS-IS against FRR
if: ${{ !cancelled() }}
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run kernel tmp/kernel/build/vmlinuz
packages "frr iproute2 kmod tcpdump"
timeout 180s
command 'go test -tags integration -count=1 -timeout 180s -run TestISISInteropFRR ./internal/plugins/isis/...'
- name: VRRP against keepalived
if: ${{ !cancelled() }}
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run kernel tmp/kernel/build/vmlinuz
packages "keepalived tcpdump iproute2 iputils-ping kmod"
timeout 900s
command 'bin/ze-le-linux-amd64 le qemu vrrp-keepalived-test'
runtime-kernel-labs:
runs-on: ubuntu-latest
continue-on-error: true
timeout-minutes: 150
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install runtime lab dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential git qemu-system-x86 qemu-utils openssh-client curl \
dnsmasq xl2tpd ppp iputils-ping
- name: Grant KVM access (best effort)
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
| sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules || true
sudo udevadm trigger --name-match=kvm || true
ls -l /dev/kvm || echo "no /dev/kvm: QEMU will fall back to TCG"
- name: Restore the runtime kernel cache
id: kernel-cache
uses: actions/cache/restore@v6
with:
path: ~/.cache/ze
key: ze-runtime-kernel-amd64-${{ hashFiles('internal/appliance/kernel.version', 'gokrazy/kernel/**', 'tools/kernel-builder/**') }}
- name: Materialize the native runtime kernel
run: |
./le build-artifacts host
./ze-host appliance kernel --target runtime --arch amd64
- name: Save the runtime kernel cache
if: steps.kernel-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.cache/ze
key: ze-runtime-kernel-amd64-${{ hashFiles('internal/appliance/kernel.version', 'gokrazy/kernel/**', 'tools/kernel-builder/**') }}
- name: Cross-build native guest binaries
run: |
FEATURES='ze_anomaly ze_as112 ze_bfd ze_bgp ze_bmp ze_copp ze_cos ze_ddos ze_dhcpserver ze_exabgp ze_flowexport ze_geodns ze_gnmi ze_grpc ze_ike ze_isis ze_l2tp ze_ldp ze_lg ze_mcp ze_mpls ze_mrt ze_ntp ze_ospf ze_policyroute ze_pxe ze_radius ze_rest ze_rsvpte ze_ssh ze_tacacs ze_telemetry ze_trafficusage ze_vpp ze_vrrp ze_web'
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_core zetest ze_distro ze_setup $FEATURES" -o bin/ze-linux-amd64 ./cmd/ze
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags 'ze_core' -o bin/ze-stripped-linux-amd64 ./cmd/ze
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_test $FEATURES" -o bin/ze-test-linux-amd64 ./cmd/ze
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "ze_le $FEATURES" -o bin/ze-le-linux-amd64 ./cmd/ze
- name: L2TP PPP appliance proof
run: sudo -E env "PATH=$PATH" "XDG_CACHE_HOME=$HOME/.cache" ./le deployment gokrazy-l2tp-ppp-test
- name: PPPoE against accel-ppp
if: ${{ !cancelled() }}
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run kernel tmp/kernel/build/vmlinuz
packages "accel-ppp ppp iproute2 iputils-ping kmod"
timeout 600s
command 'bin/ze-le-linux-amd64 le qemu pppoe-accel-test'
- name: PPPoE functional suite
if: ${{ !cancelled() }}
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run kernel tmp/kernel/build/vmlinuz
packages "nftables iproute2 libcap kmod"
timeout 1200s
command 'ZE_QEMU_BIN=bin/ze-linux-amd64 ZE_QEMU_STRIPPED_BIN=bin/ze-stripped-linux-amd64 ZE_QEMU_TEST_BIN=bin/ze-test-linux-amd64 bin/ze-le-linux-amd64 le qemu pppoe-test'
- name: Traffic-usage eBPF proof
if: ${{ !cancelled() }}
env:
ZE_QEMU_MEMORY: "8192"
ZE_QEMU_CPUS: "3"
ZE_QEMU_BOOT_TIMEOUT: "300"
run: >-
./le qemu run kernel tmp/kernel/build/vmlinuz
packages "iproute2 kmod"
timeout 600s
command 'go test -tags integration -count=1 -timeout 180s -run "TestProgram_|TestAttachTCX_CountsTraffic|TestMetricsScrape" ./internal/plugins/trafficusage/...'