Add Fedora and Arch package recipes (#24)

* Package Ferese for Fedora and Arch releases

* Build release packages alongside workspace checks

* Include dependency licenses and software GPU test drivers

* Limit package checks to release PRs and fix Arch Cargo dependency

* Prepare Ferese 0.1.0-beta

* Release config locks before closing inherited file descriptions

* Install the lock PAM policy for native release checks

* Include xauth in distribution package test dependencies

* Regenerate Arch Git package metadata

* Run package checks with an explicit UTC timezone

* Remove unused bundled fonts and accept installed license receipts

* Format the system font test helper

* Load an installed font for headless text rendering checks

* Isolate package test runtimes and reap container child processes
This commit is contained in:
Samuel Onoja authored and GitHub committed 2026-10-11 14:16:00 +01:00
1 parent 587602b493
commit 1b9fabbbe4
25 files changed
+1019 -170

No files matched your search

+114
View File
@@ -0,0 +1,114 @@
# Packages and releases
Ferese ships as one package. It includes the compositor, shell, Settings, lock
screen, authentication agent, recording helper and desktop portal.
The release workflow builds an x86_64 RPM on Fedora 44 and an x86_64 Arch package.
COPR and AUR publication are separate steps; neither repository is set up by this
workflow.
## Install a release package
Download the package for your distribution from
[GitHub Releases](https://github.com/ferese-wm/ferese/releases), then install it:
```sh
# Fedora: select the ferese RPM, not the debuginfo or source RPM.
sudo dnf install ./ferese-<version>-1.fc44.x86_64.rpm
# Arch Linux
sudo pacman -U ./ferese-<version>-1-x86_64.pkg.tar.zst
```
Select Ferese in your login manager, or run `ferese-session` from a local TTY.
The package does not replace your login manager or modify your personal config.
To start with the supplied config:
```sh
mkdir -p ~/.config/ferese
cp -n /usr/libexec/ferese/config.example.kdl ~/.config/ferese/config.kdl
```
If you installed with `install.sh`, uninstall that copy before installing a
package. Its `/usr/local/bin` launchers take precedence over `/usr/bin`, and its
portal service can override the packaged service. From the original checkout:
```sh
sudo ./scripts/install-session.sh uninstall
```
Keep your personal config. Log out before changing the installed session, then
log back in once the package is installed.
## Build packages locally
With Python 3.11 or newer and the pinned Rust toolchain installed, prepare the
source archive and versioned recipes from a checkout:
```sh
python3 scripts/package.py source
```
This downloads the locked Rust dependencies and includes an offline Cargo cache.
Ferese uses two packages with the same name and version from different sources,
which `cargo vendor` cannot represent. The cache preserves those source identities
and includes the Git submodules needed by libcosmic. It contains no Cargo
credentials or user-level Cargo configuration.
The resulting files are in `target/dist`: a source archive, Fedora spec, Arch
PKGBUILD and source checksum. Package builds run offline. Dependency license
notices and a JSON report of their sources and SPDX licenses ship with the package.
### Fedora
```sh
sudo dnf install rpm-build dnf5-plugins
sudo dnf builddep target/dist/ferese.spec
mkdir -p ~/rpmbuild/SOURCES
cp target/dist/ferese-*.tar.gz ~/rpmbuild/SOURCES/
rpmbuild -ba target/dist/ferese.spec
```
The binary RPMs are in `~/rpmbuild/RPMS`; the source RPM is in `~/rpmbuild/SRPMS`.
Build with `--with resize_metrics` to enable resize-barrier measurements.
The source RPM can also be submitted to COPR once a project is configured.
### Arch Linux
Build as a regular user with the dependencies listed in the generated PKGBUILD:
```sh
cd target/dist
makepkg -s
```
For a development build, copy `packaging/arch/ferese-git/PKGBUILD` into an empty
build directory and run `makepkg -s`. It tracks `main` and conflicts with the
release package. Submit that recipe to AUR separately if you want AUR distribution.
## Publish a release
1. Set `workspace.package.version` in `Cargo.toml` and update `Cargo.lock`.
2. Commit the release changes and push them.
3. Tag that commit with the same version, prefixed by `v`, then push the tag:
```sh
git tag v0.1.0-beta
git push origin v0.1.0-beta
```
A tag/version mismatch fails before packaging. Tags with a prerelease suffix,
such as `v0.2.0-rc.1`, produce a GitHub prerelease.
The workflow builds and tests both packages before publishing. Release assets
include the offline source archive, binary and source RPMs, Arch package,
PKGBUILD, `.SRCINFO`, Fedora spec and SHA-256 checksums. A failed upload leaves a
draft; rerunning the workflow can finish that draft. Published releases are not
overwritten.
Label a release preparation PR `release` to run the package builds before
merging. You can also use **Run workflow** to test a branch without publishing
or creating a tag. Fedora and Arch jobs run the workspace tests under a private
D-Bus session and validate the installed desktop files. They do not test real
DRM hardware; check login, locking, authentication, screen sharing and recording
on each distribution before announcing a release.