1name: 'vmtest' 2description: 'Build + run vmtest' 3inputs: 4 kernel: 5 description: 'kernel version or LATEST' 6 required: true 7 default: 'LATEST' 8 arch: 9 description: 'what arch to test' 10 required: true 11 default: 'x86_64' 12 pahole: 13 description: 'pahole rev or master' 14 required: true 15 default: 'master' 16runs: 17 using: "composite" 18 steps: 19 # Allow CI user to access /dev/kvm (via qemu) w/o group change/relogin 20 # by changing permissions set by udev. 21 - name: Set /dev/kvm permissions 22 shell: bash 23 run: | 24 if [ -e /dev/kvm ]; then 25 echo "/dev/kvm exists" 26 if [ $(id -u) != 0 ]; then 27 echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \ 28 | sudo tee /etc/udev/rules.d/99-kvm4all.rules > /dev/null 29 sudo udevadm control --reload-rules 30 sudo udevadm trigger --name-match=kvm 31 fi 32 else 33 echo "/dev/kvm does not exist" 34 fi 35 # setup environment 36 - name: Setup environment 37 uses: libbpf/ci/setup-build-env@main 38 with: 39 pahole: ${{ inputs.pahole }} 40 arch: ${{ inputs.arch }} 41 # 1. download CHECKPOINT kernel source 42 - name: Get checkpoint commit 43 shell: bash 44 run: | 45 cat CHECKPOINT-COMMIT 46 echo "CHECKPOINT=$(cat CHECKPOINT-COMMIT)" >> $GITHUB_ENV 47 - name: Get kernel source at checkpoint 48 uses: libbpf/ci/get-linux-source@main 49 with: 50 repo: 'https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git' 51 rev: ${{ env.CHECKPOINT }} 52 dest: '${{ github.workspace }}/.kernel' 53 - name: Patch kernel source 54 uses: libbpf/ci/patch-kernel@main 55 with: 56 patches-root: '${{ github.workspace }}/ci/diffs' 57 repo-root: '.kernel' 58 - name: Prepare to build BPF selftests 59 shell: bash 60 run: | 61 source $GITHUB_ACTION_PATH/../../../ci/vmtest/helpers.sh 62 foldable start "Prepare building selftest" 63 cd .kernel 64 cat tools/testing/selftests/bpf/config \ 65 tools/testing/selftests/bpf/config.${{ inputs.arch }} > .config 66 # this file might or mihgt not exist depending on kernel version 67 cat tools/testing/selftests/bpf/config.vm >> .config || : 68 make olddefconfig && make prepare 69 cd - 70 foldable end 71 # 2. if kernel == LATEST, build kernel image from tree 72 - name: Build kernel image 73 if: ${{ inputs.kernel == 'LATEST' }} 74 shell: bash 75 run: | 76 source $GITHUB_ACTION_PATH/../../../ci/vmtest/helpers.sh 77 foldable start "Build Kernel Image" 78 cd .kernel 79 make -j $((4*$(nproc))) all > /dev/null 80 cp vmlinux ${{ github.workspace }} 81 cd - 82 foldable end 83 # else, just download prebuilt kernel image 84 - name: Download prebuilt kernel 85 if: ${{ inputs.kernel != 'LATEST' }} 86 uses: libbpf/ci/download-vmlinux@main 87 with: 88 kernel: ${{ inputs.kernel }} 89 arch: ${{ inputs.arch }} 90 # 3. build selftests 91 - name: Build BPF selftests 92 uses: ./.github/actions/build-selftests 93 with: 94 repo-path: '.kernel' 95 kernel: ${{ inputs.kernel }} 96 # 4. prepare rootfs 97 - name: prepare rootfs 98 uses: libbpf/ci/prepare-rootfs@main 99 env: 100 KBUILD_OUTPUT: '.kernel' 101 with: 102 project-name: 'libbpf' 103 arch: ${{ inputs.arch }} 104 kernel: ${{ inputs.kernel }} 105 kernel-root: '.kernel' 106 kbuild-output: ${{ env.KBUILD_OUTPUT }} 107 image-output: '/tmp/root.img' 108 # 5. run selftest in QEMU 109 - name: Run selftests 110 env: 111 KERNEL: ${{ inputs.kernel }} 112 REPO_ROOT: ${{ github.workspace }} 113 uses: libbpf/ci/run-qemu@main 114 with: 115 arch: ${{ inputs.arch }} 116 img: '/tmp/root.img' 117 vmlinuz: 'vmlinuz' 118 kernel-root: '.kernel' 119