• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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