From 03be8c281bfa10defda8628889f3d4534f1f2458 Mon Sep 17 00:00:00 2001 From: Tony Hutter Date: Mon, 17 Mar 2025 12:18:27 -0700 Subject: [PATCH] runners: Add option to specify Ubuntu nightly kernel Allow installing a custom kernel from the Ubuntu nightly packages page to test ZFS against new kernels. Specifically, add a text box to specify the URL you want the runner to scrape and install from. For example: https://kernel.ubuntu.com/mainline/v6.14-rc7/ This option only works on workflow_dispatch, so the user will need to enter in the URL on the actions page and run the workflow manually. Signed-off-by: Tony Hutter --- .github/workflows/scripts/qemu-3-deps-vm.sh | 30 +++++++++++++++++++++ .github/workflows/scripts/qemu-3-deps.sh | 2 +- .github/workflows/zfs-qemu.yml | 7 ++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/qemu-3-deps-vm.sh b/.github/workflows/scripts/qemu-3-deps-vm.sh index 9bd86b5ba704..e5283c9cd98f 100755 --- a/.github/workflows/scripts/qemu-3-deps-vm.sh +++ b/.github/workflows/scripts/qemu-3-deps-vm.sh @@ -4,6 +4,11 @@ # 3) install dependencies for compiling and loading # # $1: OS name (like 'fedora41') +# $2: (optional) URL to install Ubuntu kernel nightly debian packages +# from. This is useful for testing out ZFS against new kernels. +# URL should point to one of Ubuntu's nightly kernel packages +# pages, like: https://kernel.ubuntu.com/mainline/v6.14-rc7/ +# ###################################################################### set -eu @@ -94,6 +99,27 @@ function tumbleweed() { echo "##[endgroup]" } +# $1: Ubuntu nightly kernel deb page to scrape and install from, like: +# https://kernel.ubuntu.com/mainline/v6.14-rc7/ +function install_ubuntu_nightly_kernel { + baseurl=$1 + wget $baseurl -O index.html + html=$(cat index.html) + list=$(echo "$html" | grep amd64 | grep generic | cut -d '"' -f 2 | \ + grep -v top) + singleheader=$(echo "$html" | grep linux | egrep 'linux-headers' | \ + cut -d '"' -f 2 | grep -v top | egrep -v '\-[a-gi-z]' | head -n 1) + + # Get the 4 or so kernel packages + for i in $list $singleheader ; do + wget $baseurl/$i + done + + sudo apt -y install *.deb + + rm -f linux-*.deb +} + # Install dependencies case "$1" in almalinux8) @@ -148,6 +174,10 @@ case "$1" in echo "##[group]Delete Ubuntu OpenZFS modules" for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done echo "##[endgroup]" + + if [ ! -z "$2" ] ; then + install_ubuntu_nightly_kernel "$2" + fi ;; esac diff --git a/.github/workflows/scripts/qemu-3-deps.sh b/.github/workflows/scripts/qemu-3-deps.sh index 184aed85b4e5..c420bcf0fab9 100755 --- a/.github/workflows/scripts/qemu-3-deps.sh +++ b/.github/workflows/scripts/qemu-3-deps.sh @@ -8,7 +8,7 @@ .github/workflows/scripts/qemu-wait-for-vm.sh vm0 scp .github/workflows/scripts/qemu-3-deps-vm.sh zfs@vm0:qemu-3-deps-vm.sh PID=`pidof /usr/bin/qemu-system-x86_64` -ssh zfs@vm0 '$HOME/qemu-3-deps-vm.sh' $1 +ssh zfs@vm0 '$HOME/qemu-3-deps-vm.sh' "$@" # wait for poweroff to succeed tail --pid=$PID -f /dev/null sleep 5 # avoid this: "error: Domain is already active" diff --git a/.github/workflows/zfs-qemu.yml b/.github/workflows/zfs-qemu.yml index cf466bcf1aa3..bcf821d3510c 100644 --- a/.github/workflows/zfs-qemu.yml +++ b/.github/workflows/zfs-qemu.yml @@ -15,6 +15,11 @@ on: required: false default: false description: 'Test on CentOS 10 stream' + ubuntu_kernel_debs_url: + type: string + required: false + default: "" + description: "(optional) Install from Ubuntu nightly kernel debs URL (like: https://kernel.ubuntu.com/mainline/v6.14-rc7)" concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} @@ -92,7 +97,7 @@ jobs: - name: Install dependencies timeout-minutes: 20 - run: .github/workflows/scripts/qemu-3-deps.sh ${{ matrix.os }} + run: .github/workflows/scripts/qemu-3-deps.sh ${{ matrix.os }} ${{ github.event.inputs.ubuntu_kernel_debs_url }} - name: Build modules timeout-minutes: 30