Repository navigation
[ci] Build FFmpeg natively per architecture, then merge - #3273
Merged
Merged
Conversation
build-ffmpeg.yml built both amd64 and arm64 in a single buildx call on one amd64 runner, QEMU-emulating arm64 - the same pattern build-images.yml moved away from after multi-hour runs, and on this base the emulation also triggered GNU tar's "Function not implemented" failure. Split it the same way: a native per-arch build job (ubuntu-24.04 / ubuntu-24.04-arm) pushes its single-arch result to GHCR, a merge job combines the two into one manifest, and release (workflow_dispatch with release=true) copies that manifest to Docker Hub instead of rebuilding or re-pushing layers. Also bump the Makefile's FFMPEG_VERSION default to 9.0 to match .ffmpeg/Dockerfile's own ARG default - `make ffmpeg` always passes --build-arg FFMPEG_VERSION=$(FFMPEG_VERSION), which was silently overriding the Dockerfile's default back to 8.1 in every CI run so far. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Contributor
|
ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
build-ffmpeg.ymlbuilt bothamd64andarm64in a singledocker buildx build --platform linux/amd64,linux/arm64call on oneubuntu-24.04runner, QEMU-emulatingarm64. That's the same patternbuild-images.ymlmoved away from (see itsbuildjob comment: "QEMU-emulating arm64 ... ran past an hour"), and on the Ubuntu 26.04 base it also triggered GNU tar's "Cannot open: Function not implemented" failure under emulation (fixed separately in [build] Update base image to Ubuntu 26.04 (resolute) #3272 by switching tobsdtar, but the underlying emulation cost and risk remained).build-images.ymldoes:prepare: computesBUILD_DATEand the lowercased GHCR namespace once, so every job agrees.build(matrix:amd64onubuntu-24.04,arm64onubuntu-24.04-arm): builds natively, single platform, no QEMU; pushes its own arch-tagged image to GHCR.merge: combines the two arch tags into one real multi-arch manifest on GHCR viadocker buildx imagetools create.deploy(only onworkflow_dispatchwithrelease: true): copies that already-merged GHCR manifest straight to Docker Hub under the public tags (latest,$(FFMPEG_VERSION),$(FFMPEG_VERSION)-$(BUILD_DATE)), instead of rebuilding or re-pushing any layers.Makefiletargets:push_ffmpeg_arch,merge_ffmpeg_arch, rewrittenrelease_ffmpeg_latest/release_ffmpeg_ghcr_latestto source from the merged GHCR manifest; dropped the now-unusedtag_ffmpeg_latest. Added a smallARCHvariable (derived the same wayCURRENT_PLATFORMis).FFMPEG_VERSIONdefault from8.1to9.0, to match.ffmpeg/Dockerfile's ownARG FFMPEG_VERSION="9.0"default merged in [build] Update base image to Ubuntu 26.04 (resolute) #3272.make ffmpegalways passes--build-arg FFMPEG_VERSION=$(FFMPEG_VERSION)explicitly, which was silently overriding the Dockerfile's default back to8.1in every CI run — so the FFmpeg 9.0 bump from [build] Update base image to Ubuntu 26.04 (resolute) #3272 was never actually exercised in CI until this fix.Test plan
mbake validate) and dry-ran every new/changed target (push_ffmpeg_arch,merge_ffmpeg_arch,release_ffmpeg_latest,release_ffmpeg_ghcr_latest) to confirm they expand to the expecteddockercommands withFFMPEG_VERSION=9.0..ffmpeg/Dockerfilebuilder stage natively onlinux/arm64locally withFFMPEG_VERSION=9.0through to the Go/bsdtar step successfully.ubuntu-24.04/ubuntu-24.04-armnative runners, since this sandbox's network restrictions blocked a complete local from-source FFmpeg/x264/rclone compile.🤖 Generated with Claude Code