summaryrefslogtreecommitdiffstats
path: root/.github/workflows/tests.yml
blob: 39220932a5421af501fac4a9e49a66997c6fd443 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
name: Run tests

on: [push, pull_request]

jobs:
  test-distributions:
    name: Build in containers
    strategy:
      matrix:
        distro:
          - {name: "alpine", tag: "3.14", variant: "-lts"}
          - {name: "alpine", tag: "3.14", variant: "-virt"}
          - {name: "alpine", tag: "3.13", variant: "-lts"}
          - {name: "alpine", tag: "3.13", variant: "-virt"}
          - {name: "alpine", tag: "3.12", variant: "-lts"}
          - {name: "alpine", tag: "3.12", variant: "-virt"}
          - {name: "alpine", tag: "3.11", variant: "-lts"}
          - {name: "alpine", tag: "3.11", variant: "-virt"}
          - {name: "alpine", tag: "3.10", variant: "-vanilla"}
          - {name: "alpine", tag: "3.10", variant: "-virt"}
          - {name: "archlinux", tag: "latest"}
          - {name: "archlinux", tag: "latest", variant: "-lts"}
          - {name: "archlinux", tag: "latest", variant: "-zen"}
          - {name: "centos", tag: "7"}
          - {name: "almalinux", tag: "8"}
          - {name: "almalinux", tag: "9"}
          - {name: "debian", tag: "11"}
          - {name: "debian", tag: "10"}
          - {name: "debian", tag: "9"}
          - {name: "debian", tag: "8"}
          - {name: "ubuntu", tag: "22.04"}
          - {name: "ubuntu", tag: "20.04"}
          - {name: "ubuntu", tag: "18.04"}
    runs-on: ubuntu-20.04
    container:
      image: docker://docker.io/library/${{ matrix.distro.name }}:${{ matrix.distro.tag }}

    steps:
    - uses: actions/checkout@v3

    - 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

    - name: Install Arch Linux dependencies
      if: matrix.distro.name == 'archlinux'
      run: |
        pacman -Syu --noconfirm diffutils gcc make linux${{ matrix.distro.variant }}-headers openssl

    - name: Install CentOS dependencies
      if: matrix.distro.name == 'centos'
      run: |
        yum install -y diffutils elfutils-libelf-devel gcc kernel kernel-devel make openssl

    - name: Install AlmaLinux dependencies
      if: matrix.distro.name == 'almalinux'
      run: |
        yum install -y diffutils elfutils-libelf-devel gcc kernel kernel-devel make openssl

    - name: Install Debian dependencies
      if: matrix.distro.name == 'debian'
      run: |
        EXTRA_ARGS=''
        if [ "${{ matrix.distro.tag }}" = 8 ] ; then
            # repo key is expired
            EXTRA_ARGS="--allow-unauthenticated"
        fi
        apt-get update -q
        apt-get install -qy $EXTRA_ARGS gcc make linux-headers-amd64 linux-image-amd64 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: Compute packaged kernel version
      id: versions
      run: |
        KERNEL_VER=''
        if [ "${{ matrix.distro.name }}" = alpine ] ; then
            KERNEL_VER="$(apk info --contents "linux${{ matrix.distro.variant }}-dev" | sed -n 's:^lib/modules/\([^/][^/]*\)/.*:\1:p' | head -n 1)"
        elif [ "${{ matrix.distro.name }}" = archlinux ] ; then
            KERNEL_VER="$(pacman -Qql "linux${{ matrix.distro.variant }}-headers" | sed -n 's:^/usr/lib/modules/\([^/]\+\)/.*:\1:p' | head -n 1)"
        elif [ "${{ matrix.distro.name }}" = centos ] || [ "${{ matrix.distro.name }}" = almalinux ] ; then
            KERNEL_VER="$(LANG=C rpm -qi kernel-devel | sed -n 's/^Source RPM *: kernel-\(.*\).src.rpm$/\1.x86_64/p' | tail -n 1)"
        elif [ "${{ matrix.distro.name }}" = debian ] ; then
            KERNEL_VER="$(LANG=C dpkg --status linux-headers-amd64 | sed -n 's/^Depends: linux-headers-\(\S\+\)\( .*\)\?/\1/p' | head -n 1)"
        elif [ "${{ matrix.distro.name }}" = ubuntu ] ; then
            KERNEL_VER="$(LANG=C dpkg --status linux-headers-generic | sed -n 's/^Depends: linux-headers-\(\S\+\)\( .*\)\?/\1/p' | head -n 1)"
        fi
        if [ -z "${KERNEL_VER}" ] ; then
            echo >&2 "Error: no kernel package found"
            exit 1
        fi
        echo "Found packaged kernel ${KERNEL_VER}"
        echo "KERNEL_VER=${KERNEL_VER}" >> "$GITHUB_ENV"

    - name: Install dkms
      run: make install

    - name: Run tests
      run: |
        if [ "${{ matrix.distro.name }}" = alpine ] && ([ "${{ matrix.distro.tag }}" = 3.10 ] || [ "${{ matrix.distro.variant }}" = "-lts" ]); then
            ./run_test.sh --no-signing-tool
        elif [ "${{ matrix.distro.name }}" = debian ] && [ "${{ matrix.distro.tag }}" = 8 ]; then
            ./run_test.sh --no-signing-tool
        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