diff --git a/.gitea/workflows/build-kernel.yml b/.gitea/workflows/build-kernel.yml index 6be7f47..b57019a 100644 --- a/.gitea/workflows/build-kernel.yml +++ b/.gitea/workflows/build-kernel.yml @@ -12,54 +12,55 @@ on: - master jobs: - # Build (and thereby compile-check) the module for each header package. Runs on - # both triggers — on a PR this is the whole story; on a tag the `release` job - # below consumes the artifacts. All packages build against the latest archive - # kernel; the exact version is auto-resolved from the image at build time. + # Build (and thereby compile-check) the module for each pinned kernel version. + # Runs on both triggers — on a PR this is the whole story; on a tag the + # `release` job below consumes the artifacts. + # + # HEADERS_PKG is fixed to linux-headers-rpi-v8 (64-bit, Pi Zero 2 W): the -v6/-v7 + # headers are 32-bit (armhf) and aren't carried by the arm64 raspberrypi archive + # this arm64 builder uses. build: runs-on: ubuntu-latest + env: + HEADERS_PKG: linux-headers-rpi-v8 strategy: - # Don't cancel the other targets if one package fails to build. + # Don't cancel the other versions if one fails to build. fail-fast: false matrix: - headers_pkg: - - linux-headers-rpi-v8 # 64-bit (Pi Zero 2 W) - - linux-headers-rpi-v7 # 32-bit - - linux-headers-rpi-v6 # 32-bit (older Pis) + kernel_version: + - "1:6.12.93-1+rpt1" steps: - name: Checkout uses: actions/checkout@v4 - - name: Build module (${{ matrix.headers_pkg }}) + - name: Build module (${{ matrix.kernel_version }}) working-directory: kernel env: - HEADERS_PKG: ${{ matrix.headers_pkg }} + HEADERS_PKG: ${{ env.HEADERS_PKG }} + KERNEL_VERSION: ${{ matrix.kernel_version }} run: ./build-in-docker.sh - - name: Stage build output (/.ko) + - name: Stage build output (modules/iec_listener_.ko) working-directory: kernel run: | - # Ask the just-built image which kernel tree it installed, then drop the - # -rpi-vN arch suffix so every package shares one version folder. - kver=$(docker run --rm --platform linux/arm64 --entrypoint sh \ - "${IMAGE:-iec-kbuild}" -c 'ls -1 /lib/modules | sort -V | tail -n1') - ver="${kver%-rpi-*}" - echo "resolved kernel: $kver -> version folder: $ver" - mkdir -p "out/$ver" - mv iec_listener.ko "out/$ver/${{ matrix.headers_pkg }}.ko" + ver="${{ matrix.kernel_version }}" + safe="${ver//[:\/]/-}" # path-friendly: 1:6.12.93-1+rpt1 -> 1-6.12.93-1+rpt1 + echo "kernel version $ver -> file modules/iec_listener_${safe}.ko" + mkdir -p out/modules + mv iec_listener.ko "out/modules/iec_listener_${safe}.ko" - name: Upload build output uses: actions/upload-artifact@v4 with: - # Name by headers_pkg so artifact names stay unique; the shared - # / folder is reassembled at download via merge-multiple. - name: ${{ matrix.headers_pkg }} + # Name by the path-friendly version so artifact names stay unique; all + # of them merge back into the single modules/ folder at download time. + name: ${{ matrix.kernel_version }} path: kernel/out if-no-files-found: error - # Release flow only: reassembles the / folders, wraps them in a - # single repo-named top folder alongside selftest.sh, zips it and attaches it to - # the Gitea release for the pushed tag. Skipped entirely on pull requests. + # Release flow only: merges all built modules into one modules/ folder, wraps it + # in a single repo-named top folder alongside selftest.sh, zips it and attaches + # it to the Gitea release for the pushed tag. Skipped entirely on pull requests. release: needs: build if: startsWith(github.ref, 'refs/tags/') @@ -71,8 +72,8 @@ jobs: - name: Download all build output uses: actions/download-artifact@v4 with: - path: modules - # Merge every artifact back into the shared / tree. + path: dist + # Merge every artifact back into the shared modules/ folder. merge-multiple: true - name: Assemble release package @@ -80,7 +81,7 @@ jobs: repo="${{ github.event.repository.name }}" root="package/$repo" mkdir -p "$root" - cp -r modules/. "$root"/ # /.ko + cp -r dist/modules "$root"/ # modules/iec_listener_.ko cp kernel/selftest.sh "$root"/ # selftest.sh only at the package root (cd package && zip -r "../${repo}-${{ github.ref_name }}.zip" "$repo")