|
62 | 62 | base-devel \ |
63 | 63 | cmake \ |
64 | 64 | cuda \ |
| 65 | + dkms \ |
65 | 66 | git \ |
66 | | - namcap |
| 67 | + kmod \ |
| 68 | + linux-headers \ |
| 69 | + namcap \ |
| 70 | + openssl |
67 | 71 | pacman -Scc --noconfirm |
68 | 72 |
|
69 | 73 | - name: Checkout |
|
73 | 77 | fetch-depth: 1 |
74 | 78 | submodules: recursive |
75 | 79 |
|
| 80 | + - name: Compile Vibeshine DRM against Arch kernel |
| 81 | + shell: bash |
| 82 | + run: | |
| 83 | + set -euo pipefail |
| 84 | +
|
| 85 | + mapfile -t kernel_build_dirs < <( |
| 86 | + find /usr/lib/modules -mindepth 2 -maxdepth 2 -type d -name build -print | sort |
| 87 | + ) |
| 88 | + if (( ${#kernel_build_dirs[@]} != 1 )); then |
| 89 | + echo "::error::Expected exactly one Arch kernel header tree, found ${#kernel_build_dirs[@]}." |
| 90 | + printf '%s\n' "${kernel_build_dirs[@]}" >&2 |
| 91 | + exit 1 |
| 92 | + fi |
| 93 | +
|
| 94 | + kernel_release="$(basename "$(dirname "${kernel_build_dirs[0]}")")" |
| 95 | + module_build_dir="${RUNNER_TEMP}/vibeshine-drm-${kernel_release}" |
| 96 | + cp -a third-party/libvirtualdisplay/linux/vibeshine-drm "${module_build_dir}" |
| 97 | + MAKEFLAGS="-j$(nproc)" \ |
| 98 | + "${module_build_dir}/build-module" "${kernel_release}" "${module_build_dir}" |
| 99 | + test -s "${module_build_dir}/vibeshine_drm.ko" |
| 100 | +
|
| 101 | + signing_key="${RUNNER_TEMP}/vibeshine-drm-mok.key" |
| 102 | + signing_certificate="${RUNNER_TEMP}/vibeshine-drm-mok.pub" |
| 103 | + openssl req -new -x509 -nodes -days 1 \ |
| 104 | + -subj '/CN=Vibeshine CI module signing key/' \ |
| 105 | + -newkey rsa:2048 -keyout "${signing_key}" \ |
| 106 | + -addext 'extendedKeyUsage=codeSigning' \ |
| 107 | + -outform DER -out "${signing_certificate}" >/dev/null 2>&1 |
| 108 | + "${kernel_build_dirs[0]}/scripts/sign-file" sha256 \ |
| 109 | + "${signing_key}" "${signing_certificate}" "${module_build_dir}/vibeshine_drm.ko" |
| 110 | +
|
| 111 | + certificate_serial="$(openssl x509 -inform DER -in "${signing_certificate}" -noout -serial)" |
| 112 | + certificate_serial="${certificate_serial#serial=}" |
| 113 | + module_sig_key="$(modinfo -F sig_key "${module_build_dir}/vibeshine_drm.ko")" |
| 114 | + module_sig_key="${module_sig_key//:/}" |
| 115 | + [[ "${module_sig_key^^}" == "${certificate_serial^^}" ]] |
| 116 | + [[ "$(modinfo -F signer "${module_build_dir}/vibeshine_drm.ko")" == \ |
| 117 | + 'Vibeshine CI module signing key' ]] |
| 118 | +
|
| 119 | + dkms_ci_version=0.0.1 |
| 120 | + dkms_source="/usr/src/vibeshine-drm-${dkms_ci_version}" |
| 121 | + cp -a third-party/libvirtualdisplay/linux/vibeshine-drm "${dkms_source}" |
| 122 | + sed "s/@PROJECT_VERSION_NUMERIC@/${dkms_ci_version}/g" \ |
| 123 | + "${dkms_source}/dkms.conf.in" >"${dkms_source}/dkms.conf" |
| 124 | + printf 'try_sign_modules=true\n' >/etc/dkms/framework.conf.d/vibeshine-ci.conf |
| 125 | + dkms add -m vibeshine-drm -v "${dkms_ci_version}" |
| 126 | + MAKEFLAGS="-j$(nproc)" dkms build \ |
| 127 | + -m vibeshine-drm -v "${dkms_ci_version}" -k "${kernel_release}" |
| 128 | + dkms install -m vibeshine-drm -v "${dkms_ci_version}" -k "${kernel_release}" |
| 129 | +
|
| 130 | + dkms_module="$(modinfo -k "${kernel_release}" -n vibeshine_drm)" |
| 131 | + dkms_certificate_serial="$(openssl x509 -inform DER \ |
| 132 | + -in /var/lib/dkms/mok.pub -noout -serial)" |
| 133 | + dkms_certificate_serial="${dkms_certificate_serial#serial=}" |
| 134 | + dkms_sig_key="$(modinfo -F sig_key "${dkms_module}")" |
| 135 | + dkms_sig_key="${dkms_sig_key//:/}" |
| 136 | + [[ -n "$(modinfo -F signer "${dkms_module}")" ]] |
| 137 | + [[ "${dkms_sig_key^^}" == "${dkms_certificate_serial^^}" ]] |
| 138 | + dkms remove -m vibeshine-drm -v "${dkms_ci_version}" --all |
| 139 | +
|
76 | 140 | - name: Fix workspace permissions |
77 | 141 | shell: bash |
78 | 142 | run: | |
@@ -163,10 +227,13 @@ jobs: |
163 | 227 | package_info="$(bsdtar -xOf "${package}" .PKGINFO)" |
164 | 228 | package_files="$(bsdtar -tf "${package}")" |
165 | 229 | grep -qx 'depend = dkms' <<< "${package_info}" |
166 | | - grep -qx 'depend = mokutil' <<< "${package_info}" |
| 230 | + grep -qx 'depend = mokutil>=0.7.2' <<< "${package_info}" |
167 | 231 | grep -qx 'usr/libexec/vibeshine/vibeshine-drm-install' <<< "${package_files}" |
168 | 232 | grep -qx 'usr/src/vibeshine-drm-[^/]*/dkms.conf' <<< "${package_files}" |
169 | 233 | bsdtar -xOf "${package}" usr/libexec/vibeshine/vibeshine-drm-install | bash -n |
| 234 | + package_install_script="$(bsdtar -xOf "${package}" .INSTALL)" |
| 235 | + bash -n <<< "${package_install_script}" |
| 236 | + grep -Fq 'vibeshine-drm-install install-package' <<< "${package_install_script}" |
170 | 237 |
|
171 | 238 | - name: Copy Artifacts |
172 | 239 | shell: bash |
|
0 commit comments