23 Commits

Author SHA1 Message Date
90c8537e00 Add deploy-runner.sh for fresh-VM act runner setup
Some checks failed
ScoutFS CI / build (8, localhost/scoutfs-builder:el8, scoutfs-el8) (push) Has been cancelled
ScoutFS CI / build (9, localhost/scoutfs-builder:el9, scoutfs-el9) (push) Has been cancelled
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>
2026-04-06 21:57:04 -05:00
f36e06f545 Switch to self-hosted runner with cached incremental builds
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>
2026-04-06 21:55:05 -05:00
fc2175c6c7 Fix kernel watcher using manifest instead of API name matching
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>
2026-04-06 21:09:55 -05:00
1170339abe Add --allowerasing to all dnf install commands
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>
2026-04-06 21:06:54 -05:00
7e15b91c63 Add daily kernel watcher to auto-trigger builds for new kernels
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>
2026-04-06 21:04:11 -05:00
c28982713f Enable EL8 build with all fixes from EL9
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>
2026-04-06 20:59:38 -05:00
17411a3343 Add scoutfs-utils RPM build to pipeline
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>
2026-04-06 20:58:45 -05:00
092ab38da8 Fix kernel-devel packages replacing each other during install
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>
2026-04-06 17:27:49 -05:00
11de5a8fed Install all available kernel-devel versions, not just latest
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>
2026-04-06 17:18:15 -05:00
6b6956afb6 Fix system-release = 9.nil dependency in built RPMs
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>
2026-04-06 17:06:37 -05:00
98a59fb495 Update setup-scoutfs.sh 2026-04-06 22:05:15 +00:00
2ff2c279fc Update setup-scoutfs.sh 2026-04-06 22:04:49 +00:00
23d70ab00a Update setup-scoutfs.sh 2026-04-06 22:04:33 +00:00
5594a58ea2 Fix sparse check failing build when sparse not installed
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>
2026-04-06 16:30:28 -05:00
f6ca6125aa Make sparse optional, try CRB repo first
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>
2026-04-06 16:25:35 -05:00
533d27fd90 Add sparse to build deps for kernel static analysis
The kmod Makefile runs sparse for static checking during build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 16:24:05 -05:00
92d4881335 Add which to build deps for sparse checker script
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>
2026-04-06 16:23:41 -05:00
76a0717c2d Fix rpmbuild using host kernel version instead of target
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>
2026-04-06 16:16:28 -05:00
cc46a3c18b Replace actions/checkout and upload-artifact with manual steps
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>
2026-04-06 16:09:10 -05:00
808602c83e Rename GITEA_TOKEN secret to TOKEN_GITEA
Gitea requires the TOKEN_GITEA naming convention for secrets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 16:01:43 -05:00
ad4f659fd2 Disable all builds except AlmaLinux 9
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>
2026-04-06 15:59:23 -05:00
7051201d3e Add ScoutFS CI build pipeline for Gitea Act Runner
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.
2026-04-06 11:18:41 -05:00
5edd7648af Initial commit 2026-04-06 11:17:46 -05:00