Compare commits

...

96 Commits

Author SHA1 Message Date
LinuxServer-CI
f35f0c9720
Bot Updating Package Versions 2026-02-12 23:30:59 +00:00
LinuxServer-CI
d424516bec
Bot Updating Templated Files 2026-02-12 22:29:47 +00:00
LinuxServer-CI
7100fa33c6
Bot Updating Package Versions 2026-02-05 23:24:07 +00:00
LinuxServer-CI
7b414e7bd9
Bot Updating Package Versions 2026-01-22 23:22:34 +00:00
LinuxServer-CI
118ea9dee1
Bot Updating Package Versions 2026-01-15 23:20:33 +00:00
LinuxServer-CI
3d3a0f3fdf
Bot Updating Package Versions 2026-01-08 23:19:12 +00:00
LinuxServer-CI
37bfd69cfb
Bot Updating Package Versions 2026-01-07 00:26:03 +00:00
aptalca
ab5fede4d2
Merge pull request #120 from linuxserver/2026-01-06
Remove mpp due to upstream dmca, bump libs
2026-01-06 18:19:07 -05:00
aptalca
c52f067a11
remove mpp from ffmpeg args 2026-01-06 11:42:11 -05:00
aptalca
839170000d
Remove mpp from aarch64 build due to upstream DMCA removal. Bump harfbuzz, libdav1d, libdrm, libpng, libva, libvpl, mesa, opus, shaderc and vulkan-sdk. 2026-01-06 11:09:20 -05:00
LinuxServer-CI
79cbc25e01
Bot Updating Package Versions 2025-12-25 23:18:19 +00:00
LinuxServer-CI
77ad03e76c
Bot Updating Package Versions 2025-12-18 23:17:52 +00:00
LinuxServer-CI
237805303e
Bot Updating Package Versions 2025-12-04 23:15:47 +00:00
aptalca
c01a2f7787
Merge pull request #119 from linuxserver/8.0.1
Bump ffmpeg to 8.0.1
2025-12-01 10:26:33 -05:00
aptalca
5803a9b64f
Merge pull request #118 from mashijp/bump/8.0.1
Bump ffmpeg to 8.0.1
2025-12-01 08:34:44 -05:00
mashijp
c6a0f2b929 template changes 2025-12-01 21:12:33 +09:00
mashijp
91b626f2c2 Bump ffmpeg to 8.0.1 2025-12-01 21:09:49 +09:00
aptalca
80b1900f78
Merge pull request #117 from linuxserver/2025-11-19
Bump various libs and deps
2025-11-20 07:03:34 -05:00
aptalca
259227e5dd
mesa dropped vdpau 2025-11-19 15:37:27 -05:00
aptalca
eee4a1436a
bump various libs and deps 2025-11-19 14:27:18 -05:00
LinuxServer-CI
33269ab474
Bot Updating Package Versions 2025-11-06 23:15:55 +00:00
LinuxServer-CI
306cf13333
Bot Updating Package Versions 2025-10-30 23:16:49 +00:00
LinuxServer-CI
2f3d26d118
Bot Updating Templated Files 2025-10-23 22:15:56 +00:00
LinuxServer-CI
1272de2b43
Bot Updating Package Versions 2025-10-16 23:29:10 +00:00
LinuxServer-CI
8492517284
Bot Updating Package Versions 2025-10-02 23:20:00 +00:00
LinuxServer-CI
289dae9395
Bot Updating Package Versions 2025-09-25 23:13:36 +00:00
LinuxServer-CI
15fadb5862
Bot Updating Package Versions 2025-09-18 23:13:10 +00:00
LinuxServer-CI
e7b350bddc
Bot Updating Package Versions 2025-09-11 23:14:41 +00:00
LinuxServer-CI
f197ab858d
Bot Updating Package Versions 2025-08-24 12:59:58 +00:00
aptalca
4759516f0f
Merge pull request #114 from linuxserver/8.0
Ffmpeg 8.0
2025-08-24 07:58:58 -04:00
aptalca
ae0f517118
remove obsolete patch 2025-08-23 21:51:54 -04:00
aptalca
8f5d687dcb
install newer bindgen 2025-08-23 21:19:10 -04:00
aptalca
6aae044a04
Bump ffmpeg to 8.0. Bump harfbuzz, Intel drivers and libs, libdovi, libdrm, libpng, mesa, ogg, rav1e, shaderc, svt-av1, vulkan-sdk, webp and zimg. 2025-08-23 20:56:47 -04:00
LinuxServer-CI
7dfa233d6d
Bot Updating Package Versions 2025-08-07 12:26:35 +00:00
LinuxServer-CI
7388bdf50b
Bot Updating Templated Files 2025-08-07 11:25:52 +00:00
aptalca
188c92bdaf
Merge pull request #113 from tc-mccarthy/svt-av1-3-1-0
Bumps SVT-AV1 to 3.1.0
2025-08-07 07:24:28 -04:00
TC McCarthy
28b3269bc9 Bumps SVT-AV1 to 3.1.0 2025-08-06 22:27:37 -04:00
LinuxServer-CI
b846a21cc9
Bot Updating Package Versions 2025-07-31 23:14:48 +00:00
LinuxServer-CI
eb0817433d
Bot Updating Package Versions 2025-07-25 00:25:31 +00:00
LinuxServer-CI
5f93798531
Bot Updating Package Versions 2025-07-17 23:15:31 +00:00
LinuxServer-CI
a72a94cb41
Bot Updating Package Versions 2025-07-10 23:14:59 +00:00
LinuxServer-CI
ad4b9919af
Bot Updating Package Versions 2025-07-03 23:16:54 +00:00
LinuxServer-CI
57996e79f4
Bot Updating Templated Files 2025-07-03 22:18:16 +00:00
LinuxServer-CI
772a3b66a0
Bot Updating Templated Files 2025-07-03 22:16:47 +00:00
LinuxServer-CI
1ae2b33b3a
Bot Updating Package Versions 2025-06-26 23:14:17 +00:00
LinuxServer-CI
84b0fc67c6
Bot Updating Package Versions 2025-06-12 23:18:51 +00:00
LinuxServer-CI
e4e39e0ed6
Bot Updating Templated Files 2025-06-12 22:16:41 +00:00
aptalca
bfc8160fb6
Merge pull request #112 from linuxserver/bump-25-06-07
Bump harfbuzz, libass, libdovi, libplacebo, libpng, mesa, rav1e, shaderc, libvpx and vulkan-sdk
2025-06-08 09:43:31 -04:00
aptalca
75cbcfc925
fix docker warning about case 2025-06-07 22:12:56 -04:00
aptalca
fd5a5b386d
Bump harfbuzz, libass, libdovi, libplacebo, libpng, mesa, rav1e, shaderc, libvpx and vulkan-sdk 2025-06-07 22:11:06 -04:00
LinuxServer-CI
ac3554a86c
Bot Updating Package Versions 2025-06-05 12:41:59 +00:00
aptalca
cb233c8241
Merge pull request #111 from linuxserver/rkmpp
add libdrm and rkmpp to arm64 image
2025-06-05 07:33:59 -04:00
aptalca
52ab84a072
add libdrm and rkmpp to arm64 image 2025-06-04 23:53:26 -04:00
LinuxServer-CI
70df6eb677
Bot Updating Package Versions 2025-05-29 22:56:52 +00:00
LinuxServer-CI
884b9c5b00
Bot Updating Package Versions 2025-05-01 23:12:26 +00:00
aptalca
970a7d035c
Merge pull request #107 from linuxserver/25-04-21
Bump aom, Intel drivers and libs, harfbuzz, mesa, svt-av1, libtheora, libvpx, vulkan-sdk and vvenc
2025-04-22 13:34:00 -04:00
aptalca
50dc5d8696
bump and fix libtheora 2025-04-21 11:58:19 -04:00
aptalca
ccaf335ca8
Bump aom, Intel drivers and libs, harfbuzz, mesa, svt-av1, libvpx, vulkan-sdk and vvenc 2025-04-21 11:16:06 -04:00
LinuxServer-CI
07756e90ff
Bot Updating Package Versions 2025-04-18 00:32:04 +00:00
LinuxServer-CI
b81ddb65b8
Bot Updating Package Versions 2025-04-10 23:08:42 +00:00
LinuxServer-CI
c38dac6d51
Bot Updating Package Versions 2025-04-06 00:38:35 +00:00
aptalca
158a5b8f57
Merge pull request #106 from linuxserver/cargo-c-fix
fix cargo-c dep issue
2025-04-05 19:42:35 -04:00
aptalca
8b98868c40
pin cmake as 4.0.0 breaks a lot of things 2025-04-04 12:01:25 -04:00
aptalca
2b5a969177
fix cmake 4.0.0 failing with no minimum defined 2025-04-04 11:24:00 -04:00
aptalca
1f4153c29a
fix cargo-c dep issue 2025-04-04 10:03:29 -04:00
LinuxServer-CI
161def8c4e
Bot Updating Package Versions 2025-03-27 23:08:39 +00:00
LinuxServer-CI
3f0a626bce
Bot Updating Package Versions 2025-03-21 00:39:46 +00:00
aptalca
daf525ef35
Merge pull request #105 from linuxserver/7.1.1
Bump ffmpeg to 7.1.1, bump various other drivers and libs
2025-03-11 14:43:53 -04:00
aptalca
23b4cea876
patch ffmpeg for svt-av1 3.0.0 2025-03-10 19:20:27 -04:00
aptalca
98a8c9aedd
fix rav1e build, remove no longer needed gcc12 for vvenc 2025-03-10 17:44:04 -04:00
aptalca
402bd7b486
fix aarch64 harfbuzz build 2025-03-10 16:31:13 -04:00
aptalca
87f4661467
add missing dep 2025-03-07 18:22:23 -05:00
aptalca
3819b379f6
fontconfig only publishes xz tarballs now 2025-03-07 18:00:59 -05:00
aptalca
c3ce08ae34
use gh mirror for ffnvcodec 2025-03-07 17:50:08 -05:00
aptalca
314ce6a11f
bump ffmpeg to 7.1.1, bump various other drivers and libs 2025-03-07 17:31:19 -05:00
LinuxServer-CI
224fb37cb9
Bot Updating Package Versions 2025-03-07 00:33:32 +00:00
LinuxServer-CI
b6478ffcc4
Bot Updating Package Versions 2025-02-27 23:09:48 +00:00
LinuxServer-CI
363e904e38
Bot Updating Package Versions 2025-02-21 00:40:28 +00:00
LinuxServer-CI
17de168698
Bot Updating Package Versions 2025-02-13 14:49:06 +00:00
LinuxServer-CI
311f8b6e90
Bot Updating Templated Files 2025-02-13 12:52:39 +00:00
quietsy
aedfa9f62c
Merge pull request #103 from linuxserver/fix-logo
Fix logo
2025-02-13 14:51:37 +02:00
quietsy
6198408c9a Fix logo 2025-02-13 14:18:41 +02:00
LinuxServer-CI
b93ae37877
Bot Updating Package Versions 2025-02-07 00:18:24 +00:00
LinuxServer-CI
ff419663fc
Bot Updating Package Versions 2025-01-31 01:22:20 +00:00
LinuxServer-CI
89a77204b5
Bot Updating Templated Files 2025-01-30 22:15:48 +00:00
LinuxServer-CI
8751eb564a
Bot Updating Templated Files 2025-01-30 22:15:05 +00:00
LinuxServer-CI
134a162732
Bot Updating Package Versions 2025-01-22 22:51:20 +00:00
LinuxServer-CI
bfa40dc2eb
Bot Updating Templated Files 2025-01-22 20:11:20 +00:00
quietsy
ca191ead02
Merge pull request #102 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-22 22:09:53 +02:00
quietsy
60b97dd62e Add categories to readme-vars.yml 2025-01-22 14:21:39 +02:00
Adam
498763439e
Merge pull request #101 from linuxserver/readme-description
Add project description
2025-01-18 14:35:37 +00:00
thespad
f10c7eadc7
Add project description 2025-01-17 23:12:42 +00:00
LinuxServer-CI
2ca7ccc425
Bot Updating Package Versions 2024-12-20 00:20:54 +00:00
LinuxServer-CI
abb8c19e8a
Bot Updating Templated Files 2024-12-19 22:16:07 +00:00
LinuxServer-CI
e79ff22f4e
Bot Updating Templated Files 2024-12-19 22:15:00 +00:00
LinuxServer-CI
4761c8f632
Bot Updating Package Versions 2024-12-12 22:53:05 +00:00
20 changed files with 418 additions and 260 deletions

0
.editorconfig Executable file → Normal file
View File

2
.github/CONTRIBUTING.md vendored Executable file → Normal file
View File

@ -6,7 +6,7 @@
* Read, and fill the Pull Request template * Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR * If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message * If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn) * If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
## Common files ## Common files

2
.github/ISSUE_TEMPLATE/config.yml vendored Executable file → Normal file
View File

@ -1,7 +1,7 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Discord chat support - name: Discord chat support
url: https://discord.gg/YWrKVTn url: https://linuxserver.io/discord
about: Realtime support / chat with the community and the team. about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum - name: Discourse discussion forum

0
.github/ISSUE_TEMPLATE/issue.bug.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/issue.feature.yml vendored Executable file → Normal file
View File

0
.github/PULL_REQUEST_TEMPLATE.md vendored Executable file → Normal file
View File

3
.github/workflows/call_issue_pr_tracker.yml vendored Executable file → Normal file
View File

@ -8,6 +8,9 @@ on:
pull_request_review: pull_request_review:
types: [submitted,edited,dismissed] types: [submitted,edited,dismissed]
permissions:
contents: read
jobs: jobs:
manage-project: manage-project:
permissions: permissions:

3
.github/workflows/call_issues_cron.yml vendored Executable file → Normal file
View File

@ -4,6 +4,9 @@ on:
- cron: '15 0 * * *' - cron: '15 0 * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
stale: stale:
permissions: permissions:

60
.github/workflows/external_trigger.yml vendored Executable file → Normal file
View File

@ -3,6 +3,9 @@ name: External Trigger Main
on: on:
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-master: external-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -15,7 +18,10 @@ jobs:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }} SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: | run: |
printf "# External trigger for docker-ffmpeg\n\n" >> $GITHUB_STEP_SUMMARY printf "# External trigger for docker-ffmpeg\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^ffmpeg_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then if grep -q "^ffmpeg_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`ffmpeg_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^ffmpeg_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`ffmpeg_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`ffmpeg_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
@ -23,8 +29,13 @@ jobs:
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of master branch. To disable this trigger, add \`ffmpeg_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY echo "> External trigger running off of master branch. To disable this trigger, add \`ffmpeg_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(echo 7.1-cli) EXT_RELEASE=$(echo 8.0.1-cli)
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^ffmpeg_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
@ -35,8 +46,8 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/ffmpeg" image="linuxserver/ffmpeg"
tag="latest" tag="latest"
@ -48,13 +59,30 @@ jobs:
--header "Accept: application/vnd.oci.image.index.v1+json" \ --header "Accept: application/vnd.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}") "https://ghcr.io/v2/${image}/manifests/${tag}")
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}") if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
digest=$(curl -s \ # If there's a layer element it's a single-arch manifest so just get that digest
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ digest=$(jq -r '.config.digest' <<< "${multidigest}")
--header "Accept: application/vnd.oci.image.manifest.v1+json" \ else
--header "Authorization: Bearer ${token}" \ # Otherwise it's multi-arch or has manifest annotations
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \ if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
| jq -r '.config.digest') # Check for manifest annotations and delete if found
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
fi
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
# If there's still more than one digest, it's multi-arch
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
else
# Otherwise it's single arch
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
fi
if digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
digest=$(jq -r '.config.digest' <<< "${digest}");
fi
fi
image_info=$(curl -sL \ image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}") "https://ghcr.io/v2/${image}/blobs/${digest}")
@ -75,8 +103,8 @@ jobs:
exit 1 exit 1
fi fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
@ -91,8 +119,8 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
if "${artifacts_found}" == "true" ]]; then if [[ "${artifacts_found}" == "true" ]]; then
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi fi
response=$(curl -iX POST \ response=$(curl -iX POST \
@ -111,7 +139,7 @@ jobs:
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit" --data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****" echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for ffmpeg tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" TRIGGER_REASON="A version change was detected for ffmpeg tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}

3
.github/workflows/external_trigger_scheduler.yml vendored Executable file → Normal file
View File

@ -5,6 +5,9 @@ on:
- cron: '1 * * * *' - cron: '1 * * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest

6
.github/workflows/greetings.yml vendored Executable file → Normal file
View File

@ -2,8 +2,14 @@ name: Greetings
on: [pull_request_target, issues] on: [pull_request_target, issues]
permissions:
contents: read
jobs: jobs:
greeting: greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1

30
.github/workflows/package_trigger_scheduler.yml vendored Executable file → Normal file
View File

@ -5,6 +5,9 @@ on:
- cron: '59 21 * * 4' - cron: '59 21 * * 4'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -27,9 +30,18 @@ jobs:
fi fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-ffmpeg/${br}/jenkins-vars.yml) JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-ffmpeg/${br}/jenkins-vars.yml)
if [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-ffmpeg/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
if [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-ffmpeg/${br}/readme-vars.yml)
if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} " skipped_branches="${skipped_branches}${br} "
@ -37,7 +49,7 @@ jobs:
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`ffmpeg_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`ffmpeg_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} " skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/${br}/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} " skipped_branches="${skipped_branches}${br} "
@ -49,6 +61,11 @@ jobs:
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/${br}/buildWithParameters?PACKAGE_CHECK=true \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
if [[ -z "${response}" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Jenkins build could not be triggered. Skipping branch."
continue
fi
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10 sleep 10
@ -56,11 +73,14 @@ jobs:
buildurl="${buildurl%$'\r'}" buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \ if ! curl -ifX POST \
"${buildurl}submitDescription" \ "${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ --data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit" --data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20 sleep 20
fi fi
else else

0
.github/workflows/permissions.yml vendored Executable file → Normal file
View File

View File

@ -1,7 +1,7 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
# build stage # build stage
FROM ghcr.io/linuxserver/baseimage-ubuntu:noble as buildstage FROM ghcr.io/linuxserver/baseimage-ubuntu:noble AS buildstage
# set version label # set version label
ARG FFMPEG_VERSION ARG FFMPEG_VERSION
@ -10,56 +10,57 @@ ARG FFMPEG_VERSION
ENV \ ENV \
DEBIAN_FRONTEND="noninteractive" \ DEBIAN_FRONTEND="noninteractive" \
MAKEFLAGS="-j4" \ MAKEFLAGS="-j4" \
CMAKE_POLICY_VERSION_MINIMUM="3.5" \
PATH="/root/.cargo/bin:${PATH}" PATH="/root/.cargo/bin:${PATH}"
# versions # versions
ENV \ ENV \
AOM=v3.11.0 \ AOM=v3.13.1 \
FDKAAC=2.0.3 \ FDKAAC=2.0.3 \
FFMPEG_HARD=7.1 \ FFMPEG_HARD=8.0.1 \
FONTCONFIG=2.15.0 \ FONTCONFIG=2.16.0 \
FREETYPE=2.13.3 \ FREETYPE=2.14.1 \
FRIBIDI=1.0.16 \ FRIBIDI=1.0.16 \
GMMLIB=22.5.2 \ GMMLIB=22.8.2 \
HARFBUZZ=10.1.0 \ HARFBUZZ=12.3.0 \
IHD=24.3.4 \ IHD=25.3.4 \
KVAZAAR=2.3.1 \ KVAZAAR=2.3.2 \
LAME=3.100 \ LAME=3.100 \
LIBASS=0.17.3 \ LIBASS=0.17.4 \
LIBDAV1D=1.5.0 \ LIBDAV1D=1.5.3 \
LIBDOVI=2.1.2 \ LIBDOVI=2.3.1 \
LIBDRM=2.4.123 \ LIBDRM=2.4.131 \
LIBGL=1.7.0 \ LIBGL=1.7.0 \
LIBLC3=1.1.1 \ LIBLC3=1.1.3 \
LIBMFX=22.5.4 \ LIBMFX=22.5.4 \
LIBPLACEBO=7.349.0 \ LIBPLACEBO=7.351.0 \
LIBPNG=1.6.44 \ LIBPNG=1.6.53 \
LIBVA=2.22.0 \ LIBVA=2.23.0 \
LIBVDPAU=1.5 \ LIBVDPAU=1.5 \
LIBVIDSTAB=1.1.1 \ LIBVIDSTAB=1.1.1 \
LIBVMAF=3.0.0 \ LIBVMAF=3.0.0 \
LIBVPL=2.13.0 \ LIBVPL=2.16.0 \
MESA=24.3.0 \ MESA=25.3.3 \
NVCODEC=n12.2.72.0 \ NVCODEC=n13.0.19.0 \
OGG=1.3.5 \ OGG=1.3.6 \
OPENCOREAMR=0.1.6 \ OPENCOREAMR=0.1.6 \
OPENJPEG=2.5.2 \ OPENJPEG=2.5.4 \
OPUS=1.5.2 \ OPUS=1.6 \
RAV1E=0.7.1 \ RAV1E=0.8.1 \
RIST=0.2.11 \ RIST=0.2.11 \
SHADERC=v2024.3 \ SHADERC=v2025.5 \
SRT=1.5.4 \ SRT=1.5.4 \
SVTAV1=2.3.0 \ SVTAV1=3.1.2 \
THEORA=1.1.1 \ THEORA=1.2.0 \
VORBIS=1.3.7 \ VORBIS=1.3.7 \
VPLGPURT=24.3.4 \ VPLGPURT=25.3.4 \
VPX=1.15.0 \ VPX=1.15.2 \
VULKANSDK=vulkan-sdk-1.3.296.0 \ VULKANSDK=vulkan-sdk-1.4.335.0 \
VVENC=1.12.1 \ VVENC=1.13.1 \
WEBP=1.4.0 \ WEBP=1.6.0 \
X265=4.1 \ X265=4.1 \
XVID=1.3.7 \ XVID=1.3.7 \
ZIMG=3.0.5 \ ZIMG=3.0.6 \
ZMQ=v4.3.5 ZMQ=v4.3.5
RUN \ RUN \
@ -131,13 +132,13 @@ RUN \
tar xf /tmp/rust.tar.gz -C /tmp/rust --strip-components=1 && \ tar xf /tmp/rust.tar.gz -C /tmp/rust --strip-components=1 && \
cd /tmp/rust && \ cd /tmp/rust && \
./install.sh && \ ./install.sh && \
cargo install cargo-c cbindgen && \ cargo install bindgen-cli cargo-c cbindgen --locked && \
python3 -m venv /lsiopy && \ python3 -m venv /lsiopy && \
pip install -U --no-cache-dir \ pip install -U --no-cache-dir \
pip \ pip \
setuptools \ setuptools \
wheel && \ wheel && \
pip install --no-cache-dir cmake mako meson ninja packaging ply pyyaml pip install --no-cache-dir cmake==3.31.6 mako meson ninja packaging ply pyyaml
# compile 3rd party libs # compile 3rd party libs
RUN \ RUN \
@ -181,7 +182,7 @@ RUN \
mkdir -p /tmp/ffnvcodec && \ mkdir -p /tmp/ffnvcodec && \
git clone \ git clone \
--branch ${NVCODEC} \ --branch ${NVCODEC} \
--depth 1 https://git.videolan.org/git/ffmpeg/nv-codec-headers.git \ --depth 1 https://github.com/FFmpeg/nv-codec-headers.git \
/tmp/ffnvcodec /tmp/ffnvcodec
RUN \ RUN \
echo "**** compiling ffnvcodec ****" && \ echo "**** compiling ffnvcodec ****" && \
@ -206,8 +207,8 @@ RUN \
echo "**** grabbing fontconfig ****" && \ echo "**** grabbing fontconfig ****" && \
mkdir -p /tmp/fontconfig && \ mkdir -p /tmp/fontconfig && \
curl -Lf \ curl -Lf \
https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG}.tar.gz | \ https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG}.tar.xz | \
tar -zx --strip-components=1 -C /tmp/fontconfig tar -xJ --strip-components=1 -C /tmp/fontconfig
RUN \ RUN \
echo "**** compiling fontconfig ****" && \ echo "**** compiling fontconfig ****" && \
cd /tmp/fontconfig && \ cd /tmp/fontconfig && \
@ -691,16 +692,6 @@ RUN \
RUN \ RUN \
echo "**** compiling theora ****" && \ echo "**** compiling theora ****" && \
cd /tmp/theora && \ cd /tmp/theora && \
cp \
/usr/share/automake-1.16/config.guess \
config.guess && \
cp \
/usr/share/automake-1.16/config.sub \
config.sub && \
curl -fL \
'https://gitlab.xiph.org/xiph/theora/-/commit/7288b539c52e99168488dc3a343845c9365617c8.diff' \
> png.patch && \
patch ./examples/png2theora.c < png.patch && \
./configure \ ./configure \
--disable-static \ --disable-static \
--enable-shared && \ --enable-shared && \
@ -898,10 +889,11 @@ RUN \
curl -Lf \ curl -Lf \
https://ffmpeg.org/releases/ffmpeg-${FFMPEG}.tar.bz2 | \ https://ffmpeg.org/releases/ffmpeg-${FFMPEG}.tar.bz2 | \
tar -jx --strip-components=1 -C /tmp/ffmpeg tar -jx --strip-components=1 -C /tmp/ffmpeg
RUN \ RUN \
echo "**** compiling ffmpeg ****" && \ echo "**** compiling ffmpeg ****" && \
cd /tmp/ffmpeg && \ cd /tmp/ffmpeg && \
./configure \ ./configure \
--disable-debug \ --disable-debug \
--disable-doc \ --disable-doc \
--disable-ffplay \ --disable-ffplay \
@ -969,7 +961,6 @@ RUN \
/buildout/usr/local/lib/libmfx-gen \ /buildout/usr/local/lib/libmfx-gen \
/buildout/usr/local/lib/mfx \ /buildout/usr/local/lib/mfx \
/buildout/usr/local/lib/x86_64-linux-gnu/dri \ /buildout/usr/local/lib/x86_64-linux-gnu/dri \
/buildout/usr/local/lib/x86_64-linux-gnu/vdpau \
/buildout/usr/local/share/vulkan \ /buildout/usr/local/share/vulkan \
/buildout/usr/share/fonts \ /buildout/usr/share/fonts \
/buildout/usr/share/libdrm \ /buildout/usr/share/libdrm \
@ -998,9 +989,6 @@ RUN \
cp -a \ cp -a \
/usr/local/lib/x86_64-linux-gnu/dri/*.so \ /usr/local/lib/x86_64-linux-gnu/dri/*.so \
/buildout/usr/local/lib/x86_64-linux-gnu/dri/ && \ /buildout/usr/local/lib/x86_64-linux-gnu/dri/ && \
cp -a \
/usr/local/lib/x86_64-linux-gnu/vdpau/*.so \
/buildout/usr/local/lib/x86_64-linux-gnu/vdpau/ && \
cp -a \ cp -a \
/usr/lib/x86_64-linux-gnu/dri/i965* \ /usr/lib/x86_64-linux-gnu/dri/i965* \
/buildout/usr/local/lib/x86_64-linux-gnu/dri/ && \ /buildout/usr/local/lib/x86_64-linux-gnu/dri/ && \
@ -1068,6 +1056,7 @@ RUN \
libxshmfence1 \ libxshmfence1 \
libxml2 \ libxml2 \
ocl-icd-libopencl1 && \ ocl-icd-libopencl1 && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
rm -rf \ rm -rf \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \

View File

@ -1,7 +1,7 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
# build stage # build stage
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble as buildstage FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble AS buildstage
# set version label # set version label
ARG FFMPEG_VERSION ARG FFMPEG_VERSION
@ -10,44 +10,46 @@ ARG FFMPEG_VERSION
ENV \ ENV \
DEBIAN_FRONTEND="noninteractive" \ DEBIAN_FRONTEND="noninteractive" \
MAKEFLAGS="-j4" \ MAKEFLAGS="-j4" \
CMAKE_POLICY_VERSION_MINIMUM="3.5" \
PATH="/root/.cargo/bin:${PATH}" PATH="/root/.cargo/bin:${PATH}"
# versions # versions
ENV \ ENV \
AOM=v3.11.0 \ AOM=v3.13.1 \
FDKAAC=2.0.3 \ FDKAAC=2.0.3 \
FFMPEG_HARD=7.1 \ FFMPEG_HARD=8.0.1 \
FONTCONFIG=2.15.0 \ FONTCONFIG=2.16.0 \
FREETYPE=2.13.3 \ FREETYPE=2.14.1 \
FRIBIDI=1.0.16 \ FRIBIDI=1.0.16 \
HARFBUZZ=10.1.0 \ HARFBUZZ=12.3.0 \
KVAZAAR=2.3.1 \ KVAZAAR=2.3.2 \
LAME=3.100 \ LAME=3.100 \
LIBASS=0.17.3 \ LIBASS=0.17.4 \
LIBDAV1D=1.5.0 \ LIBDAV1D=1.5.3 \
LIBLC3=1.1.1 \ LIBDRM=2.4.131 \
LIBPNG=1.6.44 \ LIBLC3=1.1.3 \
LIBVA=2.22.0 \ LIBPNG=1.6.53 \
LIBVA=2.23.0 \
LIBVDPAU=1.5 \ LIBVDPAU=1.5 \
LIBVIDSTAB=1.1.1 \ LIBVIDSTAB=1.1.1 \
LIBVMAF=3.0.0 \ LIBVMAF=3.0.0 \
NVCODEC=n12.1.14.0 \ NVCODEC=n13.0.19.0 \
OGG=1.3.5 \ OGG=1.3.6 \
OPENCOREAMR=0.1.6 \ OPENCOREAMR=0.1.6 \
OPENJPEG=2.5.2 \ OPENJPEG=2.5.4 \
OPUS=1.5.2 \ OPUS=1.6 \
RAV1E=0.7.1 \ RAV1E=0.8.1 \
RIST=0.2.11 \ RIST=0.2.11 \
SRT=1.5.4 \ SRT=1.5.4 \
SVTAV1=2.3.0 \ SVTAV1=3.1.2 \
THEORA=1.1.1 \ THEORA=1.2.0 \
VORBIS=1.3.7 \ VORBIS=1.3.7 \
VPX=1.15.0 \ VPX=1.15.2 \
VVENC=1.12.1 \ VVENC=1.13.1 \
WEBP=1.4.0 \ WEBP=1.6.0 \
X265=4.1 \ X265=4.1 \
XVID=1.3.7 \ XVID=1.3.7 \
ZIMG=3.0.5 \ ZIMG=3.0.6 \
ZMQ=v4.3.5 ZMQ=v4.3.5
RUN \ RUN \
@ -56,14 +58,13 @@ RUN \
apt-get install -y \ apt-get install -y \
autoconf \ autoconf \
automake \ automake \
build-essential \
bzip2 \ bzip2 \
cmake \ cmake \
clang \ clang \
diffutils \ diffutils \
g++ \ g++ \
g++-12 \
gcc \ gcc \
gcc-12 \
git \ git \
gperf \ gperf \
libasound2-dev \ libasound2-dev \
@ -96,13 +97,13 @@ RUN \
tar xf /tmp/rust.tar.gz -C /tmp/rust --strip-components=1 && \ tar xf /tmp/rust.tar.gz -C /tmp/rust --strip-components=1 && \
cd /tmp/rust && \ cd /tmp/rust && \
./install.sh && \ ./install.sh && \
cargo install cargo-c && \ cargo install cargo-c --locked && \
python3 -m venv /lsiopy && \ python3 -m venv /lsiopy && \
pip install -U --no-cache-dir \ pip install -U --no-cache-dir \
pip \ pip \
setuptools \ setuptools \
wheel && \ wheel && \
pip install --no-cache-dir cmake meson ninja pip install --no-cache-dir cmake==3.31.6 meson ninja
# compile 3rd party libs # compile 3rd party libs
RUN \ RUN \
@ -146,7 +147,7 @@ RUN \
mkdir -p /tmp/ffnvcodec && \ mkdir -p /tmp/ffnvcodec && \
git clone \ git clone \
--branch ${NVCODEC} \ --branch ${NVCODEC} \
--depth 1 https://git.videolan.org/git/ffmpeg/nv-codec-headers.git \ --depth 1 https://github.com/FFmpeg/nv-codec-headers.git \
/tmp/ffnvcodec /tmp/ffnvcodec
RUN \ RUN \
echo "**** compiling ffnvcodec ****" && \ echo "**** compiling ffnvcodec ****" && \
@ -171,8 +172,8 @@ RUN \
echo "**** grabbing fontconfig ****" && \ echo "**** grabbing fontconfig ****" && \
mkdir -p /tmp/fontconfig && \ mkdir -p /tmp/fontconfig && \
curl -Lf \ curl -Lf \
https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG}.tar.gz | \ https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG}.tar.xz | \
tar -zx --strip-components=1 -C /tmp/fontconfig tar -xJ --strip-components=1 -C /tmp/fontconfig
RUN \ RUN \
echo "**** compiling fontconfig ****" && \ echo "**** compiling fontconfig ****" && \
cd /tmp/fontconfig && \ cd /tmp/fontconfig && \
@ -209,7 +210,7 @@ RUN \
cd /tmp/harfbuzz && \ cd /tmp/harfbuzz && \
meson build && \ meson build && \
ninja -C build install && \ ninja -C build install && \
strip -d /usr/local/lib/libharfbuzz*.so strip -d /usr/local/lib/aarch64-linux-gnu/libharfbuzz*.so
RUN \ RUN \
echo "**** grabbing kvazaar ****" && \ echo "**** grabbing kvazaar ****" && \
mkdir -p /tmp/kvazaar && \ mkdir -p /tmp/kvazaar && \
@ -277,6 +278,22 @@ RUN \
cd /tmp/libdav1d/build && \ cd /tmp/libdav1d/build && \
meson setup .. && \ meson setup .. && \
ninja install ninja install
RUN \
echo "**** grabbing libdrm ****" && \
mkdir -p /tmp/libdrm && \
curl -Lf \
https://dri.freedesktop.org/libdrm/libdrm-${LIBDRM}.tar.xz | \
tar -xJ --strip-components=1 -C /tmp/libdrm
RUN \
echo "**** compiling libdrm ****" && \
cd /tmp/libdrm && \
meson setup \
--prefix=/usr --libdir=/usr/local/lib/aarch64-linux-gnu \
-Dvalgrind=disabled \
. build && \
ninja -C build && \
ninja -C build install && \
strip -d /usr/local/lib/aarch64-linux-gnu/libdrm*.so
RUN \ RUN \
echo "**** grabbing liblc3 ****" && \ echo "**** grabbing liblc3 ****" && \
mkdir -p /tmp/liblc3 && \ mkdir -p /tmp/liblc3 && \
@ -380,7 +397,7 @@ RUN \
echo "**** compiling rav1e ****" && \ echo "**** compiling rav1e ****" && \
cd /tmp/rav1e && \ cd /tmp/rav1e && \
cargo cinstall --release && \ cargo cinstall --release && \
strip -d /usr/local/lib/librav1e.so strip -d /usr/local/lib/aarch64-linux-gnu/librav1e.so
RUN \ RUN \
echo "**** grabbing rist ****" && \ echo "**** grabbing rist ****" && \
mkdir -p /tmp/rist && \ mkdir -p /tmp/rist && \
@ -438,16 +455,6 @@ RUN \
RUN \ RUN \
echo "**** compiling theora ****" && \ echo "**** compiling theora ****" && \
cd /tmp/theora && \ cd /tmp/theora && \
cp \
/usr/share/automake-1.16/config.guess \
config.guess && \
cp \
/usr/share/automake-1.16/config.sub \
config.sub && \
curl -fL \
'https://gitlab.xiph.org/xiph/theora/-/commit/7288b539c52e99168488dc3a343845c9365617c8.diff' \
> png.patch && \
patch ./examples/png2theora.c < png.patch && \
./configure \ ./configure \
--disable-static \ --disable-static \
--enable-shared && \ --enable-shared && \
@ -514,7 +521,7 @@ RUN \
RUN \ RUN \
echo "**** compiling vvenc ****" && \ echo "**** compiling vvenc ****" && \
cd /tmp/vvenc && \ cd /tmp/vvenc && \
CC=/usr/bin/gcc-12 CXX=/usr/bin/g++-12 make install install-prefix=/usr/local && \ make install install-prefix=/usr/local && \
strip -d /usr/local/lib/libvvenc.so strip -d /usr/local/lib/libvvenc.so
RUN \ RUN \
echo "**** grabbing webp ****" && \ echo "**** grabbing webp ****" && \
@ -616,14 +623,14 @@ RUN \
curl -Lf \ curl -Lf \
https://ffmpeg.org/releases/ffmpeg-${FFMPEG}.tar.bz2 | \ https://ffmpeg.org/releases/ffmpeg-${FFMPEG}.tar.bz2 | \
tar -jx --strip-components=1 -C /tmp/ffmpeg tar -jx --strip-components=1 -C /tmp/ffmpeg
RUN \
echo "**** compiling ffmpeg ****" && \ RUN \
cd /tmp/ffmpeg && \ echo "**** compiling ffmpeg ****" && \
./configure \ cd /tmp/ffmpeg && \
./configure \
--disable-debug \ --disable-debug \
--disable-doc \ --disable-doc \
--disable-ffplay \ --disable-ffplay \
--disable-libdrm \
--enable-alsa \ --enable-alsa \
--enable-cuda-llvm \ --enable-cuda-llvm \
--enable-cuvid \ --enable-cuvid \
@ -678,7 +685,7 @@ RUN \
mkdir -p \ mkdir -p \
/buildout/usr/local/bin \ /buildout/usr/local/bin \
/buildout/usr/local/etc/fonts \ /buildout/usr/local/etc/fonts \
/buildout/usr/local/lib \ /buildout/usr/local/lib/aarch64-linux-gnu \
/buildout/usr/share/fonts && \ /buildout/usr/share/fonts && \
cp \ cp \
/tmp/ffmpeg/ffmpeg \ /tmp/ffmpeg/ffmpeg \
@ -692,6 +699,9 @@ RUN \
cp -a \ cp -a \
/usr/local/lib/lib*so* \ /usr/local/lib/lib*so* \
/buildout/usr/local/lib/ && \ /buildout/usr/local/lib/ && \
cp -a \
/usr/local/lib/aarch64-linux-gnu/lib*so* \
/buildout/usr/local/lib/aarch64-linux-gnu/ && \
cp -a \ cp -a \
/usr/share/fonts/* \ /usr/share/fonts/* \
/buildout/usr/share/fonts/ /buildout/usr/share/fonts/
@ -730,6 +740,7 @@ RUN \
libxext6 \ libxext6 \
libxml2 \ libxml2 \
ocl-icd-libopencl1 && \ ocl-icd-libopencl1 && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
rm -rf \ rm -rf \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \

170
Jenkinsfile vendored
View File

@ -49,11 +49,23 @@ pipeline {
steps{ steps{
echo "Running on node: ${NODE_NAME}" echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash sh '''#! /bin/bash
containers=$(docker ps -aq) echo "Pruning builder"
docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
docker stop ${containers} BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi fi
docker system prune -af --volumes || : ''' docker system prune -f --volumes || :
docker image prune -af || :
'''
script{ script{
env.EXIT_STATUS = '' env.EXIT_STATUS = ''
env.LS_RELEASE = sh( env.LS_RELEASE = sh(
@ -75,7 +87,11 @@ pipeline {
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml'
if ( env.SYFT_IMAGE_TAG == null ) {
env.SYFT_IMAGE_TAG = 'latest'
}
} }
echo "Using syft image tag ${SYFT_IMAGE_TAG}"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" ''' echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{ script{
@ -124,7 +140,7 @@ pipeline {
steps{ steps{
script{ script{
env.EXT_RELEASE = sh( env.EXT_RELEASE = sh(
script: ''' echo 7.1-cli ''', script: ''' echo 8.0.1-cli ''',
returnStdout: true).trim() returnStdout: true).trim()
env.RELEASE_LINK = 'custom_command' env.RELEASE_LINK = 'custom_command'
} }
@ -185,6 +201,7 @@ pipeline {
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
env.CITEST_IMAGETAG = 'latest'
} }
} }
} }
@ -210,6 +227,7 @@ pipeline {
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
env.CITEST_IMAGETAG = 'develop'
} }
} }
} }
@ -235,6 +253,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
env.CITEST_IMAGETAG = 'develop'
} }
} }
} }
@ -257,7 +276,7 @@ pipeline {
-v ${WORKSPACE}:/mnt \ -v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
ghcr.io/linuxserver/baseimage-alpine:3.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ ghcr.io/linuxserver/baseimage-alpine:3.23 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache python3 && \ apk add --no-cache python3 && \
python3 -m venv /lsiopy && \ python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \ pip install --no-cache-dir -U pip && \
@ -503,9 +522,9 @@ pipeline {
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Ffmpeg\" \ --label \"org.opencontainers.image.title=Ffmpeg\" \
--label \"org.opencontainers.image.description=ffmpeg image by linuxserver.io\" \ --label \"org.opencontainers.image.description=A complete, cross-platform solution to record, convert and stream audio and video.\" \
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \ --no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false --builder=container --load \ --provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
@ -529,12 +548,17 @@ pipeline {
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then if [[ "${PACKAGE_CHECK}" != "true" ]]; then
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE" IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} & docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done
for p in "${!pids[@]}"; do
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done done
wait
fi fi
''' '''
} }
@ -567,9 +591,9 @@ pipeline {
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Ffmpeg\" \ --label \"org.opencontainers.image.title=Ffmpeg\" \
--label \"org.opencontainers.image.description=ffmpeg image by linuxserver.io\" \ --label \"org.opencontainers.image.description=A complete, cross-platform solution to record, convert and stream audio and video.\" \
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \ --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false --builder=container --load \ --provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
@ -593,12 +617,17 @@ pipeline {
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then if [[ "${PACKAGE_CHECK}" != "true" ]]; then
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE" IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} & docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done
for p in "${!pids[@]}"; do
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done done
wait
fi fi
''' '''
} }
@ -624,9 +653,9 @@ pipeline {
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Ffmpeg\" \ --label \"org.opencontainers.image.title=Ffmpeg\" \
--label \"org.opencontainers.image.description=ffmpeg image by linuxserver.io\" \ --label \"org.opencontainers.image.description=A complete, cross-platform solution to record, convert and stream audio and video.\" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \ --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
--provenance=false --sbom=false --builder=container --load \ --provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
@ -651,11 +680,15 @@ pipeline {
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then if [[ "${PACKAGE_CHECK}" != "true" ]]; then
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE" IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do for i in "${CACHE[@]}"; do
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} & docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done
for p in "${!pids[@]}"; do
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done done
wait
fi fi
''' '''
} }
@ -665,7 +698,8 @@ pipeline {
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
docker stop ${containers} docker stop ${containers}
fi fi
docker system prune -af --volumes || : docker system prune -f --volumes || :
docker image prune -af || :
''' '''
} }
} }
@ -691,7 +725,7 @@ pipeline {
docker run --rm \ docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \
-v ${TEMPDIR}:/tmp \ -v ${TEMPDIR}:/tmp \
ghcr.io/anchore/syft:latest \ ghcr.io/anchore/syft:${SYFT_IMAGE_TAG} \
${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
@ -778,7 +812,7 @@ pipeline {
CI_DOCKERENV="LSIO_FIRST_PARTY=true" CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi fi
fi fi
docker pull ghcr.io/linuxserver/ci:latest docker pull ghcr.io/linuxserver/ci:${CITEST_IMAGETAG}
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
@ -800,7 +834,10 @@ pipeline {
-e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \ -e NODE_NAME=\"${NODE_NAME}\" \
-t ghcr.io/linuxserver/ci:latest \ -e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \
-e COMMIT_SHA=\"${COMMIT_SHA}\" \
-e BUILD_NUMBER=\"${BUILD_NUMBER}\" \
-t ghcr.io/linuxserver/ci:${CITEST_IMAGETAG} \
python3 test_build.py''' python3 test_build.py'''
} }
} }
@ -826,9 +863,11 @@ pipeline {
CACHEIMAGE=${i} CACHEIMAGE=${i}
fi fi
done done
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
fi fi
done done
''' '''
@ -853,20 +892,27 @@ pipeline {
CACHEIMAGE=${i} CACHEIMAGE=${i}
fi fi
done done
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
fi fi
done done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} || \
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
fi fi
done done
''' '''
@ -884,23 +930,41 @@ pipeline {
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
echo "Pushing New tag for current commit ${META_TAG}"
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Auto-generating release notes"
if [ "$(git tag --points-at HEAD)" != "" ]; then
echo "Existing tag points to current commit, suggesting no new LS changes"
AUTO_RELEASE_NOTES="No changes"
else
AUTO_RELEASE_NOTES=$(curl -fsL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github+json" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/generate-notes \
-d '{"tag_name":"'${META_TAG}'",\
"target_commitish": "master"}' \
| jq -r '.body' | sed 's|## What.s Changed||')
fi
echo "Pushing New tag for current commit ${META_TAG}"
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}'
echo "Pushing New release for Tag"
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
echo '{"tag_name":"'${META_TAG}'",\ jq -n \
"target_commitish": "master",\ --arg tag_name "$META_TAG" \
"name": "'${META_TAG}'",\ --arg target_commitish "master" \
"body": "**CI Report:**\\n\\n'${CI_URL:-N/A}'\\n\\n**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start --arg ci_url "${CI_URL:-N/A}" \
printf '","draft": false,"prerelease": false}' >> releasebody.json --arg ls_notes "$AUTO_RELEASE_NOTES" \
paste -d'\\0' start releasebody.json > releasebody.json.done --arg remote_notes "$(cat releasebody.json)" \
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done''' '{
"tag_name": $tag_name,
"target_commitish": $target_commitish,
"name": $tag_name,
"body": ("**CI Report:**\\n\\n" + $ci_url + "\\n\\n**LinuxServer Changes:**\\n\\n" + $ls_notes + "\\n\\n**Remote Changes:**\\n\\n" + $remote_notes),
"draft": false,
"prerelease": false }' > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done
'''
} }
} }
// Add protection to the release branch // Add protection to the release branch
@ -1075,12 +1139,22 @@ EOF
} }
cleanup { cleanup {
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Performing docker system prune!!" echo "Pruning builder!!"
containers=$(docker ps -aq) docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
docker stop ${containers} BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi fi
docker system prune -af --volumes || : docker system prune -f --volumes || :
docker image prune -af || :
''' '''
cleanWs() cleanWs()
} }

View File

@ -183,6 +183,15 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **06.01.26:** - Remove mpp from aarch64 build due to upstream DMCA removal. Bump harfbuzz, libdav1d, libdrm, libpng, libva, libvpl, mesa, opus, shaderc and vulkan-sdk.
* **01.12.25:** - Bump ffmpeg to 8.0.1.
* **19.11.25:** - Bump aom, freetype, harfbuzz, Intel drivers and libs, kvazaar, libdav1d, libdrm, mesa, mpp, openjpeg, shaderc, svt-av1 and vulkan-sdk.
* **23.08.25:** - Bump ffmpeg to 8.0. Bump harfbuzz, Intel drivers and libs, libdovi, libdrm, libpng, mesa, ogg, rav1e, shaderc, svt-av1, vulkan-sdk, webp and zimg.
* **06.08.25:** - Bump svt-av1.
* **07.06.25:** - Bump harfbuzz, libass, libdovi, libplacebo, libpng, mesa, rav1e, shaderc, libvpx and vulkan-sdk.
* **04.06.25:** - Add libdrm and rkmpp to arm64 image.
* **21.04.25:** - Bump aom, Intel drivers and libs, harfbuzz, mesa, svt-av1, libvpx, libtheora, vulkan-sdk and vvenc.
* **07.03.25:** - Bump ffmpeg to 7.1.1, Bump aom, fontconfig, Intel drivers and libs, harfbuzz, libdav1d, libdovi, libdrm, liblc3, libpng, mesa, openjpeg, shaderc, svt-av1, vulkan-sdk, vvenc and webp.
* **26.11.24:** - Bump libaom, mesa, rist, srt and libx265. * **26.11.24:** - Bump libaom, mesa, rist, srt and libx265.
* **07.11.24:** - Bump harfbuzz, Intel drivers and libs, libdav1d, mesa, svtav1, vpx, vulkan sdk and vvenc. * **07.11.24:** - Bump harfbuzz, Intel drivers and libs, libdav1d, mesa, svtav1, vpx, vulkan sdk and vvenc.
* **05.10.24:** - Add support for libvvenc on aarch64. Bump mesa. * **05.10.24:** - Add support for libvvenc on aarch64. Bump mesa.

View File

@ -3,11 +3,10 @@
# jenkins variables # jenkins variables
project_name: docker-ffmpeg project_name: docker-ffmpeg
external_type: na external_type: na
custom_version_command: "echo 7.1-cli" custom_version_command: "echo 8.0.1-cli"
release_type: stable release_type: stable
release_tag: latest release_tag: latest
ls_branch: master ls_branch: master
build_armhf: false
repo_vars: repo_vars:
- BUILD_VERSION_ARG = 'FFMPEG_VERSION' - BUILD_VERSION_ARG = 'FFMPEG_VERSION'
- LS_USER = 'linuxserver' - LS_USER = 'linuxserver'

View File

@ -1,109 +1,109 @@
NAME VERSION TYPE NAME VERSION TYPE
adduser 3.137ubuntu1 deb adduser 3.137ubuntu1 deb
alsa-topology-conf 1.2.5.1-2 deb alsa-topology-conf 1.2.5.1-2 deb
alsa-ucm-conf 1.2.10-1ubuntu5.3 deb alsa-ucm-conf 1.2.10-1ubuntu5.9 deb
apt 2.7.14build2 deb apt 2.8.3 deb
apt-utils 2.7.14build2 deb apt-utils 2.8.3 deb
base-files 13ubuntu10.1 deb base-files 13ubuntu10.4 deb
base-passwd 3.6.3build1 deb base-passwd 3.6.3build1 deb
bash 5.2.21-2ubuntu4 deb bash 5.2.21-2ubuntu4 deb
bsdutils 1:2.39.3-9ubuntu6.1 deb bsdutils 1:2.39.3-9ubuntu6.4 deb
ca-certificates 20240203 deb ca-certificates 20240203 deb
catatonit 0.1.7-1 deb catatonit 0.1.7-1 deb
coreutils 9.4-3ubuntu6 deb coreutils 9.4-3ubuntu6.1 deb
cron 3.0pl1-184ubuntu2 deb cron 3.0pl1-184ubuntu2 deb
cron-daemon-common 3.0pl1-184ubuntu2 deb cron-daemon-common 3.0pl1-184ubuntu2 deb
curl 8.5.0-2ubuntu10.4 deb curl 8.5.0-2ubuntu10.6 deb
dash 0.5.12-6ubuntu5 deb dash 0.5.12-6ubuntu5 deb
debconf 1.5.86ubuntu1 deb debconf 1.5.86ubuntu1 deb
debianutils 5.17build1 deb debianutils 5.17build1 deb
diffutils 1:3.10-1build1 deb diffutils 1:3.10-1build1 deb
dirmngr 2.4.4-2ubuntu17 deb dirmngr 2.4.4-2ubuntu17.4 deb
dpkg 1.22.6ubuntu6.1 deb dpkg 1.22.6ubuntu6.5 deb
e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 deb e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 deb
findutils 4.9.0-5build1 deb findutils 4.9.0-5build1 deb
gcc-14-base 14.2.0-4ubuntu2~24.04 deb gcc-14-base 14.2.0-4ubuntu2~24.04 deb
gnupg 2.4.4-2ubuntu17 deb gnupg 2.4.4-2ubuntu17.4 deb
gnupg-l10n 2.4.4-2ubuntu17 deb gnupg-l10n 2.4.4-2ubuntu17.4 deb
gnupg-utils 2.4.4-2ubuntu17 deb gnupg-utils 2.4.4-2ubuntu17.4 deb
gpg 2.4.4-2ubuntu17 deb gpg 2.4.4-2ubuntu17.4 deb
gpg-agent 2.4.4-2ubuntu17 deb gpg-agent 2.4.4-2ubuntu17.4 deb
gpg-wks-client 2.4.4-2ubuntu17 deb gpg-wks-client 2.4.4-2ubuntu17.4 deb
gpgconf 2.4.4-2ubuntu17 deb gpgconf 2.4.4-2ubuntu17.4 deb
gpgsm 2.4.4-2ubuntu17 deb gpgsm 2.4.4-2ubuntu17.4 deb
gpgv 2.4.4-2ubuntu17 deb gpgv 2.4.4-2ubuntu17.4 deb
grep 3.11-4build1 deb grep 3.11-4build1 deb
gzip 1.12-1ubuntu3 deb gzip 1.12-1ubuntu3.1 deb
hostname 3.23+nmu2ubuntu2 deb hostname 3.23+nmu2ubuntu2 deb
init-system-helpers 1.66ubuntu1 deb init-system-helpers 1.66ubuntu1 deb
jq 1.7.1-3build1 deb jq 1.7.1-3ubuntu0.24.04.1 deb
keyboxd 2.4.4-2ubuntu17 deb keyboxd 2.4.4-2ubuntu17.4 deb
krb5-locales 1.20.1-6ubuntu2.1 deb krb5-locales 1.20.1-6ubuntu2.6 deb
libacl1 2.3.2-1build1 deb libacl1 2.3.2-1build1.1 deb
libapt-pkg6.0t64 2.7.14build2 deb libapt-pkg6.0t64 2.8.3 deb
libasound2-data 1.2.11-1build2 deb libasound2-data 1.2.11-1ubuntu0.1 deb
libasound2t64 1.2.11-1build2 deb libasound2t64 1.2.11-1ubuntu0.1 deb
libassuan0 2.5.6-1build1 deb libassuan0 2.5.6-1build1 deb
libattr1 1:2.5.2-1build1 deb libattr1 1:2.5.2-1build1.1 deb
libaudit-common 1:3.1.2-2.1build1 deb libaudit-common 1:3.1.2-2.1build1.1 deb
libaudit1 1:3.1.2-2.1build1 deb libaudit1 1:3.1.2-2.1build1.1 deb
libblkid1 2.39.3-9ubuntu6.1 deb libblkid1 2.39.3-9ubuntu6.4 deb
libbrotli1 1.1.0-2build2 deb libbrotli1 1.1.0-2build2 deb
libbsd0 0.12.1-1build1 deb libbsd0 0.12.1-1build1.1 deb
libbz2-1.0 1.0.8-5.1build0.1 deb libbz2-1.0 1.0.8-5.1build0.1 deb
libc-bin 2.39-0ubuntu8.3 deb libc-bin 2.39-0ubuntu8.7 deb
libc6 2.39-0ubuntu8.3 deb libc6 2.39-0ubuntu8.7 deb
libcap-ng0 0.8.4-2build2 deb libcap-ng0 0.8.4-2build2 deb
libcap2 1:2.66-5ubuntu2 deb libcap2 1:2.66-5ubuntu2.2 deb
libcom-err2 1.47.0-2.4~exp1ubuntu4.1 deb libcom-err2 1.47.0-2.4~exp1ubuntu4.1 deb
libcrypt1 1:4.4.36-4build1 deb libcrypt1 1:4.4.36-4build1 deb
libcurl4t64 8.5.0-2ubuntu10.4 deb libcurl4t64 8.5.0-2ubuntu10.6 deb
libdb5.3t64 5.3.28+dfsg2-7 deb libdb5.3t64 5.3.28+dfsg2-7 deb
libdebconfclient0 0.271ubuntu3 deb libdebconfclient0 0.271ubuntu3 deb
libedit2 3.1-20230828-1build1 deb libedit2 3.1-20230828-1build1 deb
libelf1t64 0.190-1.1build4 deb libelf1t64 0.190-1.1ubuntu0.1 deb
libexpat1 2.6.1-2ubuntu0.1 deb libexpat1 2.6.1-2ubuntu0.3 deb
libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1 deb libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1 deb
libffi8 3.4.6-1build1 deb libffi8 3.4.6-1build1 deb
libgcc-s1 14.2.0-4ubuntu2~24.04 deb libgcc-s1 14.2.0-4ubuntu2~24.04 deb
libgcrypt20 1.10.3-2build1 deb libgcrypt20 1.10.3-2build1 deb
libglib2.0-0t64 2.80.0-6ubuntu3.2 deb libglib2.0-0t64 2.80.0-6ubuntu3.8 deb
libglib2.0-data 2.80.0-6ubuntu3.2 deb libglib2.0-data 2.80.0-6ubuntu3.8 deb
libgmp10 2:6.3.0+dfsg-2ubuntu6 deb libgmp10 2:6.3.0+dfsg-2ubuntu6.1 deb
libgnutls30t64 3.8.3-1.1ubuntu3.2 deb libgnutls30t64 3.8.3-1.1ubuntu3.4 deb
libgomp1 14.2.0-4ubuntu2~24.04 deb libgomp1 14.2.0-4ubuntu2~24.04 deb
libgpg-error0 1.47-3build2 deb libgpg-error0 1.47-3build2.1 deb
libgssapi-krb5-2 1.20.1-6ubuntu2.1 deb libgssapi-krb5-2 1.20.1-6ubuntu2.6 deb
libhogweed6t64 3.9.1-2.2build1.1 deb libhogweed6t64 3.9.1-2.2build1.1 deb
libicu74 74.2-1ubuntu3.1 deb libicu74 74.2-1ubuntu3.1 deb
libidn2-0 2.3.7-2build1 deb libidn2-0 2.3.7-2build1.1 deb
libjpeg-turbo8 2.1.5-2ubuntu2 deb libjpeg-turbo8 2.1.5-2ubuntu2 deb
libjpeg8 8c-2ubuntu11 deb libjpeg8 8c-2ubuntu11 deb
libjq1 1.7.1-3build1 deb libjq1 1.7.1-3ubuntu0.24.04.1 deb
libk5crypto3 1.20.1-6ubuntu2.1 deb libk5crypto3 1.20.1-6ubuntu2.6 deb
libkeyutils1 1.6.3-3build1 deb libkeyutils1 1.6.3-3build1 deb
libkrb5-3 1.20.1-6ubuntu2.1 deb libkrb5-3 1.20.1-6ubuntu2.6 deb
libkrb5support0 1.20.1-6ubuntu2.1 deb libkrb5support0 1.20.1-6ubuntu2.6 deb
libksba8 1.6.6-1build1 deb libksba8 1.6.6-1build1 deb
libldap-common 2.6.7+dfsg-1~exp1ubuntu8 deb libldap-common 2.6.10+dfsg-0ubuntu0.24.04.1 deb
libldap2 2.6.7+dfsg-1~exp1ubuntu8 deb libldap2 2.6.10+dfsg-0ubuntu0.24.04.1 deb
libllvm18 1:18.1.3-1ubuntu1 deb libllvm18 1:18.1.3-1ubuntu1 deb
liblz4-1 1.9.4-1build1.1 deb liblz4-1 1.9.4-1build1.1 deb
liblzma5 5.6.1+really5.4.5-1build0.1 deb liblzma5 5.6.1+really5.4.5-1ubuntu0.2 deb
libmd0 1.1.0-2build1 deb libmd0 1.1.0-2build1.1 deb
libmount1 2.39.3-9ubuntu6.1 deb libmount1 2.39.3-9ubuntu6.4 deb
libncursesw6 6.4+20240113-1ubuntu2 deb libncursesw6 6.4+20240113-1ubuntu2 deb
libnettle8t64 3.9.1-2.2build1.1 deb libnettle8t64 3.9.1-2.2build1.1 deb
libnghttp2-14 1.59.0-1ubuntu0.1 deb libnghttp2-14 1.59.0-1ubuntu0.2 deb
libnpth0t64 1.6-3.1build1 deb libnpth0t64 1.6-3.1build1 deb
libonig5 6.9.9-1build1 deb libonig5 6.9.9-1build1 deb
libp11-kit0 0.25.3-4ubuntu2.1 deb libp11-kit0 0.25.3-4ubuntu2.1 deb
libpam-modules 1.5.3-5ubuntu5.1 deb libpam-modules 1.5.3-5ubuntu5.5 deb
libpam-modules-bin 1.5.3-5ubuntu5.1 deb libpam-modules-bin 1.5.3-5ubuntu5.5 deb
libpam-runtime 1.5.3-5ubuntu5.1 deb libpam-runtime 1.5.3-5ubuntu5.5 deb
libpam0g 1.5.3-5ubuntu5.1 deb libpam0g 1.5.3-5ubuntu5.5 deb
libpciaccess0 0.17-3build1 deb libpciaccess0 0.17-3ubuntu0.24.04.2 deb
libpcre2-8-0 10.42-4ubuntu2 deb libpcre2-8-0 10.42-4ubuntu2.1 deb
libproc2-0 2:4.0.4-4ubuntu3.2 deb libproc2-0 2:4.0.4-4ubuntu3.2 deb
libpsl5t64 0.21.2-1.1build1 deb libpsl5t64 0.21.2-1.1build1 deb
libreadline8t64 8.2-4build1 deb libreadline8t64 8.2-4build1 deb
@ -112,22 +112,22 @@ libsasl2-2 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 deb libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 deb libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 deb
libseccomp2 2.5.5-1ubuntu3.1 deb libseccomp2 2.5.5-1ubuntu3.1 deb
libselinux1 3.5-2ubuntu2 deb libselinux1 3.5-2ubuntu2.1 deb
libsemanage-common 3.5-1build5 deb libsemanage-common 3.5-1build5 deb
libsemanage2 3.5-1build5 deb libsemanage2 3.5-1build5 deb
libsepol2 3.5-2build1 deb libsepol2 3.5-2build1 deb
libsmartcols1 2.39.3-9ubuntu6.1 deb libsmartcols1 2.39.3-9ubuntu6.4 deb
libsqlite3-0 3.45.1-1ubuntu2 deb libsqlite3-0 3.45.1-1ubuntu2.5 deb
libss2 1.47.0-2.4~exp1ubuntu4.1 deb libss2 1.47.0-2.4~exp1ubuntu4.1 deb
libssh-4 0.10.6-2build2 deb libssh-4 0.10.6-2ubuntu0.2 deb
libssl3t64 3.0.13-0ubuntu3.4 deb libssl3t64 3.0.13-0ubuntu3.7 deb
libstdc++6 14.2.0-4ubuntu2~24.04 deb libstdc++6 14.2.0-4ubuntu2~24.04 deb
libsystemd0 255.4-1ubuntu8.4 deb libsystemd0 255.4-1ubuntu8.12 deb
libtasn1-6 4.19.0-3build1 deb libtasn1-6 4.19.0-3ubuntu0.24.04.2 deb
libtinfo6 6.4+20240113-1ubuntu2 deb libtinfo6 6.4+20240113-1ubuntu2 deb
libudev1 255.4-1ubuntu8.4 deb libudev1 255.4-1ubuntu8.12 deb
libunistring5 1.1-2build1 deb libunistring5 1.1-2build1.1 deb
libuuid1 2.39.3-9ubuntu6.1 deb libuuid1 2.39.3-9ubuntu6.4 deb
libv4l-0t64 1.26.1-4build3 deb libv4l-0t64 1.26.1-4build3 deb
libv4lconvert0t64 1.26.1-4build3 deb libv4lconvert0t64 1.26.1-4build3 deb
libwayland-client0 1.22.0-2.1build1 deb libwayland-client0 1.22.0-2.1build1 deb
@ -147,22 +147,22 @@ libxcb1 1.15-1ubuntu2 deb
libxdmcp6 1:1.1.3-0ubuntu6 deb libxdmcp6 1:1.1.3-0ubuntu6 deb
libxext6 2:1.3.4-1build2 deb libxext6 2:1.3.4-1build2 deb
libxfixes3 1:6.0.0-2build1 deb libxfixes3 1:6.0.0-2build1 deb
libxml2 2.9.14+dfsg-1.3ubuntu3 deb libxml2 2.9.14+dfsg-1.3ubuntu3.7 deb
libxshmfence1 1.3-1build5 deb libxshmfence1 1.3-1build5 deb
libxxhash0 0.8.2-2build1 deb libxxhash0 0.8.2-2build1 deb
libzstd1 1.5.5+dfsg2-2build1.1 deb libzstd1 1.5.5+dfsg2-2build1.1 deb
locales 2.39-0ubuntu8.3 deb locales 2.39-0ubuntu8.7 deb
login 1:4.13+dfsg1-4ubuntu3.2 deb login 1:4.13+dfsg1-4ubuntu3.2 deb
logsave 1.47.0-2.4~exp1ubuntu4.1 deb logsave 1.47.0-2.4~exp1ubuntu4.1 deb
mawk 1.3.4.20240123-1build1 deb mawk 1.3.4.20240123-1build1 deb
mount 2.39.3-9ubuntu6.1 deb mount 2.39.3-9ubuntu6.4 deb
ncurses-base 6.4+20240113-1ubuntu2 deb ncurses-base 6.4+20240113-1ubuntu2 deb
ncurses-bin 6.4+20240113-1ubuntu2 deb ncurses-bin 6.4+20240113-1ubuntu2 deb
netcat-openbsd 1.226-1ubuntu2 deb netcat-openbsd 1.226-1ubuntu2 deb
ocl-icd-libopencl1 2.3.2-1build1 deb ocl-icd-libopencl1 2.3.2-1build1 deb
openssl 3.0.13-0ubuntu3.4 deb openssl 3.0.13-0ubuntu3.7 deb
passwd 1:4.13+dfsg1-4ubuntu3.2 deb passwd 1:4.13+dfsg1-4ubuntu3.2 deb
perl-base 5.38.2-3.2build2 deb perl-base 5.38.2-3.2ubuntu0.2 deb
pinentry-curses 1.2.1-3ubuntu5 deb pinentry-curses 1.2.1-3ubuntu5 deb
procps 2:4.0.4-4ubuntu3.2 deb procps 2:4.0.4-4ubuntu3.2 deb
publicsuffix 20231001.0357-0.1 deb publicsuffix 20231001.0357-0.1 deb
@ -170,11 +170,12 @@ readline-common 8.2-4build1 deb
sed 4.9-2build1 deb sed 4.9-2build1 deb
sensible-utils 0.0.22 deb sensible-utils 0.0.22 deb
shared-mime-info 2.4-4 deb shared-mime-info 2.4-4 deb
systemd-standalone-sysusers 255.4-1ubuntu8.4 deb systemd-standalone-sysusers 255.4-1ubuntu8.12 deb
sysvinit-utils 3.08-6ubuntu3 deb sysvinit-utils 3.08-6ubuntu3 deb
tar 1.35+dfsg-3build1 deb tar 1.35+dfsg-3build1 deb
tzdata 2024a-3ubuntu1.1 deb tzdata 2025b-0ubuntu0.24.04.1 deb
ubuntu-keyring 2023.11.28.1 deb ubuntu-keyring 2023.11.28.1 deb
util-linux 2.39.3-9ubuntu6.1 deb unminimize 0.2.1 deb
util-linux 2.39.3-9ubuntu6.4 deb
xdg-user-dirs 0.18-1build1 deb xdg-user-dirs 0.18-1build1 deb
zlib1g 1:1.3.dfsg-3.1ubuntu2.1 deb zlib1g 1:1.3.dfsg-3.1ubuntu2.1 deb

View File

@ -2,6 +2,9 @@
# project information # project information
project_name: ffmpeg project_name: ffmpeg
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/ffmpeg.png"
project_blurb: A complete, cross-platform solution to record, convert and stream audio and video.
project_categories: "Media Tools"
full_custom_readme: | full_custom_readme: |
{% raw -%} {% raw -%}
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
@ -41,11 +44,11 @@ full_custom_readme: |
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/ffmpeg.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/ffmpeg) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/ffmpeg.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/ffmpeg)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/ffmpeg.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/ffmpeg) [![Docker Stars](https://img.shields.io/docker/stars/linuxserver/ffmpeg.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/ffmpeg)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-ffmpeg%2Fjob%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/master/) [![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-ffmpeg%2Fjob%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-ffmpeg/job/master/)
[FFmpeg](https://ffmpeg.org) - A complete, cross-platform solution to record, convert and stream audio and video. [FFmpeg](https://ffmpeg.org) - A complete, cross-platform solution to record, convert and stream audio and video.
[![ffmpeg](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/ffmpeg.png)](https://ffmpeg.org) [![ffmpeg](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/ffmpeg.png)](https://ffmpeg.org)
## Supported Architectures ## Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
@ -59,9 +62,9 @@ full_custom_readme: |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | | | armhf | ❌ | |
## Usage ## Usage
Unlike most of our container library this image is meant to be run ephemerally from the command line parsing user input for a custom FFmpeg command. You will need to understand some Docker basics to use this image and be familiar with how to construct an FFmpeg command. In the commands below we will be bind mounting our current working directory from the CLI to /config, the assumption is that input.mkv is in your current working directory. Unlike most of our container library this image is meant to be run ephemerally from the command line parsing user input for a custom FFmpeg command. You will need to understand some Docker basics to use this image and be familiar with how to construct an FFmpeg command. In the commands below we will be bind mounting our current working directory from the CLI to /config, the assumption is that input.mkv is in your current working directory.
If an input file is detected we will run FFmpeg as that user/group so the output file will match its permissions. If an input file is detected we will run FFmpeg as that user/group so the output file will match its permissions.
@ -93,7 +96,7 @@ full_custom_readme: |
``` ```
### Hardware accelerated (VAAPI) ([click for more info](https://trac.ffmpeg.org/wiki/Hardware/VAAPI)) ### Hardware accelerated (VAAPI) ([click for more info](https://trac.ffmpeg.org/wiki/Hardware/VAAPI))
```bash ```bash
docker run --rm -it \ docker run --rm -it \
--device=/dev/dri:/dev/dri \ --device=/dev/dri:/dev/dri \
@ -109,7 +112,7 @@ full_custom_readme: |
``` ```
### Hardware accelerated (QSV) ([click for more info](https://trac.ffmpeg.org/wiki/Hardware/QuickSync)) ### Hardware accelerated (QSV) ([click for more info](https://trac.ffmpeg.org/wiki/Hardware/QuickSync))
```bash ```bash
docker run --rm -it \ docker run --rm -it \
--device=/dev/dri:/dev/dri \ --device=/dev/dri:/dev/dri \
@ -187,6 +190,15 @@ full_custom_readme: |
## Versions ## Versions
* **06.01.26:** - Remove mpp from aarch64 build due to upstream DMCA removal. Bump harfbuzz, libdav1d, libdrm, libpng, libva, libvpl, mesa, opus, shaderc and vulkan-sdk.
* **01.12.25:** - Bump ffmpeg to 8.0.1.
* **19.11.25:** - Bump aom, freetype, harfbuzz, Intel drivers and libs, kvazaar, libdav1d, libdrm, mesa, mpp, openjpeg, shaderc, svt-av1 and vulkan-sdk.
* **23.08.25:** - Bump ffmpeg to 8.0. Bump harfbuzz, Intel drivers and libs, libdovi, libdrm, libpng, mesa, ogg, rav1e, shaderc, svt-av1, vulkan-sdk, webp and zimg.
* **06.08.25:** - Bump svt-av1.
* **07.06.25:** - Bump harfbuzz, libass, libdovi, libplacebo, libpng, mesa, rav1e, shaderc, libvpx and vulkan-sdk.
* **04.06.25:** - Add libdrm and rkmpp to arm64 image.
* **21.04.25:** - Bump aom, Intel drivers and libs, harfbuzz, mesa, svt-av1, libvpx, libtheora, vulkan-sdk and vvenc.
* **07.03.25:** - Bump ffmpeg to 7.1.1, Bump aom, fontconfig, Intel drivers and libs, harfbuzz, libdav1d, libdovi, libdrm, liblc3, libpng, mesa, openjpeg, shaderc, svt-av1, vulkan-sdk, vvenc and webp.
* **26.11.24:** - Bump libaom, mesa, rist, srt and libx265. * **26.11.24:** - Bump libaom, mesa, rist, srt and libx265.
* **07.11.24:** - Bump harfbuzz, Intel drivers and libs, libdav1d, mesa, svtav1, vpx, vulkan sdk and vvenc. * **07.11.24:** - Bump harfbuzz, Intel drivers and libs, libdav1d, mesa, svtav1, vpx, vulkan sdk and vvenc.
* **05.10.24:** - Add support for libvvenc on aarch64. Bump mesa. * **05.10.24:** - Add support for libvvenc on aarch64. Bump mesa.