Build FFmpeg #7
This file contains 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
name: Build FFmpeg | |
on: | |
schedule: | |
- cron: '7 11 * * 0' | |
workflow_dispatch: | |
watch: | |
types: [started] | |
concurrency: | |
group: ${{ github.workflow }} | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get FFmpeg latest commit | |
id: ffmpeg-info | |
run: | | |
git_sha=$(gh api repos/FFmpeg/FFmpeg/commits/master -q .sha) | |
echo git-sha=$git_sha >> $GITHUB_OUTPUT | |
echo git-sha-short=${git_sha::7} >> $GITHUB_OUTPUT | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Get ffmpeg-windows-build-helpers latest commit | |
id: ffmpeg-helper-info | |
run: | | |
git_sha=$(gh api repos/rdp/ffmpeg-windows-build-helpers/commits/master -q .sha) | |
echo git-sha=$git_sha >> $GITHUB_OUTPUT | |
echo git-sha-short=${git_sha::7} >> $GITHUB_OUTPUT | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Get ffmpeg-autobuild latest build | |
id: ffmpeg-autobuild-info | |
run: | | |
tag_name=$(gh api repos/$GITHUB_REPOSITORY/releases/latest -q .tag_name) | |
echo git-sha=${tag_name:17:7} >> $GITHUB_OUTPUT | |
echo helper-git-sha=${tag_name:25:7} >> $GITHUB_OUTPUT | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Check if there is newer commit | |
run: > | |
[[ "${{ steps.ffmpeg-info.outputs.git-sha-short }}" != "${{ steps.ffmpeg-autobuild-info.outputs.git-sha }}" ]] || | |
[[ "${{ steps.ffmpeg-helper-info.outputs.git-sha-short }}" != "${{ steps.ffmpeg-autobuild-info.outputs.helper-git-sha }}" ]] | |
outputs: | |
git-sha: ${{ steps.ffmpeg-info.outputs.git-sha }} | |
git-sha-short: ${{ steps.ffmpeg-info.outputs.git-sha-short }} | |
helper-git-sha: ${{ steps.ffmpeg-helper-info.outputs.git-sha }} | |
helper-git-sha-short: ${{ steps.ffmpeg-helper-info.outputs.git-sha-short }} | |
build: | |
needs: check | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: [win64, win32] | |
steps: | |
- name: Checkout ffmpeg-windows-build-helpers | |
uses: actions/checkout@v4 | |
with: | |
repository: rdp/ffmpeg-windows-build-helpers | |
ref: ${{ needs.check.outputs.helper-git-sha }} | |
persist-credentials: false | |
- name: Checkout FFmpeg | |
uses: actions/checkout@v4 | |
with: | |
repository: FFmpeg/FFmpeg | |
ref: ${{ needs.check.outputs.git-sha }} | |
persist-credentials: false | |
path: ffmpeg-source | |
- name: Install APT dependencies | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: ragel cvs yasm pax nasm gperf autogen autoconf-archive | |
- name: Install pip dependencies | |
run: sudo -H pip3 -qq install meson ninja | |
- name: Get current FFmpeg git date | |
id: git-date | |
working-directory: ffmpeg-source | |
run: echo git-date=$(git log -1 --format=%ci) >> $GITHUB_OUTPUT | |
- name: Get current date & time before build | |
id: date-time-before | |
run: echo date-time=$(date +'%Y-%m-%d %H:%M') >> $GITHUB_OUTPUT | |
- name: Compile FFmpeg using ffmpeg-windows-build-helpers | |
run: ./cross_compile_ffmpeg.sh --ffmpeg-source-dir=$GITHUB_WORKSPACE/ffmpeg-source --gcc-cpu-count=$(nproc) --disable-nonfree=n --sandbox-ok=y --compiler-flavors=${{ matrix.os }} | |
- name: Get current date & time after build | |
id: date-time-after | |
run: | | |
echo date-time=$(date +'%Y-%m-%d %H:%M') >> $GITHUB_OUTPUT | |
echo date-time-tag=$(date +'%Y-%m-%d-%H-%M') >> $GITHUB_OUTPUT | |
- name: Upload FFmpeg binaries | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ffmpeg-${{ matrix.os }} | |
path: | | |
ffmpeg-source/ffmpeg.exe | |
ffmpeg-source/ffprobe.exe | |
ffmpeg-source/ffplay.exe | |
if-no-files-found: error | |
retention-days: 1 | |
outputs: | |
date-time-before: ${{ steps.date-time-before.outputs.date-time }} | |
date-time-after: ${{ steps.date-time-after.outputs.date-time }} | |
date-time-after-tag: ${{ steps.date-time-after.outputs.date-time-tag }} | |
git-date: ${{ steps.git-date.outputs.git-date }} | |
archive: | |
needs: [check, build] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: [win64, win32] | |
steps: | |
- name: Download FFmpeg binaries | |
uses: actions/download-artifact@v4 | |
with: | |
name: ffmpeg-${{ matrix.os }} | |
- name: Create LICENSE | |
run: | | |
echo "This version of ffmpeg has nonfree parts compiled in." >> LICENSE | |
echo "Therefore it is not legally redistributable." >> LICENSE | |
- name: 7-Zip FFmpeg binaries | |
run: 7z a -mx9 ffmpeg-${{ needs.check.outputs.git-sha-short }}-${{ needs.check.outputs.helper-git-sha-short }}-${{ matrix.os }}-nonfree.7z ffmpeg.exe ffprobe.exe ffplay.exe LICENSE | |
- name: Upload FFmpeg archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ffmpeg-archive-${{ matrix.os }} | |
path: ffmpeg-${{ needs.check.outputs.git-sha-short }}-${{ needs.check.outputs.helper-git-sha-short }}-${{ matrix.os }}-nonfree.7z | |
retention-days: 1 | |
compression-level: 0 | |
release: | |
needs: [check, build, archive] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download FFmpeg archives | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: ffmpeg-archive-* | |
merge-multiple: true | |
- name: Release FFmpeg archives | |
run: | | |
gh release create "${{ needs.build.outputs.date-time-after-tag }}-${{ needs.check.outputs.git-sha-short }}-${{ needs.check.outputs.helper-git-sha-short }}" \ | |
"ffmpeg-${{ needs.check.outputs.git-sha-short }}-${{ needs.check.outputs.helper-git-sha-short }}-win64-nonfree.7z" \ | |
"ffmpeg-${{ needs.check.outputs.git-sha-short }}-${{ needs.check.outputs.helper-git-sha-short }}-win32-nonfree.7z" \ | |
-n "FFmpeg nonfree git-${{ needs.check.outputs.git-sha }} in ${{ needs.build.outputs.git-date }} built on ${{ needs.build.outputs.date-time-after }} started at ${{ needs.build.outputs.date-time-before }} | |
Using ffmpeg-windows-build-helpers git-${{ needs.check.outputs.helper-git-sha }}" \ | |
-t "${{ needs.build.outputs.date-time-after }} ${{ needs.check.outputs.git-sha-short }}" | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
GH_REPO: ${{ github.repository }} |