Skip to content

Build FFmpeg

Build FFmpeg #9

Workflow file for this run

name: Build FFmpeg
on: workflow_dispatch
jobs:
build-macos:
name: Build macOS
runs-on: macos-12
strategy:
fail-fast: false
matrix:
arch:
- x86_64
- arm64
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: ilammy/setup-nasm@v1
- name: Build
run: osu.Framework.NativeLibs/scripts/ffmpeg/build-macOS.sh
env:
arch: ${{ matrix.arch }}
- name: Upload
uses: actions/upload-artifact@v4
with:
name: macOS-${{ matrix.arch }}
path: macOS-${{ matrix.arch }}
combine-macos:
name: Combine macOS libs
runs-on: macos-12
needs: build-macos
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: macOS-x86_64
path: macOS-x86_64
- uses: actions/download-artifact@v4
with:
name: macOS-arm64
path: macOS-arm64
- name: Combine
run: osu.Framework.NativeLibs/scripts/ffmpeg/combine_dylibs.sh
- name: Upload
uses: actions/upload-artifact@v4
with:
name: macOS-universal
path: macOS-universal
build-win:
name: Build Windows
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
arch:
- x86
- x64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update -y -qq
sudo apt-get install -y nasm mingw-w64
- name: Build
run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh
env:
arch: ${{ matrix.arch }}
- name: Upload
uses: actions/upload-artifact@v4
with:
name: win-${{ matrix.arch }}
path: win-${{ matrix.arch }}
# The win-arm64 build runs in a special MinGW container to cross-compile successfully.
build-win-arm64:
name: Build Windows (arm64)
runs-on: ubuntu-22.04
container:
image: mstorsjo/llvm-mingw:latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh
env:
arch: arm64
- name: Upload
uses: actions/upload-artifact@v4
with:
name: win-arm64
path: win-arm64
build-linux:
name: Build Linux
# Use 20.04 to target glibc 2.31 like the other native libs
runs-on: ubuntu-20.04
strategy:
matrix:
include:
- { arch: x64, container: "ubuntu:20.04" }
- { arch: x86, container: "i386/ubuntu:20.04" }
- { arch: arm64, container: "arm64v8/ubuntu:20.04" }
- { arch: arm, container: "arm32v7/ubuntu:20.04" }
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup QEMU
if: ${{ contains(matrix.arch, 'arm') }}
uses: docker/setup-qemu-action@v2
- name: Build
uses: addnab/docker-run-action@v3
with:
image: ${{ matrix.container }}
options: -v ${{ github.workspace }}:/workspace -w /workspace -e DEBIAN_FRONTEND=noninteractive
run: |
apt-get update -y -qq
apt-get install -y build-essential curl
if [ $(uname -m) == "x86_64" ] || [ $(uname -m) == "i686" ]; then
apt-get install -y nasm
fi
osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh
- name: Upload
uses: actions/upload-artifact@v4
with:
name: linux-${{ matrix.arch }}
path: linux-${{ matrix.arch }}
make-pr:
name: Create pull request
runs-on: ubuntu-22.04
needs:
- combine-macos
- build-win
- build-linux
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: macOS-universal
path: osu.Framework.NativeLibs/runtimes/osx/native
- uses: actions/download-artifact@v4
with:
name: linux-arm64
path: osu.Framework.NativeLibs/runtimes/linux-arm64/native
- uses: actions/download-artifact@v4
with:
name: linux-arm
path: osu.Framework.NativeLibs/runtimes/linux-arm/native
- uses: actions/download-artifact@v4
with:
name: linux-x64
path: osu.Framework.NativeLibs/runtimes/linux-x64/native
- uses: actions/download-artifact@v4
with:
name: linux-x86
path: osu.Framework.NativeLibs/runtimes/linux-x86/native
- uses: actions/download-artifact@v4
with:
name: win-arm64
path: osu.Framework.NativeLibs/runtimes/win-arm64/native
- uses: actions/download-artifact@v4
with:
name: win-x64
path: osu.Framework.NativeLibs/runtimes/win-x64/native
- uses: actions/download-artifact@v4
with:
name: win-x86
path: osu.Framework.NativeLibs/runtimes/win-x86/native
- uses: peter-evans/create-pull-request@v6
with:
commit-message: Update FFmpeg binaries
title: Update FFmpeg binaries
body: This PR has been auto-generated to update the FFmpeg binaries.
branch: update-ffmpeg-binaries
delete-branch: true
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'