Skip to content

ci: build Debian/Ubuntu and Fedora packages on release - #15

Merged
Nomadcxx merged 3 commits into
masterfrom
ci/release-packages
Jul 8, 2026
Merged

ci: build Debian/Ubuntu and Fedora packages on release#15
Nomadcxx merged 3 commits into
masterfrom
ci/release-packages

Conversation

@Nomadcxx

@Nomadcxx Nomadcxx commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

gslapper is currently only installable on Arch (AUR) and Nix. This adds automated native packaging for the other major distro families so users — and downstream consumers like sysc-greet's installer — can stop building from source.

What it does

On every v* tag push:

  1. Builds gslapper in three containers: ubuntu:24.04 (deb), debian:13 (deb, also serves Ubuntu 25.x), fedora:42 (rpm)
  2. Smoke-tests the binary (--help without a Wayland display) and prints ldd output for dependency auditing
  3. Packages with nfpm, appending per-distro runtime dependencies to the shared nfpm.yaml
  4. Installs the built package inside the container — a wrong dependency name fails the job at dependency resolution, not on a user's machine
  5. Attaches distro-suffixed artifacts + SHA256SUMS to the GitHub release with generated notes

workflow_dispatch runs the full build/package/install-verify as a dry run (version 0.0.0-dev) without creating a release.

Package contents

/usr/bin/gslapper, /usr/bin/gslapper-holder, systemd user units (gslapper.service, gslapper@.service), LICENSE, README — mirroring the PKGBUILD. No provides/conflicts with mpvpaper.

Validation

  • nfpm deb + rpm packaging verified locally against a real build: control fields, file list, modes, and appended depends all correct (dpkg-deb -I/-c inspected)
  • Workflow YAML syntax validated
  • Recommend running the workflow_dispatch dry run on this branch before merge; the install-verify step will confirm the per-distro dependency names against real repos

Modeled on sysc-greet's release workflow (cagebreak matrix job).

Nomadcxx added 3 commits July 8, 2026 23:37
Adds an nfpm config and a tag-triggered workflow that builds gslapper in
ubuntu:24.04, debian:13, and fedora:42 containers, packages deb/rpm with
per-distro runtime dependencies, verifies each package installs cleanly
with dependency resolution, and attaches artifacts plus SHA256SUMS to the
GitHub release. workflow_dispatch runs everything as a dry run without
releasing.
The binary links libsystemd.so.0 when built with libsystemd-dev present
(HAVE_SYSTEMD), but the runtime dependency lists did not declare it; the
in-container install check missed this because build dependencies had
already pulled the systemd libraries in. Add libsystemd0 (deb) and
systemd-libs (rpm) explicitly.

Also drop the workflow-level contents: write to read and grant write only
to the release job, so PR-triggered dry runs never hold a write token.
@Nomadcxx

Nomadcxx commented Jul 8, 2026

Copy link
Copy Markdown
Owner Author

Both findings addressed in eefb981:

systemd runtime deps (medium): libsystemd0 added to both deb legs, systemd-libs to the Fedora leg. Confirmed the finding locally — the built binary links libsystemd.so.0 (via HAVE_SYSTEMD, since the workflow installs libsystemd-dev/systemd-devel). You're also right about why the install check missed it: the build container already had the systemd libs. The explicit deps fix the packages; a truly clean-room install test would need a second fresh container per leg, which I've left out for now — the deps lists are short enough to audit against the ldd output the smoke-test step already prints.

permissions (low/nit): workflow-level is now contents: read; only the tag-gated release job gets contents: write. PR-triggered dry runs never hold a write token.

The PR dry run re-triggered on push — will confirm all three legs stay green.

@Nomadcxx
Nomadcxx merged commit 9ecfbea into master Jul 8, 2026
4 checks passed
@Nomadcxx
Nomadcxx deleted the ci/release-packages branch July 8, 2026 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant