qemu-nightly #38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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/...' |