e7a8cf2bba
ci / web (push) Successful in 58s
apple / swift (push) Successful in 1m24s
ci / docs-site (push) Successful in 59s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 17s
decky / build-publish (push) Successful in 25s
windows-host / package (push) Successful in 19m46s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 17s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 17s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 18s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 17s
android / android (push) Successful in 16m12s
arch / build-publish (push) Successful in 12m14s
ci / bench (push) Successful in 5m27s
apple / screenshots (push) Successful in 6m32s
ci / rust (push) Successful in 19m26s
deb / build-publish (push) Successful in 12m58s
docker / deploy-docs (push) Successful in 24s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 24m51s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 24m51s
Ship the management web console and the plugin/script runner across the packaging
matrix, and fix a Linux tray startup crash.
- nix: add punktfunk-web (Nitro SSR on bun) and punktfunk-scripting (Effect runner),
with services.punktfunk.{web,scripting} modules. Both bun node_modules come from
fixed-output derivations pinned to real deps hashes; patchShebangs the web
node_modules so orval/paraglide/vite run in the sandbox. Validated on x86_64-linux
(nix build .#punktfunk-{web,scripting,tray,host} all green).
- punktfunk-scripting now ships for deb/rpm/arch/nix/windows, mirroring the web-console
mechanics (vendored bun on deb/rpm/arch, pkgs.bun on nix; one self-contained
`bun build --target=bun` bundle). Opt-in: host Recommends it, but the systemd --user
unit ships un-started (Windows registers its scheduled task disabled).
- fix(tray): build punktfunk-tray in its OWN cargo invocation on nix/rpm/arch. Cargo
unifies features across one `cargo build`, so co-building the tray with the host pulls
the host's ashpd->zbus/tokio onto the tray's shared zbus and it panics at startup
("there is no reactor running, must be called from the context of a Tokio 1.x
runtime"). Isolated, the tray's zbus stays on async-io. The .deb already did this;
runtime-verified on nix.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
3.8 KiB
Bash
Executable File
69 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build the punktfunk-host RPM from the committed tree, for the Gitea RPM registry (Bazzite).
|
|
#
|
|
# Counterpart to ../debian/build-deb.sh. The library Requires (libavcodec.so.NN, …) are
|
|
# auto-generated by rpmbuild from the binary it links — so build this in the Fedora 43 image
|
|
# (ci/fedora-rpm.Dockerfile) to match Bazzite's sonames. libcuda is excluded in the spec.
|
|
#
|
|
# Usage: PF_VERSION=0.0.1 [PF_RELEASE=0.ci42.gdeadbee] bash packaging/rpm/build-rpm.sh
|
|
# Output: dist/punktfunk-<version>-<release>.<arch>.rpm (+ the -debuginfo/-debugsource subpkgs)
|
|
set -euo pipefail
|
|
|
|
PF_VERSION="${PF_VERSION:-0.5.0}" # canary base; keep one minor ahead of the latest stable release
|
|
PF_RELEASE="${PF_RELEASE:-1}"
|
|
# PF_WITH_WEB=1 builds the punktfunk-web subpackage too (needs `bun` on PATH — present in the CI
|
|
# builder image, not in a plain mock chroot). Default off so a bare `rpmbuild`/COPR still works.
|
|
WEB_OPT=()
|
|
[ "${PF_WITH_WEB:-0}" = "1" ] && WEB_OPT=(--with web)
|
|
# PF_WITH_SCRIPTING=1 builds the punktfunk-scripting subpackage (the plugin/script runner). Same bun
|
|
# requirement as web; default off so a bare `rpmbuild`/COPR still works.
|
|
SCRIPTING_OPT=()
|
|
[ "${PF_WITH_SCRIPTING:-0}" = "1" ] && SCRIPTING_OPT=(--with scripting)
|
|
ROOTDIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
cd "$ROOTDIR"
|
|
|
|
TOP="$(mktemp -d)"
|
|
trap 'rm -rf "$TOP"' EXIT
|
|
mkdir -p "$TOP"/{SOURCES,SPECS,BUILD,BUILDROOT,RPMS,SRPMS}
|
|
|
|
# Source tarball with the prefix %autosetup expects (punktfunk-<version>/). From HEAD so the
|
|
# build is reproducible from a commit (CI checks one out); the spec is read from the working
|
|
# tree directly, so spec edits apply without a re-commit.
|
|
git archive --format=tar.gz --prefix="punktfunk-${PF_VERSION}/" \
|
|
-o "$TOP/SOURCES/punktfunk-${PF_VERSION}.tar.gz" HEAD
|
|
|
|
# libcuda link stub (self-maintaining). The zerocopy FFI links the NVIDIA driver lib (-lcuda), but
|
|
# the CI builder has no GPU and never RUNS CUDA. Synthesize a stub libcuda that DEFINES every cu*
|
|
# driver symbol the host source references, derived from the source HERE so a newly-added cu* call
|
|
# can't silently break the link. (ci/fedora-rpm.Dockerfile ships a frozen list that went stale —
|
|
# undefined cuStreamCreateWithPriority/cuMemcpy2DAsync_v2/…; this regen supersedes it.) Defining
|
|
# extra unused symbols is harmless; a missing one fails the link. Only when /usr/lib64 is writable
|
|
# (CI image runs as root) — COPR/mock provides the real cuda-cudart-devel stub instead.
|
|
if [ "$(id -u)" = 0 ] && [ -d /usr/lib64 ]; then
|
|
CU_SYMS="$(grep -rhoE '\bcu[A-Z][A-Za-z0-9_]*' crates/punktfunk-host/src/ | sort -u || true)"
|
|
if [ -n "$CU_SYMS" ]; then
|
|
STUB_C="$(mktemp --suffix=.c)"
|
|
for s in $CU_SYMS; do printf 'int %s(void){return 0;}\n' "$s" >> "$STUB_C"; done
|
|
gcc -shared -fPIC -Wl,-soname,libcuda.so.1 -o /usr/lib64/libcuda.so.1 "$STUB_C"
|
|
ln -sf libcuda.so.1 /usr/lib64/libcuda.so
|
|
rm -f "$STUB_C"; ldconfig 2>/dev/null || true
|
|
echo "== libcuda stub regenerated from source: $(printf '%s\n' "$CU_SYMS" | wc -l) symbols =="
|
|
fi
|
|
fi
|
|
|
|
# --nodeps: the spec's BuildRequires (cargo, rust, *-devel) are for COPR's mock chroot, which
|
|
# resolves them from RPMs. Our builder image provides the toolchain via rustup (so
|
|
# rust-toolchain.toml's pinned channel works) and the -devel libs via dnf, neither of which
|
|
# rpmbuild's RPM-level check sees — skip it; a genuinely missing dep fails the compile/link.
|
|
rpmbuild -bb --nodeps "${WEB_OPT[@]}" "${SCRIPTING_OPT[@]}" \
|
|
--define "_topdir $TOP" \
|
|
--define "pf_version ${PF_VERSION}" \
|
|
--define "pf_release ${PF_RELEASE}" \
|
|
packaging/rpm/punktfunk.spec
|
|
|
|
mkdir -p dist
|
|
find "$TOP/RPMS" -name '*.rpm' -exec cp -v {} dist/ \;
|
|
echo "== Requires (must NOT contain libcuda) =="
|
|
rpm -qp --requires dist/punktfunk-${PF_VERSION}-*.rpm 2>/dev/null | grep -iE 'cuda|nvidia' \
|
|
&& echo " !! NVIDIA/CUDA leak !!" || echo " clean"
|