From 66d841f0fdf8c245fde44d8a9fbda13b7e423cf8 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 10:40:29 +0100 Subject: [PATCH 1/9] introduce os specific instructions to install FFmpeg in GitHub workflow --- .github/workflows/unit-test.yml | 38 ++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index dcfa033e..562071bd 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -23,11 +23,39 @@ jobs: - name: Checkout code changes uses: actions/checkout@v6 - - name: Setup FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v3 - with: - # bump: ffmpeg-ci /ffmpeg-version: '([\d.]+)'/ docker:mwader/static-ffmpeg|~7.0 - ffmpeg-version: '7.0.2' + - name: Install FFmpeg + shell: bash + run: | + set -euo pipefail + # bump: ffmpeg-ci /ffmpeg-version: '([\d.]+)'/ docker:mwader/static-ffmpeg|~8.0 + FF_VERSION="8.0.1" + INSTALL_DIR="$HOME/ffmpeg" + mkdir -p "$INSTALL_DIR" + + if [[ "${{ runner.os }}" == "Linux" ]]; then + docker pull mwader/static-ffmpeg:$FF_VERSION + CID=$(docker create mwader/static-ffmpeg:$FF_VERSION) + docker cp "$CID:/ffmpeg" "$INSTALL_DIR/ffmpeg" + docker cp "$CID:/ffprobe" "$INSTALL_DIR/ffprobe" + docker rm "$CID" + chmod +x "$INSTALL_DIR/"* + + elif [[ "${{ runner.os }}" == "macOS" ]]; then + curl -L https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip -o ffmpeg.zip + unzip ffmpeg.zip + mv ffmpeg "$INSTALL_DIR/ffmpeg" + curl -L https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip -o ffprobe.zip + unzip ffprobe.zip + mv ffprobe "$INSTALL_DIR/ffprobe" + chmod +x "$INSTALL_DIR/"* + + elif [[ "${{ runner.os }}" == "Windows" ]]; then + curl -L https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$FF_VERSION-essentials_build.zip -o ffmpeg.zip + unzip ffmpeg.zip + mv ffmpeg-*/bin/* "$INSTALL_DIR/" + fi + + echo "$INSTALL_DIR" >> "$GITHUB_PATH" - name: Setup Java uses: actions/setup-java@v5 From d45203e8a847bb9282d8e607b4ec41bffd1c8da1 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 11:10:27 +0100 Subject: [PATCH 2/9] add checks on installed FFmpeg and FFprobe versions --- .github/workflows/unit-test.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 562071bd..9453f37e 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -23,11 +23,11 @@ jobs: - name: Checkout code changes uses: actions/checkout@v6 - - name: Install FFmpeg + - name: Install FFmpeg and FFprobe shell: bash run: | set -euo pipefail - # bump: ffmpeg-ci /ffmpeg-version: '([\d.]+)'/ docker:mwader/static-ffmpeg|~8.0 + # bump: ffmpeg-ci /ffmpeg-version: '([\d.]+)'/ docker:mwader/static-ffmpeg FF_VERSION="8.0.1" INSTALL_DIR="$HOME/ffmpeg" mkdir -p "$INSTALL_DIR" @@ -56,6 +56,13 @@ jobs: fi echo "$INSTALL_DIR" >> "$GITHUB_PATH" + echo "Installed FFmpeg and FFprobe $FF_VERSION" + + - name: Verify FFmpeg and FFprobe installations + shell: bash + run: | + ffmpeg -version + ffprobe -version - name: Setup Java uses: actions/setup-java@v5 From 912a470b308f1893380e3290389bd62a40df92fe Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 11:35:20 +0100 Subject: [PATCH 3/9] extract FFmpeg setup to a standalone action --- .github/actions/setup-ffmpeg/action.yml | 50 +++++++++++++++++++++++++ .github/workflows/unit-test.yml | 43 ++------------------- 2 files changed, 54 insertions(+), 39 deletions(-) create mode 100644 .github/actions/setup-ffmpeg/action.yml diff --git a/.github/actions/setup-ffmpeg/action.yml b/.github/actions/setup-ffmpeg/action.yml new file mode 100644 index 00000000..0db0bcdd --- /dev/null +++ b/.github/actions/setup-ffmpeg/action.yml @@ -0,0 +1,50 @@ +name: Setup FFmpeg and FFprobe +description: Install FFmpeg and FFprobe across Linux, MacOS (Intel), and Windows +inputs: + ffmpeg-version: + description: FFmpeg version to install + required: true +runs: + using: composite + steps: + - name: Install FFmpeg and FFprobe + shell: bash + run: | + set -euo pipefail + + FF_VERSION="${{ inputs.ffmpeg-version }}" + INSTALL_DIR="$HOME/ffmpeg" + mkdir -p "$INSTALL_DIR" + + if [[ "${{ runner.os }}" == "Linux" ]]; then + docker pull mwader/static-ffmpeg:$FF_VERSION + CID=$(docker create mwader/static-ffmpeg:$FF_VERSION) + docker cp "$CID:/ffmpeg" "$INSTALL_DIR/ffmpeg" + docker cp "$CID:/ffprobe" "$INSTALL_DIR/ffprobe" + docker rm "$CID" + chmod +x "$INSTALL_DIR/"* + + elif [[ "${{ runner.os }}" == "macOS" ]]; then + curl -L "https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip" -o ffmpeg.zip + unzip -q ffmpeg.zip + mv ffmpeg "$INSTALL_DIR/ffmpeg" + + curl -L "https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip" -o ffprobe.zip + unzip -q ffprobe.zip + mv ffprobe "$INSTALL_DIR/ffprobe" + + chmod +x "$INSTALL_DIR/"* + + elif [[ "${{ runner.os }}" == "Windows" ]]; then + curl -L "https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$FF_VERSION-essentials_build.zip" -o ffmpeg.zip + unzip -q ffmpeg.zip + find . -type f \( -name ffmpeg.exe -o -name ffprobe.exe \) -exec mv {} "$INSTALL_DIR/" \; + fi + + echo "$INSTALL_DIR" >> "$GITHUB_PATH" + + - name: Verify FFmpeg and FFprobe installations + shell: bash + run: | + ffmpeg -version + ffprobe -version diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 9453f37e..b86c010e 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -23,46 +23,11 @@ jobs: - name: Checkout code changes uses: actions/checkout@v6 - - name: Install FFmpeg and FFprobe - shell: bash - run: | - set -euo pipefail + - name: Setup FFmpeg and FFprobe + uses: ./.github/actions/setup-ffmpeg + with: # bump: ffmpeg-ci /ffmpeg-version: '([\d.]+)'/ docker:mwader/static-ffmpeg - FF_VERSION="8.0.1" - INSTALL_DIR="$HOME/ffmpeg" - mkdir -p "$INSTALL_DIR" - - if [[ "${{ runner.os }}" == "Linux" ]]; then - docker pull mwader/static-ffmpeg:$FF_VERSION - CID=$(docker create mwader/static-ffmpeg:$FF_VERSION) - docker cp "$CID:/ffmpeg" "$INSTALL_DIR/ffmpeg" - docker cp "$CID:/ffprobe" "$INSTALL_DIR/ffprobe" - docker rm "$CID" - chmod +x "$INSTALL_DIR/"* - - elif [[ "${{ runner.os }}" == "macOS" ]]; then - curl -L https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip -o ffmpeg.zip - unzip ffmpeg.zip - mv ffmpeg "$INSTALL_DIR/ffmpeg" - curl -L https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip -o ffprobe.zip - unzip ffprobe.zip - mv ffprobe "$INSTALL_DIR/ffprobe" - chmod +x "$INSTALL_DIR/"* - - elif [[ "${{ runner.os }}" == "Windows" ]]; then - curl -L https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$FF_VERSION-essentials_build.zip -o ffmpeg.zip - unzip ffmpeg.zip - mv ffmpeg-*/bin/* "$INSTALL_DIR/" - fi - - echo "$INSTALL_DIR" >> "$GITHUB_PATH" - echo "Installed FFmpeg and FFprobe $FF_VERSION" - - - name: Verify FFmpeg and FFprobe installations - shell: bash - run: | - ffmpeg -version - ffprobe -version + ffmpeg-version: 8.0.1 - name: Setup Java uses: actions/setup-java@v5 From e328e7d4ebf6ff5b26ea7b6dae50f775d3253076 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 11:36:10 +0100 Subject: [PATCH 4/9] update FFmpeg version used in dockerfile --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2d5c1240..68df3761 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,8 +2,8 @@ FROM eclipse-temurin:25-alpine AS builder WORKDIR /app -# bump: ffmpeg /static-ffmpeg:([\d.]+)/ docker:mwader/static-ffmpeg|~7.0 -COPY --from=mwader/static-ffmpeg:7.0.2 /ff* /usr/bin/ +# bump: ffmpeg /static-ffmpeg:([\d.]+)/ docker:mwader/static-ffmpeg +COPY --from=mwader/static-ffmpeg:8.0.1 /ff* /usr/bin/ COPY . . RUN --mount=type=cache,target=/root/.gradle ./gradlew check installDist --no-daemon From 91e33a9344c71ac12a3e894b1a894e70036fb927 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 11:41:01 +0100 Subject: [PATCH 5/9] update license year --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index f3095abe..ebd3a8fb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Cella Roberto +Copyright (c) 2022-2026 Cella Roberto Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 5fda36b46028a391550c324470922f9827b4b697 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 11:46:32 +0100 Subject: [PATCH 6/9] minor formatting fixes --- .github/actions/setup-ffmpeg/action.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/actions/setup-ffmpeg/action.yml b/.github/actions/setup-ffmpeg/action.yml index 0db0bcdd..34ce0cf1 100644 --- a/.github/actions/setup-ffmpeg/action.yml +++ b/.github/actions/setup-ffmpeg/action.yml @@ -1,5 +1,5 @@ name: Setup FFmpeg and FFprobe -description: Install FFmpeg and FFprobe across Linux, MacOS (Intel), and Windows +description: Install FFmpeg and FFprobe across Linux, macOS, and Windows inputs: ffmpeg-version: description: FFmpeg version to install @@ -28,11 +28,9 @@ runs: curl -L "https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip" -o ffmpeg.zip unzip -q ffmpeg.zip mv ffmpeg "$INSTALL_DIR/ffmpeg" - curl -L "https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip" -o ffprobe.zip unzip -q ffprobe.zip mv ffprobe "$INSTALL_DIR/ffprobe" - chmod +x "$INSTALL_DIR/"* elif [[ "${{ runner.os }}" == "Windows" ]]; then From 39dbf057ea850253a91851ba0832d562e57d3e9e Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 13:36:54 +0100 Subject: [PATCH 7/9] switch mac runner to arm architecture --- .github/actions/setup-ffmpeg/action.yml | 9 +++++---- .github/workflows/unit-test.yml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/actions/setup-ffmpeg/action.yml b/.github/actions/setup-ffmpeg/action.yml index 34ce0cf1..17121ef9 100644 --- a/.github/actions/setup-ffmpeg/action.yml +++ b/.github/actions/setup-ffmpeg/action.yml @@ -16,6 +16,8 @@ runs: INSTALL_DIR="$HOME/ffmpeg" mkdir -p "$INSTALL_DIR" + echo "Installing FFmpeg and FFprobe $FF_VERSION on ${{ runner.os }}" + if [[ "${{ runner.os }}" == "Linux" ]]; then docker pull mwader/static-ffmpeg:$FF_VERSION CID=$(docker create mwader/static-ffmpeg:$FF_VERSION) @@ -25,12 +27,11 @@ runs: chmod +x "$INSTALL_DIR/"* elif [[ "${{ runner.os }}" == "macOS" ]]; then - curl -L "https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip" -o ffmpeg.zip + FF_VERSION=$(echo "$FF_VERSION" | awk -F. '{print $1 $2}') + curl -L "https://www.osxexperts.net/ffmpeg${FF_VERSION}arm.zip" -o ffmpeg.zip unzip -q ffmpeg.zip mv ffmpeg "$INSTALL_DIR/ffmpeg" - curl -L "https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip" -o ffprobe.zip - unzip -q ffprobe.zip - mv ffprobe "$INSTALL_DIR/ffprobe" + cp "$INSTALL_DIR/ffmpeg" "$INSTALL_DIR/ffprobe" chmod +x "$INSTALL_DIR/"* elif [[ "${{ runner.os }}" == "Windows" ]]; then diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index b86c010e..a59b91ac 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest, macos-15-intel ] # pin macos to latest x64 image + os: [ ubuntu-latest, windows-latest, macos-latest ] steps: - name: Checkout code changes uses: actions/checkout@v6 From 69b480546453d1514e338ec22af1928b53a5887c Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 13:43:32 +0100 Subject: [PATCH 8/9] fix ffprobe installation on mac arm --- .github/actions/setup-ffmpeg/action.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/actions/setup-ffmpeg/action.yml b/.github/actions/setup-ffmpeg/action.yml index 17121ef9..c8180d15 100644 --- a/.github/actions/setup-ffmpeg/action.yml +++ b/.github/actions/setup-ffmpeg/action.yml @@ -31,7 +31,9 @@ runs: curl -L "https://www.osxexperts.net/ffmpeg${FF_VERSION}arm.zip" -o ffmpeg.zip unzip -q ffmpeg.zip mv ffmpeg "$INSTALL_DIR/ffmpeg" - cp "$INSTALL_DIR/ffmpeg" "$INSTALL_DIR/ffprobe" + curl -L "https://www.osxexperts.net/ffprobe${FF_VERSION}arm.zip" -o ffprobe.zip + unzip -q ffprobe.zip + mv ffprobe "$INSTALL_DIR/ffprobe" chmod +x "$INSTALL_DIR/"* elif [[ "${{ runner.os }}" == "Windows" ]]; then From 413f9b5eb7adc2a8c9419c34af2de18dc2d8b6e4 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Mon, 22 Dec 2025 15:21:20 +0100 Subject: [PATCH 9/9] add cleanup instructions for mac and windows --- .github/actions/setup-ffmpeg/action.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/actions/setup-ffmpeg/action.yml b/.github/actions/setup-ffmpeg/action.yml index c8180d15..b42b2cdb 100644 --- a/.github/actions/setup-ffmpeg/action.yml +++ b/.github/actions/setup-ffmpeg/action.yml @@ -35,11 +35,13 @@ runs: unzip -q ffprobe.zip mv ffprobe "$INSTALL_DIR/ffprobe" chmod +x "$INSTALL_DIR/"* + rm -f ffmpeg.zip ffprobe.zip elif [[ "${{ runner.os }}" == "Windows" ]]; then curl -L "https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$FF_VERSION-essentials_build.zip" -o ffmpeg.zip unzip -q ffmpeg.zip find . -type f \( -name ffmpeg.exe -o -name ffprobe.exe \) -exec mv {} "$INSTALL_DIR/" \; + rm -f ffmpeg.zip fi echo "$INSTALL_DIR" >> "$GITHUB_PATH"