diff options
Diffstat (limited to '.github/workflows/tests.yml')
-rw-r--r-- | .github/workflows/tests.yml | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..30d6d1d --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,177 @@ +name: Run tests + +on: + # Build at 23:00 every Sunday + schedule: + - cron: "0 23 * * 1" + pull_request: + push: + +jobs: + test-distributions: + name: Build in containers + strategy: + matrix: + distro: + - {name: "almalinux", tag: "9"} + - {name: "almalinux", tag: "8"} + - {name: "alpine", tag: "3.19", variant: "-lts"} + - {name: "alpine", tag: "3.19", variant: "-virt"} + - {name: "alpine", tag: "3.18", variant: "-lts"} + - {name: "alpine", tag: "3.18", variant: "-virt"} + - {name: "alpine", tag: "3.17", variant: "-lts"} + - {name: "alpine", tag: "3.17", variant: "-virt"} + - {name: "alpine", tag: "3.16", variant: "-lts"} + - {name: "alpine", tag: "3.16", variant: "-virt"} + - {name: "archlinux", tag: "latest"} + - {name: "archlinux", tag: "latest", variant: "-lts"} + - {name: "archlinux", tag: "latest", variant: "-zen"} + - {name: "centos/centos", tag: "stream9", url: "quay.io/"} + - {name: "centos/centos", tag: "stream8", url: "quay.io/"} + - {name: "centos", tag: "7"} + - {name: "debian", tag: "testing"} + - {name: "debian", tag: "12"} + - {name: "debian", tag: "11"} + - {name: "debian", tag: "10"} + - {name: "fedora/fedora", tag: "39", url: "quay.io/"} + - {name: "fedora/fedora", tag: "38", url: "quay.io/"} + - {name: "gentoo/stage3", tag: "latest"} + - {name: "opensuse/tumbleweed", tag: "latest", variant: "-default", url: "registry.opensuse.org/"} + - {name: "opensuse/leap", tag: "15.5", variant: "-default", url: "registry.opensuse.org/"} + - {name: "ubuntu", tag: "23.10"} + - {name: "ubuntu", tag: "22.04"} + - {name: "ubuntu", tag: "20.04"} + - {name: "ubuntu", tag: "18.04"} + runs-on: ubuntu-20.04 + container: + image: ${{ matrix.distro.url }}${{ matrix.distro.name }}:${{ matrix.distro.tag }} + + steps: + - name: Install git for checkout action + if: contains(matrix.distro.name, 'opensuse') + run: | + zypper --non-interactive install git + + - uses: actions/checkout@v3 + + - name: Install AlmaLinux dependencies + if: matrix.distro.name == 'almalinux' + run: | + yum install -y diffutils elfutils-libelf gcc kernel kernel-devel make openssl + + - name: Install Alpine dependencies + if: matrix.distro.name == 'alpine' + run: | + apk --no-cache --update add bash gcc linux${{ matrix.distro.variant }} linux${{ matrix.distro.variant }}-dev make openssl coreutils + + - name: Install Arch Linux dependencies + if: matrix.distro.name == 'archlinux' + run: | + pacman -Syu --noconfirm diffutils gcc make linux${{ matrix.distro.variant }} linux${{ matrix.distro.variant }}-headers openssl + + - name: Install CentOS dependencies + if: contains(matrix.distro.name, 'centos') + run: | + yum install -y diffutils elfutils-libelf gcc kernel kernel-devel make openssl + + - name: Install Debian dependencies + if: matrix.distro.name == 'debian' + run: | + apt-get update -q + apt-get install -qy make linux-headers-amd64 linux-image-amd64 openssl xz-utils + + - name: Install Fedora dependencies + if: contains(matrix.distro.name, 'fedora') + run: | + yum install -y diffutils elfutils-libelf gcc kernel kernel-devel make openssl + + - name: Install Gentoo Linux dependencies + if: matrix.distro.name == 'gentoo/stage3' + run: | + echo -e "ACCEPT_KEYWORDS=\"~amd64\"\nACCEPT_LICENSE=\"*\"" >> /etc/portage/make.conf + emerge --sync + FEATURES="getbinpkg binpkg-ignore-signature" USE="generic-uki" emerge --noreplace -j$(nproc) -l$(nproc) --autounmask-continue '>=sys-kernel/gentoo-kernel-bin-6.6.0' + + - name: Install openSUSE leap dependencies + if: contains(matrix.distro.name, 'opensuse') + run: | + zypper --non-interactive install diffutils elfutils gcc kernel${{ matrix.distro.variant }} kernel${{ matrix.distro.variant }}-devel make openssl + + - name: Install Ubuntu dependencies + if: matrix.distro.name == 'ubuntu' + run: | + apt-get update -q + apt-get install -qy gcc make linux-headers-generic linux-image-generic openssl shim-signed + + - name: Install dkms + run: make install + + - name: Run tests + run: | + for moddir in /usr/lib/modules/ /lib/modules/; do + if [ -e "$moddir" ]; then + kernels=$(find "$moddir" -maxdepth 1 -type d -exec basename {} \;) + break + fi + done + + # There should be two entries - "modules" and the kernel we installed + if [ $(echo "${kernels}" | wc -l) -ne 2 ]; then + echo >&2 "Error: invalid number of kernels installed" + fi + + KERNEL_VER=$(echo "${kernels}" | tail -n1) + if [ -z "${KERNEL_VER}" ] ; then + echo >&2 "Error: no kernel package found" + exit 1 + fi + + echo "Found kernel ${KERNEL_VER}" + export KERNEL_VER + + echo "Module search paths" + for depmod in /etc/depmod.d/ /usr/lib/depmod.d/ /lib/depmod.d/; do + [ -e "$depmod" ] && grep -r ^search "$depmod" || true + done + + if [ "${{ matrix.distro.name }}" = alpine ] && [ "${{ matrix.distro.variant }}" = "-lts" ]; then + if [ "${{ matrix.distro.tag}}" = "3.16" ] || [ "${{ matrix.distro.tag }}" = "3.17" ]; then + ./run_test.sh --no-signing-tool + else + ./run_test.sh + fi + else + ./run_test.sh + fi + + test-vm: + name: Test in Ubuntu VM + strategy: + matrix: + version: + - 22.04 + - 20.04 + runs-on: ubuntu-${{ matrix.version }} + + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + run: | + sudo apt-get update -q + sudo apt-get install -qqy make + + - name: Install dkms + run: sudo make install + + - name: Run tests + run: sudo ./run_test.sh + + - name: Install the test module + run: sudo dkms install test/dkms_test-1.0 + + - name: Load the test module + run: sudo modprobe dkms_test + + - name: Remove the test module + run: sudo dkms remove --all -m dkms_test -v 1.0 |