Add production .rpm packaging and dnf setup; share runtime staging
Template tests / tests (pull_request) Failing after 33s
Template tests / tests (pull_request) Failing after 33s
Phase 3 of the improvement plan (PR 9 of the sequence): the dnf/Fedora packaging half, in separate Linux-specific files, mirroring the apt/.deb work. - packaging/linux/common/stage-runtime.sh: shared runtime-only payload staging extracted from the .deb builder so the two package formats never drift. It copies app code + a fixed Electron runtime + production npm deps (npm ls --omit=dev), guards against dev-dep leaks, and fails without node_modules. The .deb builder now delegates to it. - packaging/linux/fedora/stepforge.spec: runtime Requires (nss, nspr, gtk3, …), Recommends (xinput, portal, pipewire), %license, and a %post that makes chrome-sandbox setuid and refreshes desktop/MIME/icon caches. No compilation — it packages the prebuilt BuildRoot. - packaging/linux/fedora/package.sh: stages the shared payload, substitutes version/maintainer into the spec, and runs rpmbuild against the prebuilt BuildRoot with detected arch. Requires rpmbuild + node_modules; emits an .rpm + sha256. - scripts/linux/dnf/install-runtime-deps.sh and install-build-deps.sh: separate runtime vs build dependency sets for dnf (runtime installs no build tools). - docs/linux/dnf.md: Fedora/RHEL install + build guide, distinct from apt.md. Tests: packaging-linux.test.js gains Fedora/dnf structural checks (spec Requires + MPL-2.0 + %license + sandbox setup, builder shares staging + requires rpmbuild, dnf build/runtime dep separation, shared staging never copies the whole dev tree). tests/integration/linux/package-rpm.test.sh builds a real .rpm and asserts runtime-only contents (honest skip when rpmbuild is absent, as on this apt host). Verified: 13 packaging unit tests pass; the refactored .deb builder still produces a valid runtime-only package (integration test green); the .rpm integration test skips cleanly where rpmbuild is unavailable. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install the BUILD toolchain for producing StepForge packages on dnf-based
|
||||
# systems (Fedora/RHEL). For DEVELOPERS/packagers only; never shipped inside
|
||||
# the end-user package.
|
||||
set -euo pipefail
|
||||
|
||||
if ! command -v dnf >/dev/null 2>&1; then
|
||||
echo "This script is for dnf-based systems (Fedora/RHEL)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SUDO=""
|
||||
if [ "$(id -u)" -ne 0 ]; then SUDO="sudo"; fi
|
||||
|
||||
PACKAGES=(
|
||||
rpm-build rpmdevtools # build the .rpm
|
||||
desktop-file-utils # validate the .desktop entry
|
||||
ca-certificates # npm ci over https
|
||||
xorg-x11-server-Xvfb # headless smoke test under Xvfb
|
||||
)
|
||||
|
||||
echo "Installing StepForge build dependencies via dnf..."
|
||||
$SUDO dnf install -y "${PACKAGES[@]}"
|
||||
|
||||
cat <<'MSG'
|
||||
Done. Also install the pinned Node toolchain (see .nvmrc — Node 22.12+):
|
||||
nvm install && nvm use # or another Node 22 LTS install method
|
||||
Then, from the repo root:
|
||||
npm ci
|
||||
npm run package:linux:rpm
|
||||
MSG
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install the RUNTIME libraries StepForge needs on dnf-based systems (Fedora,
|
||||
# RHEL/derivatives). These are the shared libraries the packaged Electron
|
||||
# runtime links against, plus the X11/portal integration used for capture.
|
||||
# For END USERS installing from the tarball; the .rpm declares the same set as
|
||||
# Requires so dnf pulls them automatically.
|
||||
set -euo pipefail
|
||||
|
||||
if ! command -v dnf >/dev/null 2>&1; then
|
||||
echo "This script is for dnf-based systems (Fedora/RHEL). Use the apt script on Debian/Ubuntu." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SUDO=""
|
||||
if [ "$(id -u)" -ne 0 ]; then SUDO="sudo"; fi
|
||||
|
||||
PACKAGES=(
|
||||
# Chromium/Electron shared libraries
|
||||
nss nspr atk at-spi2-atk at-spi2-core cups-libs libdrm
|
||||
gtk3 mesa-libgbm alsa-lib libxkbcommon
|
||||
libXcomposite libXdamage libXfixes libXrandr libxshmfence
|
||||
# X11 per-click capture (marker-accurate) — X11 sessions only
|
||||
xorg-x11-server-utils xinput
|
||||
# Wayland screen-share via the XDG portal + PipeWire
|
||||
xdg-desktop-portal pipewire
|
||||
)
|
||||
|
||||
echo "Installing StepForge runtime dependencies via dnf..."
|
||||
# Some package names differ across Fedora releases; install best-effort so one
|
||||
# missing optional name doesn't abort the whole set.
|
||||
$SUDO dnf install -y "${PACKAGES[@]}" || {
|
||||
echo "Some packages were unavailable; retrying individually..." >&2
|
||||
for pkg in "${PACKAGES[@]}"; do $SUDO dnf install -y "$pkg" || echo " (skipped: $pkg)" >&2; done
|
||||
}
|
||||
echo "Done. StepForge runtime dependencies are installed."
|
||||
Reference in New Issue
Block a user