name: 'vmtest'
description: 'Build + run vmtest'
inputs:
  kernel:
    description: 'kernel version or LATEST'
    required: true
    default: 'LATEST'
  arch:
    description: 'what arch to test'
    required: true
    default: 'x86_64'
  pahole:
    description: 'pahole rev or master'
    required: true
    default: 'master'
runs:
  using: "composite"
  steps:
    # setup environment
    - name: Setup environment
      uses: libbpf/ci/setup-build-env@master
      with:
        pahole: ${{ inputs.pahole }}
    # 1. download CHECKPOINT kernel source
    - name: Get checkpoint commit
      shell: bash
      run: |
        cat CHECKPOINT-COMMIT
        echo "CHECKPOINT=$(cat CHECKPOINT-COMMIT)" >> $GITHUB_ENV
    - name: Get kernel source at checkpoint
      uses: libbpf/ci/get-linux-source@master
      with:
        repo: 'https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git'
        rev: ${{ env.CHECKPOINT }}
        dest: '${{ github.workspace }}/.kernel'
    - name: Patch kernel source
      uses: libbpf/ci/patch-kernel@master
      with:
        patches-root: '${{ github.workspace }}/ci/diffs'
        repo-root: '.kernel'
    - name: Prepare to build BPF selftests
      shell: bash
      run: |
        source $GITHUB_ACTION_PATH/../../../ci/vmtest/helpers.sh
        foldable start "Prepare building selftest"
        cd .kernel
        cat tools/testing/selftests/bpf/config \
            tools/testing/selftests/bpf/config.${{ inputs.arch }} > .config
        make olddefconfig && make prepare
        cd -
        foldable end
    # 2. if kernel == LATEST, build kernel image from tree
    - name: Build kernel image
      if: ${{ inputs.kernel == 'LATEST' }}
      shell: bash
      run: |
        source $GITHUB_ACTION_PATH/../../../ci/vmtest/helpers.sh
        foldable start "Build Kernel Image"
        cd .kernel
        make -j $((4*$(nproc))) all > /dev/null
        cp vmlinux ${{ github.workspace }}
        cd -
        foldable end
    # else, just download prebuilt kernel image
    - name: Download prebuilt kernel
      if: ${{ inputs.kernel != 'LATEST' }}
      uses: libbpf/ci/download-vmlinux@master
      with:
        kernel: ${{ inputs.kernel }}
        arch: ${{ inputs.arch }}
    # 3. build selftests
    - name: Build BPF selftests
      uses: ./.github/actions/build-selftests
      with:
        repo-path: '.kernel'
        kernel: ${{ inputs.kernel }}
    # 4. prepare rootfs
    - name: prepare rootfs
      uses: libbpf/ci/prepare-rootfs@master
      env:
        KBUILD_OUTPUT: '.kernel'
      with:
        project-name: 'libbpf'
        arch: ${{ inputs.arch }}
        kernel: ${{ inputs.kernel }}
        kernel-root: '.kernel'
        kbuild-output: ${{ env.KBUILD_OUTPUT }}
        image-output: '/tmp/root.img'
    # 5. run selftest in QEMU
    - name: Run selftests
      env:
        KERNEL: ${{ inputs.kernel }}
        REPO_ROOT: ${{ github.workspace }}
      uses: libbpf/ci/run-qemu@master
      with:
        arch: ${{ inputs.arch }}
        img: '/tmp/root.img'
        vmlinuz: 'vmlinuz'
        kernel-root: '.kernel'
