ffmpeg-debian + mpv-debian: pacman-on-Debian latent break — fails on next pkgver bump #55

Closed
opened 2026-05-20 18:56:40 +00:00 by claude-noether · 0 comments
Contributor

Summary

PR #47 ("build.yml: route 4 fourier-debian jobs to debian-aarch64 (bohr)") changed runs-on: from arch-aarch64 to debian-aarch64 for four jobs in .gitea/workflows/build.yml, but only two install-deps step bodies actually got converted from pacman to apt-get (libva-v4l2-request-fourier-debian, post-PR #44; daedalus + dkms-debian, post-PR #50).

The remaining two jobs still call pacman -Syu:

  • ffmpeg-v4l2-request-debian.gitea/workflows/build.yml line ~927
  • mpv-fourier-debian.gitea/workflows/build.yml line ~1066

These will fail instantly on the bohr runner the next time either's pkgver actually changes, because the Debian runner has no pacman binary. Right now they're silently skipped by check-already-published.sh (their published versions in packages.reauktion.de/debian/dists/trixie/main already match the staged PKGVER in build-deb.sh), so the latent break isn't visible.

How it'll surface

Next upstream bump of either package:

  1. PR updates arch/*/PKGBUILD _commit + pkgver (and presumably debian/*/build-deb.sh to match).
  2. PR merges to main.
  3. CI run starts for the two jobs.
  4. check-already-published.sh returns skip=0 (new version).
  5. Next step: pacman -Syu --noconfirm --needed ... → command not found → step fails → job fails.
  6. .deb not built, not published. Existing host fleet (higgs, ampere, fresnel) stays on old version.

Observable: the arch/* build at runs-on: arch-aarch64 succeeds and publishes a new .pkg.tar; the debian/* counterpart at runs-on: debian-aarch64 fails. Arch and Debian repos drift.

Repro / detection

From the marfrit-packages root:

grep -nE '^  [a-z-]+:|runs-on:|pacman|apt-get' .gitea/workflows/build.yml | \
  awk '/^[0-9]+:  [a-z]/{job=$0; rt=""; pm=""; next} \
       /runs-on:/{rt=$0} \
       /pacman|apt-get/{pm=pm" "$0} \
       END{print}'

Manual triangulation: the runs-on: debian-aarch64 jobs that still reference pacman are the broken ones.

On higgs (Debian trixie aarch64) the same build-deb.sh for either package runs cleanly with the right apt-get build-deps installed — confirmed for daedalus-v4l2 (PR #50 verification) and libva-v4l2-request-fourier (PR #44 verification). The fix is purely the CI yaml's install-deps step body.

Proposed fix

Same pattern PR #50 used for daedalus-debian + dkms-debian — replace each broken job's retry pacman -Syu ... block with:

export DEBIAN_FRONTEND=noninteractive
retry apt-get update -qq
retry apt-get install -y --no-install-recommends \
    <Debian package names for that job>

Debian package name mappings (vs. the current Arch names):

Arch name Debian equivalent
base-devel build-essential
pkgconf pkg-config
ninja ninja-build
libdrm libdrm-dev
dpkg dpkg-dev
openssh openssh-client
nasm / yasm nasm yasm
libass libass-dev
dav1d libdav1d-dev
freetype2 libfreetype-dev
libpulse libpulse-dev
libva libva-dev
libvorbis libvorbis-dev
libvpx libvpx-dev
libwebp libwebp-dev
x264 / x265 libx264-dev libx265-dev
libxml2 libxml2-dev
opus libopus-dev
v4l-utils v4l-utils

For mpv-fourier-debian, additionally drop the [marfrit] ffmpeg-v4l2-request-fourier preinstall step (mirroring daedalus-debian's PR #50 fix) — apt's libavcodec-dev / libavformat-dev / libavutil-dev provide matching trixie headers, and the daemon path dlopen's at runtime so any header set works.

Scope

Two jobs, two install-deps blocks. ~30-line patch. Already validated on equivalent jobs (daedalus PR #50, libva PR #44).

Happy to ship the patch as a single PR. Flagging as an issue first so the operator decides whether to land it preemptively or wait until the next pkgver bump forces it.

## Summary PR #47 ("build.yml: route 4 fourier-debian jobs to debian-aarch64 (bohr)") changed `runs-on:` from `arch-aarch64` to `debian-aarch64` for **four** jobs in `.gitea/workflows/build.yml`, but only **two** install-deps step bodies actually got converted from `pacman` to `apt-get` (libva-v4l2-request-fourier-debian, post-PR #44; daedalus + dkms-debian, post-PR #50). The remaining **two** jobs still call `pacman -Syu`: - `ffmpeg-v4l2-request-debian` — `.gitea/workflows/build.yml` line ~927 - `mpv-fourier-debian` — `.gitea/workflows/build.yml` line ~1066 These will fail instantly on the bohr runner the next time either's `pkgver` actually changes, because the Debian runner has no `pacman` binary. Right now they're silently skipped by `check-already-published.sh` (their published versions in `packages.reauktion.de/debian/dists/trixie/main` already match the staged `PKGVER` in `build-deb.sh`), so the latent break isn't visible. ## How it'll surface Next upstream bump of either package: 1. PR updates `arch/*/PKGBUILD` _commit + pkgver (and presumably `debian/*/build-deb.sh` to match). 2. PR merges to main. 3. CI run starts for the two jobs. 4. `check-already-published.sh` returns `skip=0` (new version). 5. Next step: `pacman -Syu --noconfirm --needed ...` → command not found → step fails → job fails. 6. `.deb` not built, not published. Existing host fleet (higgs, ampere, fresnel) stays on old version. Observable: the `arch/*` build at `runs-on: arch-aarch64` succeeds and publishes a new `.pkg.tar`; the `debian/*` counterpart at `runs-on: debian-aarch64` fails. Arch and Debian repos drift. ## Repro / detection From the marfrit-packages root: ``` grep -nE '^ [a-z-]+:|runs-on:|pacman|apt-get' .gitea/workflows/build.yml | \ awk '/^[0-9]+: [a-z]/{job=$0; rt=""; pm=""; next} \ /runs-on:/{rt=$0} \ /pacman|apt-get/{pm=pm" "$0} \ END{print}' ``` Manual triangulation: the `runs-on: debian-aarch64` jobs that still reference `pacman` are the broken ones. On higgs (Debian trixie aarch64) the same `build-deb.sh` for either package runs cleanly with the right apt-get build-deps installed — confirmed for daedalus-v4l2 (PR #50 verification) and libva-v4l2-request-fourier (PR #44 verification). The fix is purely the CI yaml's install-deps step body. ## Proposed fix Same pattern PR #50 used for daedalus-debian + dkms-debian — replace each broken job's `retry pacman -Syu ...` block with: ```yaml export DEBIAN_FRONTEND=noninteractive retry apt-get update -qq retry apt-get install -y --no-install-recommends \ <Debian package names for that job> ``` Debian package name mappings (vs. the current Arch names): | Arch name | Debian equivalent | |---|---| | base-devel | build-essential | | pkgconf | pkg-config | | ninja | ninja-build | | libdrm | libdrm-dev | | dpkg | dpkg-dev | | openssh | openssh-client | | nasm / yasm | nasm yasm | | libass | libass-dev | | dav1d | libdav1d-dev | | freetype2 | libfreetype-dev | | libpulse | libpulse-dev | | libva | libva-dev | | libvorbis | libvorbis-dev | | libvpx | libvpx-dev | | libwebp | libwebp-dev | | x264 / x265 | libx264-dev libx265-dev | | libxml2 | libxml2-dev | | opus | libopus-dev | | v4l-utils | v4l-utils | For `mpv-fourier-debian`, additionally drop the `[marfrit] ffmpeg-v4l2-request-fourier preinstall` step (mirroring daedalus-debian's PR #50 fix) — apt's libavcodec-dev / libavformat-dev / libavutil-dev provide matching trixie headers, and the daemon path dlopen's at runtime so any header set works. ## Scope Two jobs, two install-deps blocks. ~30-line patch. Already validated on equivalent jobs (daedalus PR #50, libva PR #44). Happy to ship the patch as a single PR. Flagging as an issue first so the operator decides whether to land it preemptively or wait until the next pkgver bump forces it.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: marfrit/marfrit-packages#55