From e976c8801662615963283eefc46891c4fe4797a8 Mon Sep 17 00:00:00 2001 From: Markus Fritsche Date: Wed, 20 May 2026 19:03:36 +0200 Subject: [PATCH] ci: convert daedalus-v4l2{,-dkms}-debian install steps to apt-get MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #47 moved the daedalus-v4l2-debian + daedalus-v4l2-dkms-debian jobs from runs-on: arch-aarch64 to runs-on: debian-aarch64, but left the install-deps steps using `pacman -Syu` — which doesn't exist on the Debian runner. Both jobs were latent-broken; the break only surfaces once a daedalus pkgver actually changes (the rebuild guard skipped them in runs #133-134 since nothing about daedalus moved between PR #47 and PR #48). PR #49 bumped both daedalus packages to 0.1.0+r20+g3dd0eb0 (the DAEMON-PPS H.264 SPS/PPS NAL synth landing) — so run #135's daedalus-debian + daedalus-dkms-debian jobs actually executed and hit the broken pacman step. Result: instant failure on `pacman -Syu`. Fix: replace the pacman invocations with apt-get equivalents. For daedalus-v4l2-debian, drop the [marfrit] ffmpeg-v4l2-request- fourier preinstall — Debian's stock libavcodec-dev / libavformat- dev / libavutil-dev provide matching headers (both trixie ffmpeg and the daedalus daemon's runtime dlopen target are libavcodec 61.x), and the daemon never link-binds against libav (Option γ — dlopen at runtime), so any header set with the right struct definitions works. Verified end-to-end on higgs (Debian trixie aarch64, equivalent to bohr): clone the source tarball, run build-deb.sh, produces daedalus-v4l2_0.1.0+r20+g3dd0eb0-1_arm64.deb cleanly (10/10 ninja steps, daedalus_v4l2_daemon binary linked). NOTE: ffmpeg-v4l2-request-debian (line ~907) and mpv-fourier- debian (line ~1048) have the same pacman-on-Debian bug from PR #47 but are still skipped because their pkgvers haven't moved. Not fixing those in this PR to keep the change focused on unblocking DAEMON-PPS verification — they'll need the same treatment the next time they bump. Co-Authored-By: Claude Opus 4.7 --- .gitea/workflows/build.yml | 49 +++++++++++++++----------------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 815777a8d..c289c6de4 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -1144,39 +1144,25 @@ jobs: echo "$result" >> "$GITHUB_OUTPUT" echo "decision: $result" - - name: install build-deps (sans ffmpeg — see [marfrit] step) + - name: install build-deps if: steps.skip-check.outputs.skip != '1' run: | set -e retry() { for i in 1 2 3; do "$@" && return 0; rc=$?; echo "retry $i (exit=$rc)" >&2; sleep $((i*5)); done; return 1; } - # Do NOT pull stock 'ffmpeg' here: the arch-aarch64 runner has - # ffmpeg-v4l2-request-fourier pre-installed from the mpv-aarch64 - # job (configured via [marfrit]), and pacman -S ffmpeg would - # conflict on the libav* drop-in. Daedalus build only needs - # libavcodec/libavformat headers, which the fourier package - # already supplies. Keep cmake/ninja/pkgconf/libdrm here; the - # ffmpeg-dev equivalent comes via the next step. - retry pacman -Syu --noconfirm --needed \ - dpkg openssh rsync curl base-devel git cmake ninja pkgconf \ - libdrm - - - name: ensure ffmpeg-v4l2-request-fourier installed (link-time ABI source) - if: steps.skip-check.outputs.skip != '1' - run: | - set -e - # Idempotent: pre-install the marfrit fourier ffmpeg so cmake - # finds libavcodec / libavformat / libavutil headers + .so's. - # Mirrors mpv-fourier-debian's [marfrit] step. - curl -sLo /tmp/marfrit.gpg https://packages.reauktion.de/marfrit.gpg - pacman-key --add /tmp/marfrit.gpg - pacman-key --lsign-key 92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C - rm -f /tmp/marfrit.gpg - if ! grep -q '^\[marfrit\]' /etc/pacman.conf; then - printf '\n[marfrit]\nServer = https://packages.reauktion.de/arch/$arch\nSigLevel = Required\n' >> /etc/pacman.conf - fi - pacman -Sy --noconfirm - rm -f /var/cache/pacman/pkg/ffmpeg-v4l2-request-fourier-*-aarch64.pkg.tar.* - printf 'y\ny\ny\n' | pacman -S --needed marfrit/ffmpeg-v4l2-request-fourier + export DEBIAN_FRONTEND=noninteractive + retry apt-get update -qq + # libav*-dev provide the headers daedalus daemon dlopens at + # runtime — Debian's stock packages match the trixie ABI the + # daemon will encounter on Pi 5 hosts (both ship libavcodec + # 61.x). The fourier ffmpeg fork isn't needed here; the + # daemon never link-binds against libav (Option γ — dlopen + # at runtime), so any header set with the right struct + # definitions works. + retry apt-get install -y --no-install-recommends \ + build-essential cmake ninja-build pkg-config git \ + libavcodec-dev libavformat-dev libavutil-dev libdrm-dev \ + linux-libc-dev \ + curl ca-certificates openssh-client rsync dpkg-dev - name: install hertz deploy ssh key if: steps.skip-check.outputs.skip != '1' @@ -1238,7 +1224,10 @@ jobs: run: | set -e retry() { for i in 1 2 3; do "$@" && return 0; rc=$?; echo "retry $i (exit=$rc)" >&2; sleep $((i*5)); done; return 1; } - retry pacman -Syu --noconfirm --needed dpkg openssh rsync curl tar gzip + export DEBIAN_FRONTEND=noninteractive + retry apt-get update -qq + retry apt-get install -y --no-install-recommends \ + dpkg-dev openssh-client rsync curl ca-certificates tar gzip - name: install hertz deploy ssh key if: steps.skip-check.outputs.skip != '1'