One-shot script that installs podman + git, creates the cache volume,
builds the scoutfs-builder images, downloads act_runner, registers it
with the scoutfs-el8/el9 labels, and installs a systemd unit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces the ephemeral EL8/EL9/watch-kernels workflows with a single
ScoutFS CI workflow that runs on a self-hosted Gitea Act Runner using
pre-baked builder images and a persistent /var/cache/scoutfs-ci volume.
cache-kernels.sh downloads only new kernel-devel RPMs and diffs against
the Gitea manifest so each run only builds kernels that aren't already
published, dramatically reducing run time for the common case.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Gitea package API returns package names without kernel versions,
so every kernel always appeared "new". Now uses a manifest file stored
in the Gitea generic package registry (scoutfs-built-kernels/elX/).
After each successful build, update-kernel-manifest.sh records which
kernels were built. The watcher compares available kernel-devel
versions against this manifest.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AlmaLinux containers ship curl-minimal which conflicts with the full
curl package pulled in by git. Adding --allowerasing lets dnf replace
curl-minimal with curl automatically.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Runs daily at 06:00 UTC (and on manual dispatch). Compares available
kernel-devel versions in the distro repos against packages already
in the Gitea registry. If new kernels are found, triggers the
corresponding build workflow via API.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Apply same fixes as EL9 pipeline: manual git checkout (no Node.js),
utils RPM build step, proper build results output. Currently targets
AlmaLinux 8 only (Rocky commented out).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The utils package (scoutfs CLI, scoutfs-fenced, headers) is
kernel-independent so only one build is needed per run. Adds
ci/build-utils-rpm.sh and a new workflow step between kmod build
and signing. Both kmod and utils RPMs get signed and published.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DNF treats kernel-devel as a regular package, so installing a new
version removes the previous one. Only one version was ever present.
Fix by downloading all versions first with dnf download, then
installing them all with rpm -ivh --force --nodeps so every version
coexists in /usr/src/kernels/.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The default dnf install only gets the latest kernel-devel. Users may
run older minor kernel versions (e.g., 611.5.1 vs 611.45.1). Enumerate
all available versions with --showduplicates and install each one so
the kmod is built for every supported kernel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The spec's Lua code extracts the EL minor version from %{dist} (e.g.,
.el9_7 -> 7), but inside containers %{dist} is often just ".el9"
without the minor suffix. The Lua match returns nil, producing a
bogus "system-release = 9.nil" requirement.
Fix by deriving the full dist tag from /etc/os-release VERSION_ID
and passing --define "dist .el9_7" to rpmbuild.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The kmod Makefile unconditionally passes C=1 which invokes
sparse-filtered.sh. When sparse isn't found, which returns non-zero
and kills the build. Try EPEL first; if unavailable, install a no-op
stub so the build proceeds without static analysis.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sparse is not in default EL9 repos. Try installing from CRB and
gracefully skip if unavailable — the build will just skip static
analysis.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The kmod build invokes sparse-filtered.sh which uses `which` to locate
the sparse binary. Missing from minimal AlmaLinux container image.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The spec falls back to uname -r which returns the host kernel (Debian)
inside the container. Pass --define kversion to override. Also fix
output paths to use absolute paths since the script cd's into the
source directory.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AlmaLinux container doesn't include Node.js, which actions/checkout@v4
and upload-artifact@v3 require. Use manual git clone and cat instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Disable EL8, Alpine, and support matrix workflows for initial testing.
Only the EL9 pipeline is active, targeting AlmaLinux 9 only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Automated pipeline to build, sign, and publish ScoutFS kernel module
packages across AlmaLinux 8/9, Rocky Linux 8/9, and Alpine 3.18-3.21
using Gitea's built-in package registry.