Merge pull request #150 from dmcgowan/retry-on-userns-failure #58
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: Benchmarks | |
| on: | |
| push: | |
| branches: ['main'] | |
| schedule: | |
| # Nightly at midnight UTC | |
| - cron: '0 0 * * *' | |
| permissions: | |
| contents: read | |
| jobs: | |
| setup: | |
| name: Setup | |
| runs-on: ubuntu-latest | |
| outputs: | |
| kernel-version: ${{ steps.set-vars.outputs.kernel-version }} | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| sparse-checkout: | | |
| .github/.tool-versions | |
| - name: Set variables | |
| id: set-vars | |
| run: | | |
| kernel_version=$(grep -E '^kernel [0-9.]+$' .github/.tool-versions | sed -E 's/^kernel ([0-9.]+)$/\1/') | |
| echo "kernel-version=${kernel_version}" >> $GITHUB_OUTPUT | |
| build-kernels: | |
| name: Build Kernels (if needed) | |
| runs-on: ${{ matrix.os }} | |
| needs: setup | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| arch: x86_64 | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - uses: ./.github/actions/build-kernel | |
| with: | |
| kernel_version: ${{ needs.setup.outputs.kernel-version }} | |
| kernel_arch: ${{ matrix.arch }} | |
| benchmarks: | |
| name: Benchmarks | |
| needs: [setup, build-kernels] | |
| if: | | |
| always() && | |
| (needs.build-kernels.result == 'success' || needs.build-kernels.result == 'skipped') | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 20 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| arch: x86_64 | |
| steps: | |
| - name: Enable KVM group perms | |
| 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 | |
| sudo udevadm trigger --name-match=kvm | |
| sudo usermod -aG kvm $USER | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Calculate kernel cache key | |
| id: cache-key | |
| run: | | |
| CONFIG_FILE="kernel/config-${{ needs.setup.outputs.kernel-version }}-${{ matrix.arch }}" | |
| if [ ! -f "$CONFIG_FILE" ]; then | |
| echo "Error: Kernel config file $CONFIG_FILE not found" | |
| exit 1 | |
| fi | |
| CONFIG_HASH=$(sha256sum "$CONFIG_FILE" | cut -d' ' -f1) | |
| PATCHES_HASH=$(find kernel/patches -type f -name "*.patch" -exec sha256sum {} \; | sort | sha256sum | cut -d' ' -f1) | |
| CACHE_KEY="kernel-${{ needs.setup.outputs.kernel-version }}-${{ matrix.arch }}-${CONFIG_HASH:0:8}-${PATCHES_HASH:0:8}" | |
| echo "cache-key=${CACHE_KEY}" >> $GITHUB_OUTPUT | |
| - name: Restore cached kernel | |
| id: cache-kernel | |
| uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 | |
| with: | |
| path: _output/nerdbox-kernel-${{ matrix.arch }} | |
| key: ${{ steps.cache-key.outputs.cache-key }} | |
| - name: Verify kernel from cache | |
| run: | | |
| if [ "${{ steps.cache-kernel.outputs.cache-hit }}" = "true" ]; then | |
| echo "✅ Kernel restored from cache" | |
| else | |
| echo "❌ Kernel not in cache - this should not happen after build-kernels" | |
| exit 1 | |
| fi | |
| - uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 | |
| - name: Build remaining artifacts (initrd and shim) | |
| run: docker buildx bake host-binaries guest-binaries | |
| - name: Add _output to PATH | |
| run: echo "$(pwd)/_output" >> $GITHUB_PATH | |
| - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 | |
| with: | |
| go-version-file: '.github/.tool-versions' | |
| - name: Run benchmarks | |
| run: | | |
| go test -bench=BenchmarkVM -benchtime=5x -run=^$ -v ./integration/... \ | |
| | tee /tmp/bench-output.txt | |
| - name: Publish benchmark results to step summary | |
| if: always() | |
| run: | | |
| echo "## VM Benchmark Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Runner:** \`${{ matrix.os }}\` | **Arch:** \`${{ matrix.arch }}\` | **Iterations:** 5" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| grep -E '^(Benchmark|PASS|FAIL|ok|---)' /tmp/bench-output.txt >> $GITHUB_STEP_SUMMARY || true | |
| echo '```' >> $GITHUB_STEP_SUMMARY |