Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 24 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,30 @@ on:
jobs:
ci:
strategy:
fail-fast: false
matrix:
include:
# default static build, both arches
- runs_on: ubicloud-standard-30
variant: default
target: ""
build_args: |
ENABLE_FDKAAC=1
- runs_on: ubicloud-standard-30-arm
variant: default
target: ""
build_args: |
ENABLE_FDKAAC=1
# CUDA variant (NVENC/NVDEC/CUVID), amd64 only for now.
# No GPU on the runner β€” the build only verifies that the binary
# links and that nvenc/cuvid/cuda show up in -encoders/-hwaccels.
- runs_on: ubicloud-standard-30
variant: cuda
target: final-cuda
build_args: |
ENABLE_FDKAAC=1
ENABLE_CUDA=1
name: ci (${{ matrix.variant }} / ${{ matrix.runs_on }})
runs-on: ${{ matrix.runs_on }}
steps:
- uses: actions/checkout@v3
Expand All @@ -21,7 +41,7 @@ jobs:
with:
context: .
push: false
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
ENABLE_FDKAAC=1
cache-from: type=gha,scope=${{ matrix.variant }}-${{ matrix.runs_on }}
cache-to: type=gha,mode=max,scope=${{ matrix.variant }}-${{ matrix.runs_on }}
target: ${{ matrix.target }}
build-args: ${{ matrix.build_args }}
130 changes: 107 additions & 23 deletions .github/workflows/multiarch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,82 @@ env:
REGISTRY_IMAGE: mwader/static-ffmpeg

jobs:
build:
name: Build image
strategy:
matrix:
include:
- runs_on: ubicloud-standard-8-arm
tag: arm64
- runs_on: ubuntu-latest
tag: amd64
# arm64 default β€” independent, runs in parallel with amd64.
build-default-arm64:
name: Build image (default / arm64)
runs-on: ubicloud-standard-8-arm
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker build
uses: docker/build-push-action@v6
with:
context: .
tags: image:default-arm64
load: true
cache-from: type=gha,scope=builder-arm64
cache-to: type=gha,scope=builder-arm64,mode=max
- name: Docker save
run: docker image save --output image-default-arm64.tar image:default-arm64
- uses: actions/upload-artifact@v4
with:
name: image-default-arm64
path: image-default-arm64.tar
retention-days: 1

# amd64 default β€” populates the shared builder-amd64 cache scope.
build-default-amd64:
name: Build image (default / amd64)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker build
uses: docker/build-push-action@v6
with:
context: .
tags: image:default-amd64
load: true
cache-from: type=gha,scope=builder-amd64
cache-to: type=gha,scope=builder-amd64,mode=max
- name: Docker save
run: docker image save --output image-default-amd64.tar image:default-amd64
- uses: actions/upload-artifact@v4
with:
name: image-default-amd64
path: image-default-amd64.tar
retention-days: 1

runs-on: ${{ matrix.runs_on }}
# CUDA variant (NVENC/NVDEC/CUVID), amd64 only.
# Runs *after* default-amd64 so it reuses the populated builder-amd64
# cache scope: every builder layer up to the final stage is a cache hit,
# and only the final-cuda stage has to materialize.
build-cuda-amd64:
name: Build image (cuda / amd64)
runs-on: ubuntu-latest
needs: build-default-amd64
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker build
run: docker build --tag image:${{ matrix.tag }} .
uses: docker/build-push-action@v6
with:
context: .
target: final-cuda
build-args: ENABLE_CUDA=1
tags: image:cuda-amd64
load: true
cache-from: type=gha,scope=builder-amd64
cache-to: type=gha,scope=builder-amd64,mode=max
- name: Docker save
run: docker image save --output image-${{ matrix.tag }}.tar image:${{ matrix.tag }}
- name: Upload Docker image-${{ matrix.tag }}
uses: actions/upload-artifact@v4
run: docker image save --output image-cuda-amd64.tar image:cuda-amd64
- uses: actions/upload-artifact@v4
with:
name: image-${{ matrix.tag }}
path: image-${{ matrix.tag }}.tar
name: image-cuda-amd64
path: image-cuda-amd64.tar
retention-days: 1

tag:
Expand All @@ -53,22 +107,23 @@ jobs:
' >> "$GITHUB_OUTPUT"

merge:
name: Merge and push images
name: Merge and push default images
runs-on: ubuntu-latest
needs:
- build
- build-default-arm64
- build-default-amd64
- tag
steps:
- name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp
pattern: image-*
pattern: image-default-*
merge-multiple: true
- name: Load Docker images
run: |
docker image load --input /tmp/image-arm64.tar
docker image load --input /tmp/image-amd64.tar
docker image load --input /tmp/image-default-arm64.tar
docker image load --input /tmp/image-default-amd64.tar
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
Expand All @@ -81,8 +136,8 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create manifest list and push
run: |
docker tag image:arm64 ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-arm64
docker tag image:amd64 ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-amd64
docker tag image:default-arm64 ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-arm64
docker tag image:default-amd64 ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-amd64
docker push ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-arm64
docker push ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-amd64
docker manifest create \
Expand All @@ -91,3 +146,32 @@ jobs:
--amend ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-amd64
docker manifest inspect ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}
docker manifest push ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}

merge-cuda:
name: Push CUDA image (amd64 only)
runs-on: ubuntu-latest
needs:
- build-cuda-amd64
- tag
steps:
- name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp
pattern: image-cuda-*
merge-multiple: true
- name: Load Docker image
run: docker image load --input /tmp/image-cuda-amd64.tar
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Tag and push CUDA image
run: |
# CUDA variant is amd64-only for now; published as a single-arch tag.
docker tag image:cuda-amd64 ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-cuda-amd64
docker tag image:cuda-amd64 ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-cuda
docker push ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-cuda-amd64
docker push ${{ env.REGISTRY_IMAGE }}:${{ needs.tag.outputs.TAG }}-cuda

Loading
Loading