0052a6ae30
windows-msix / package (x64, C:\Users\Public\ffmpeg, x86_64-pc-windows-msvc, C:\t) (push) Failing after 13s
windows / build (x86_64-pc-windows-msvc) (push) Failing after 8s
apple / swift (push) Successful in 1m13s
apple / screenshots (push) Successful in 5m57s
android / android (push) Successful in 3m58s
ci / rust (push) Successful in 4m10s
ci / web (push) Successful in 51s
ci / docs-site (push) Successful in 1m0s
arch / build-publish (push) Successful in 9m35s
deb / build-publish (push) Successful in 3m59s
decky / build-publish (push) Successful in 15s
ci / bench (push) Successful in 4m51s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 4s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 2m38s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 5s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 2m31s
flatpak / build-publish (push) Successful in 4m24s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Failing after 9m13s
docker / deploy-docs (push) Successful in 6s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Has been cancelled
windows-host / package (push) Successful in 23m50s
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 1m15s
windows / build (aarch64-pc-windows-msvc) (push) Successful in 4m56s
The re-architecture split the Linux client into two binaries (shell + Vulkan session streamer) and added the pf-ffvk crate, whose build.rs runs bindgen over FFmpeg's libavutil/hwcontext_vulkan.h (#include <vulkan/vulkan.h>). Two release regressions fell out of that on the desktop-package legs: 1. Missing build dep. The Arch build (archlinux:base-devel + its own pacman list) fatal-errored at `vulkan/vulkan.h file not found`. Add the Vulkan dev headers wherever the client compiles from a self-managed dep set: arch (PKGBUILD makedepends + arch.yml), rpm (spec BuildRequires + rpm.yml + fedora image), deb.yml (belt-and-suspenders; the rust-ci image already bakes libvulkan-dev), and the screenshots job. The flatpak builds offline against the GNOME SDK, so install Vulkan-Headers into /app as a pinned module and point pf-ffvk's bindgen at it via PF_FFVK_VULKAN_INCLUDE. 2. Only the shell shipped. arch/deb/rpm built and installed just punktfunk-client; the shell execs its sibling punktfunk-session for a connect, so desktop streaming would break exactly as Decky's did. Build and install BOTH binaries in all three, and declare the runtime Vulkan loader the session binary dlopens (vulkan-icd-loader / vulkan-loader / libvulkan1 — not a DT_NEEDED, so shlibdeps/auto-requires can't see it). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
4.2 KiB
Docker
69 lines
4.2 KiB
Docker
# CI builder for the punktfunk RPM. The Fedora version is parameterized so one Dockerfile
|
|
# serves every target whose ffmpeg soname must match: Fedora 43 == Bazzite's base (group
|
|
# "bazzite"), Fedora 44 == the Fedora KDE spin (group "fedora-44"). The RPM's auto-generated
|
|
# library Requires (e.g. libavcodec.so.NN) pin to exactly what the chosen base — and thus the
|
|
# target — ships. Used by .gitea/workflows/rpm.yml; built+pushed by .gitea/workflows/docker.yml.
|
|
#
|
|
# docker build --build-arg FEDORA_VERSION=43 -f ci/fedora-rpm.Dockerfile -t punktfunk-fedora-rpm ci
|
|
# docker build --build-arg FEDORA_VERSION=44 -f ci/fedora-rpm.Dockerfile -t punktfunk-fedora44-rpm ci
|
|
#
|
|
# Mirrors ci/rust-ci.Dockerfile (the Ubuntu workspace builder) for the rpmbuild side.
|
|
ARG FEDORA_VERSION=43
|
|
FROM fedora:${FEDORA_VERSION}
|
|
|
|
# RPM Fusion (free + nonfree) provides the NVENC-capable ffmpeg-devel the host links against.
|
|
RUN dnf -y install \
|
|
"https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" \
|
|
"https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm" \
|
|
&& dnf -y install \
|
|
# rpmbuild + source-tarball tooling; nodejs runs the Gitea Actions JS (checkout/cache) only
|
|
# — the punktfunk-web console builds AND runs on bun (installed below); unzip is for the bun
|
|
# installer.
|
|
rpm-build rpmdevtools systemd-rpm-macros git tar gzip nodejs unzip \
|
|
# build toolchain + bindgen
|
|
gcc gcc-c++ clang clang-devel cmake nasm pkgconf-pkg-config curl ca-certificates \
|
|
# ffmpeg (NVENC), capture/audio/display link deps
|
|
ffmpeg-devel pipewire-devel wayland-devel libxkbcommon-devel opus-devel \
|
|
mesa-libGL-devel mesa-libgbm-devel \
|
|
# punktfunk-client link deps (GTK4 shell + SDL3 gamepads)
|
|
gtk4-devel libadwaita-devel SDL3-devel \
|
|
# pf-ffvk bindgen over libavutil/hwcontext_vulkan.h needs <vulkan/vulkan.h>
|
|
vulkan-headers \
|
|
&& dnf clean all
|
|
|
|
# bun — both the BUILD tool and the RUNTIME for the punktfunk-web console (`bun run build` -> the
|
|
# Nitro `bun`-preset .output, served by `Bun.serve` with TLS — HTTP/1.1 over TLS). The
|
|
# RPM vendors THIS bun binary. Not in Fedora repos; install the official standalone binary to a
|
|
# system PATH dir so the rpmbuild `%build`/`%install` (run as any uid) find it.
|
|
RUN curl -fsSL https://bun.sh/install | bash \
|
|
&& install -m0755 /root/.bun/bin/bun /usr/local/bin/bun \
|
|
&& bun --version
|
|
|
|
# libcuda link stub — the zerocopy path links a fixed set of cuXxx driver symbols, but CI has
|
|
# no GPU and never RUNS CUDA. Rather than drag in the NVIDIA userspace stack, synthesize a stub
|
|
# libcuda.so.1 that just defines those symbols (the SAME approach the Ubuntu image takes with the
|
|
# real driver lib, minus the driver). On Bazzite the real driver provides libcuda.so.1 at runtime.
|
|
# The symbol list is `nm -D --undefined-only` of the built host binary; a new cu* call would fail
|
|
# the link with a clear "undefined reference", flagging this list to update.
|
|
RUN set -eux; : > /tmp/cuda_stub.c; \
|
|
for s in cuCtxCreate_v2 cuCtxSetCurrent cuCtxSynchronize cuDestroyExternalMemory \
|
|
cuDeviceGet cuExternalMemoryGetMappedBuffer cuGraphicsGLRegisterImage \
|
|
cuGraphicsMapResources cuGraphicsSubResourceGetMappedArray cuGraphicsUnmapResources \
|
|
cuGraphicsUnregisterResource cuImportExternalMemory cuInit cuMemAllocPitch_v2 \
|
|
cuMemcpy2D_v2 cuMemFree_v2; do \
|
|
echo "int $s(void){return 0;}" >> /tmp/cuda_stub.c; \
|
|
done; \
|
|
gcc -shared -fPIC -Wl,-soname,libcuda.so.1 -o /usr/lib64/libcuda.so.1 /tmp/cuda_stub.c; \
|
|
ln -sf libcuda.so.1 /usr/lib64/libcuda.so; \
|
|
rm -f /tmp/cuda_stub.c; ldconfig; test -e /usr/lib64/libcuda.so
|
|
|
|
# Rustup (not Fedora's packaged rust) so rust-toolchain.toml's pinned channel resolves, matching
|
|
# the Ubuntu builder. Shared location so jobs running as any uid can use it.
|
|
ENV RUSTUP_HOME=/usr/local/rustup \
|
|
CARGO_HOME=/usr/local/cargo \
|
|
PATH=/usr/local/cargo/bin:$PATH
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
|
| sh -s -- -y --no-modify-path --profile minimal \
|
|
&& chmod -R a+w "$RUSTUP_HOME" "$CARGO_HOME" \
|
|
&& rustc --version && cargo --version
|