name: Build kernel module on: # Release flow: triggered when a version tag is pushed (tag a commit on master). # Builds every target and publishes the modules to a Gitea release. push: tags: - 'v*' # Compile-check flow: every PR that targets master. Builds only, no release. pull_request: branches: - master jobs: # 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 versions if one fails to build. fail-fast: false matrix: kernel_version: - "1:6.12.93-1+rpt1" steps: - name: Checkout uses: actions/checkout@v4 - name: Build module (${{ matrix.kernel_version }}) working-directory: kernel env: HEADERS_PKG: ${{ env.HEADERS_PKG }} KERNEL_VERSION: ${{ matrix.kernel_version }} run: ./build-in-docker.sh - name: Stage build output (modules/iec_listener_.ko) working-directory: kernel run: | 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 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: 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/') runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Download all build output uses: actions/download-artifact@v4 with: path: dist # Merge every artifact back into the shared modules/ folder. merge-multiple: true - name: Assemble release package run: | repo="${{ github.event.repository.name }}" root="package/$repo" mkdir -p "$root" 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") - name: Publish to Gitea release uses: actions/gitea-release-action@v1.3.6 with: api_key: ${{ secrets.GITEA_TOKEN }} files: |- *.zip