| name: merge |
| on: |
| pull_request_target: |
| types: |
| - closed |
| |
| jobs: |
| if_merged: |
| if: github.event.pull_request.merged == true |
| runs-on: ubuntu-22.04 |
| steps: |
| - name: Restore veristat values |
| id: cache-veristat-restore |
| uses: actions/cache/restore@v4 |
| with: |
| path: ${{ github.workspace }}/veristat |
| key: veristat-diffs-main |
| |
| # Hard turn-off interactive mode |
| - run: echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections |
| |
| # Refresh packages list |
| - run: sudo apt update |
| |
| ### DOWNLOAD AND INSTALL DEPENDENCIES ### |
| |
| # Download dependencies packaged by Ubuntu |
| - run: sudo apt -y install bison busybox-static cargo cmake coreutils cpio elfutils file flex gcc gcc-multilib git iproute2 jq kbd kmod libcap-dev libelf-dev libunwind-dev libvirt-clients libzstd-dev linux-headers-generic linux-tools-common linux-tools-generic make ninja-build pahole pkg-config python3-dev python3-pip python3-requests qemu-kvm rsync rustc stress-ng udev zstd |
| |
| # clang 17 |
| # Use a custom llvm.sh script which includes the -y flag for |
| # add-apt-repository. Otherwise, the CI job will hang. If and when |
| # https://github.com/opencollab/llvm-jenkins.debian.net/pull/26 is |
| # merged, we can go back to using https://apt.llvm.org/llvm.sh. |
| - run: wget https://raw.githubusercontent.com/Decave/llvm-jenkins.debian.net/fix_llvmsh/llvm.sh |
| - run: chmod +x llvm.sh |
| - run: sudo ./llvm.sh all |
| - run: sudo ln -sf /usr/bin/clang-17 /usr/bin/clang |
| - run: sudo ln -sf /usr/bin/llvm-strip-17 /usr/bin/llvm-strip |
| |
| - uses: actions/checkout@v4 |
| |
| # meson |
| - run: pip install meson |
| |
| # Install virtme-ng |
| - run: pip install virtme-ng |
| |
| # Get the latest sched-ext enabled kernel directly from the korg |
| # for-next branch |
| - run: git clone --single-branch -b for-next --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git linux |
| |
| # Print the latest commit of the checked out sched-ext kernel |
| - run: cd linux && git log -1 --pretty=format:"%h %ad %s" --date=short |
| |
| # Build a minimal kernel (with sched-ext enabled) using virtme-ng |
| - run: cd linux && vng -v --build --config ../.github/workflows/sched-ext.config |
| |
| # Generate kernel headers |
| - run: cd linux && make headers |
| |
| - run: wget https://github.com/libbpf/veristat/releases/download/v0.3.2/veristat-v0.3.2-amd64.tar.gz |
| - run: tar -xvf veristat-v0.3.2-amd64.tar.gz && sudo cp veristat /usr/bin/ |
| - run: sudo chmod +x /usr/bin/veristat && sudo chmod 755 /usr/bin/veristat |
| |
| ### END DEPENDENCIES ### |
| |
| # The actual build: |
| - run: meson setup build -Dkernel=$(pwd)/linux -Dkernel_headers=./linux/usr/include -Dveristat_diff_dir=$GITHUB_WORKSPACE/veristat |
| - run: meson compile -C build --jobs=1 |
| |
| # Print CPU model before running the tests (this can be useful for |
| # debugging purposes) |
| - run: grep 'model name' /proc/cpuinfo | head -1 |
| |
| # Setup KVM support |
| - 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 |
| |
| # run veristat |
| - run: meson compile -C build veristat_diff |
| |
| # update veristat cache dirs |
| - run: cd $GITHUB_WORKSPACE/veristat && for file in *_new.csv; do mv "$file" "${file%_new.csv}.csv"; done || echo "failed to update veristat cache" |
| |
| - name: Save veristat cache |
| id: cache-veristat-save |
| uses: actions/cache/save@v4 |
| with: |
| path: ${{ github.workspace }}/veristat |
| key: veristat-diffs-main |