feat(ci): Add kernel module build and release workflow
Some checks failed
Build kernel module / build (linux-headers-rpi-v6) (push) Failing after 3m39s
Build kernel module / build (linux-headers-rpi-v7) (push) Failing after 57s
Build kernel module / build (linux-headers-rpi-v8) (push) Failing after 5m32s
Build kernel module / release (push) Has been skipped
Some checks failed
Build kernel module / build (linux-headers-rpi-v6) (push) Failing after 3m39s
Build kernel module / build (linux-headers-rpi-v7) (push) Failing after 57s
Build kernel module / build (linux-headers-rpi-v8) (push) Failing after 5m32s
Build kernel module / release (push) Has been skipped
Introduce a workflow to build kernel modules for multiple header packages on PRs and releases. PR builds verify compilation, while release builds package outputs and publish them to a Gitea release. This enhances automation and ensures compatibility across target environments.
This commit is contained in:
parent
937fb73750
commit
5476a5db28
92
.gitea/workflows/build-kernel.yml
Normal file
92
.gitea/workflows/build-kernel.yml
Normal file
@ -0,0 +1,92 @@
|
||||
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 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:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
# Don't cancel the other targets if one package 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)
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build module (${{ matrix.headers_pkg }})
|
||||
working-directory: kernel
|
||||
env:
|
||||
HEADERS_PKG: ${{ matrix.headers_pkg }}
|
||||
run: ./build-in-docker.sh
|
||||
|
||||
- name: Stage build output (<kernel_version>/<headers_pkg>.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"
|
||||
|
||||
- name: Upload build output
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Name by headers_pkg so artifact names stay unique; the shared
|
||||
# <kernel_version>/ folder is reassembled at download via merge-multiple.
|
||||
name: ${{ matrix.headers_pkg }}
|
||||
path: kernel/out
|
||||
if-no-files-found: error
|
||||
|
||||
# Release flow only: reassembles the <kernel_version>/ 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:
|
||||
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: modules
|
||||
# Merge every artifact back into the shared <kernel_version>/ tree.
|
||||
merge-multiple: true
|
||||
|
||||
- name: Assemble release package
|
||||
run: |
|
||||
repo="${{ github.event.repository.name }}"
|
||||
root="package/$repo"
|
||||
mkdir -p "$root"
|
||||
cp -r modules/. "$root"/ # <kernel_version>/<headers_pkg>.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
|
||||
Loading…
x
Reference in New Issue
Block a user