Files
mail/resources/rpm

Fedora RPM support

The release RPM supports Fedora 43 and 44, x86_64. Build on the oldest supported Fedora (43) and validate the exact resulting artifact on every supported version. Building on a newer Fedora can introduce unavailable ELF symbol requirements even when the source and explicit Requires do not change; alpha.7's Fedora 44 build required GLIBC_2.43 from libm and failed to install on Fedora 43.

.github/workflows/native-platforms.yml separates the build from the runtime matrix. The latter starts clean Fedora containers without build dependencies, installs the RPM with weak dependencies disabled, checks dynamically loaded display libraries before installing desktop test tools, renders PDF fixtures as an unprivileged user, checks desktop metadata, renders an application frame on X11 and Wayland, and verifies removal. Publication requires the whole matrix to pass. Transaction logs, requirements, the installed package list, and startup results are retained as CI artifacts. Headless tests cover the default CPU renderer; they do not replace manual KDE Discover or hardware GPU checks.

To reproduce the runtime check locally with Docker, from the repository root:

mkdir -p target/rpm-test
docker run --rm \
  --mount "type=bind,source=$PWD,target=/work,readonly" \
  --mount "type=bind,source=$PWD/target/rpm-test,target=/results" \
  fedora:43 \
  bash /work/scripts/test-rpm.sh /work/target/rpm/flectar-mail.rpm /results

Repeat with fedora:44. The test script changes system packages and creates a test user, so run it only in a disposable container.

When changing supported versions, update the runtime matrix, build container, Fedora-specific Cargo cache key, README translations, and generated release notes together. Add a new Fedora version to the matrix before advertising support. Keep the oldest supported version as the build baseline until its support is deliberately retired. If native dependencies diverge so that one RPM cannot pass the matrix, publish separately labelled per-release builds.

Keep RPM's automatic ELF requirements enabled. Removing a requirement or using --nodeps hides an incompatible binary instead of fixing it. The public RPM filename remains stable, and checksums/attestations cover the tested bytes.