diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 7043c71..8eb2a27 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -20,7 +20,7 @@ jobs: echo "**** External trigger running off of bin branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_FFMPEG_BIN\". ****" echo "External trigger running off of bin branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_FFMPEG_BIN\`" >> $GITHUB_STEP_SUMMARY echo "**** Retrieving external version ****" - EXT_RELEASE=$(echo 5.1.2) + EXT_RELEASE=$(echo 6.0) if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then echo "**** Can't retrieve external version, exiting ****" FAILURE_REASON="Can't retrieve external version for ffmpeg branch bin" diff --git a/Dockerfile b/Dockerfile index ddde4ed..2a9a4e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,29 +12,29 @@ ENV \ # versions ENV \ - AOM=v1.0.0 \ - FDKAAC=2.0.1 \ - FFMPEG_HARD=5.1.2 \ - FONTCONFIG=2.13.92 \ - FREETYPE=2.9.1 \ - FRIBIDI=1.0.8 \ - KVAZAAR=2.0.0 \ + AOM=v3.6.1 \ + FDKAAC=2.0.2 \ + FFMPEG_HARD=6.0 \ + FONTCONFIG=2.14.2 \ + FREETYPE=2.12.1 \ + FRIBIDI=1.0.13 \ + KVAZAAR=2.2.0 \ LAME=3.100 \ - LIBASS=0.14.0 \ - LIBDRM=2.4.114 \ - LIBVA=2.6.0 \ - LIBVDPAU=1.2 \ - LIBVIDSTAB=1.1.0 \ - LIBVMAF=master \ - NVCODEC=n9.1.23.1 \ - OGG=1.3.4 \ - OPENCOREAMR=0.1.5 \ - OPENJPEG=2.3.1 \ - OPUS=1.3 \ + LIBASS=0.17.1 \ + LIBDRM=2.4.115 \ + LIBVA=2.18.0 \ + LIBVDPAU=1.5 \ + LIBVIDSTAB=1.1.1 \ + LIBVMAF=2.3.1 \ + NVCODEC=n12.0.16.0 \ + OGG=1.3.5 \ + OPENCOREAMR=0.1.6 \ + OPENJPEG=2.5.0 \ + OPUS=1.3.1 \ THEORA=1.1.1 \ - VORBIS=1.3.6 \ - VPX=1.10.0 \ - X265=3.4 \ + VORBIS=1.3.7 \ + VPX=1.13.0 \ + X265=3.5 \ XVID=1.3.7 RUN \ @@ -55,6 +55,7 @@ RUN \ libxext-dev \ libgcc-10-dev \ libgomp1 \ + libharfbuzz-dev \ libpciaccess-dev \ libssl-dev \ libtool \ @@ -67,15 +68,18 @@ RUN \ ocl-icd-opencl-dev \ perl \ pkg-config \ - python3 \ - python3-pip\ - python3-setuptools \ - python3-wheel \ + python3-venv \ x11proto-xext-dev \ xserver-xorg-dev \ + xxd \ yasm \ zlib1g-dev && \ - pip3 install meson + python3 -m venv /lsiopy && \ + pip install -U --no-cache-dir \ + pip \ + setuptools \ + wheel && \ + pip install --no-cache-dir meson # compile 3rd party libs RUN \ @@ -228,9 +232,10 @@ RUN \ RUN \ echo "**** compiling libdrm ****" && \ cd /tmp/libdrm && \ - meson \ - -Dvalgrind=disabled \ - . build && \ + meson setup \ + --prefix=/usr --libdir=/usr/local/lib/x86_64-linux-gnu \ + -Dvalgrind=disabled \ + . build && \ ninja -C build && \ ninja -C build install RUN \ @@ -252,29 +257,30 @@ RUN \ echo "**** grabbing libvdpau ****" && \ mkdir -p /tmp/libvdpau && \ git clone \ - --branch libvdpau-${LIBVDPAU} \ + --branch ${LIBVDPAU} \ --depth 1 https://gitlab.freedesktop.org/vdpau/libvdpau.git \ /tmp/libvdpau RUN \ echo "**** compiling libvdpau ****" && \ cd /tmp/libvdpau && \ - ./autogen.sh && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install + meson setup \ + --prefix=/usr --libdir=/usr/local/lib \ + -Ddocumentation=false \ + build && \ + ninja -C build install RUN \ echo "**** grabbing vmaf ****" && \ mkdir -p /tmp/vmaf && \ - git clone \ - --branch ${LIBVMAF} \ - https://github.com/Netflix/vmaf.git \ - /tmp/vmaf + curl -Lf \ + https://github.com/Netflix/vmaf/archive/refs/tags/v${LIBVMAF}.tar.gz | \ + tar -zx --strip-components=1 -C /tmp/vmaf RUN \ echo "**** compiling libvmaf ****" && \ cd /tmp/vmaf/libvmaf && \ - meson build --buildtype release && \ + meson setup \ + --prefix=/usr --libdir=/usr/local/lib \ + --buildtype release \ + build && \ ninja -vC build && \ ninja -vC build install RUN \ @@ -433,7 +439,7 @@ RUN \ echo "**** grabbing x265 ****" && \ mkdir -p /tmp/x265 && \ curl -Lf \ - http://anduin.linuxfromscratch.org/BLFS/x265/x265_${X265}.tar.gz | \ + https://bitbucket.org/multicoreware/x265_git/downloads/x265_${X265}.tar.gz | \ tar -zx --strip-components=1 -C /tmp/x265 RUN \ echo "**** compiling x265 ****" && \ @@ -514,7 +520,7 @@ RUN \ ldconfig && \ mkdir -p \ /buildout/usr/local/bin \ - /buildout/usr/lib/x86_64-linux-gnu \ + /buildout/usr/local/lib/x86_64-linux-gnu \ /buildout/etc/OpenCL/vendors && \ cp \ /tmp/ffmpeg/ffmpeg \ @@ -522,12 +528,12 @@ RUN \ cp \ /tmp/ffmpeg/ffprobe \ /buildout/usr/local/bin && \ - ldd /tmp/ffmpeg/ffmpeg \ - | awk '/local/ {print $3}' \ - | xargs -i cp -L {} /buildout/usr/lib/ && \ cp -a \ - /usr/local/lib/x86_64-linux-gnu/libdrm_* \ - /buildout/usr/lib/x86_64-linux-gnu/ && \ + /usr/local/lib/lib*so* \ + /buildout/usr/local/lib/ && \ + cp -a \ + /usr/local/lib/x86_64-linux-gnu/lib*so* \ + /buildout/usr/local/lib/x86_64-linux-gnu/ && \ echo \ 'libnvidia-opencl.so.1' > \ /buildout/etc/OpenCL/vendors/nvidia.icd diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 965aca1..6bc9639 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -12,28 +12,29 @@ ENV \ # versions ENV \ - AOM=v1.0.0 \ - FDKAAC=2.0.1 \ - FFMPEG_HARD=5.1.2 \ - FREETYPE=2.9.1 \ - FRIBIDI=1.0.8 \ - KVAZAAR=2.0.0 \ + AOM=v3.6.1 \ + FDKAAC=2.0.2 \ + FFMPEG_HARD=6.0 \ + FREETYPE=2.12.1 \ + FRIBIDI=1.0.13 \ + KVAZAAR=2.2.0 \ LAME=3.100 \ - LIBASS=0.14.0 \ - LIBDRM=2.4.114 \ - LIBVA=2.6.0 \ - LIBVDPAU=1.2 \ - LIBVIDSTAB=1.1.0 \ - NVCODEC=n9.1.23.1 \ - OGG=1.3.4 \ - OPENCOREAMR=0.1.5 \ - OPENJPEG=2.3.1 \ - OPUS=1.3 \ + LIBASS=0.17.1 \ + LIBDRM=2.4.115 \ + LIBVA=2.18.0 \ + LIBVDPAU=1.5 \ + LIBVIDSTAB=1.1.1 \ + NVCODEC=n12.0.16.0 \ + OGG=1.3.5 \ + OPENCOREAMR=0.1.6 \ + OPENJPEG=2.5.0 \ + OPUS=1.3.1 \ THEORA=1.1.1 \ - VORBIS=1.3.6 \ - VPX=1.10.0 \ - X265=3.3 \ + VORBIS=1.3.7 \ + VPX=1.13.0 \ + X265=master \ XVID=1.3.7 +# x265 aarch64 build fixes not in a release yet https://bitbucket.org/multicoreware/x265_git/issues/604/linux-arm-aarch64-build-failing-for-high RUN \ echo "**** install build packages ****" && \ @@ -53,6 +54,7 @@ RUN \ libxext-dev \ libgcc-10-dev \ libgomp1 \ + libharfbuzz-dev \ libpciaccess-dev \ libssl-dev \ libtool \ @@ -63,9 +65,10 @@ RUN \ nasm \ perl \ pkg-config \ - python3 \ + python3-venv \ x11proto-xext-dev \ xserver-xorg-dev \ + xxd \ yasm \ zlib1g-dev @@ -342,9 +345,10 @@ RUN \ RUN \ echo "**** grabbing x265 ****" && \ mkdir -p /tmp/x265 && \ - curl -Lf \ - https://github.com/videolan/x265/archive/refs/tags/${X265}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/x265 + git clone \ + --branch ${X265} \ + https://bitbucket.org/multicoreware/x265_git.git \ + /tmp/x265 RUN \ echo "**** compiling x265 ****" && \ cd /tmp/x265/build/linux && \ @@ -416,17 +420,18 @@ RUN \ RUN \ echo "**** arrange files ****" && \ ldconfig && \ - mkdir -p /buildout/usr/local/bin && \ + mkdir -p \ + /buildout/usr/local/bin \ + /buildout/usr/local/lib && \ cp \ /tmp/ffmpeg/ffmpeg \ /buildout/usr/local/bin && \ cp \ /tmp/ffmpeg/ffprobe \ /buildout/usr/local/bin && \ - mkdir -p /buildout/usr/lib && \ - ldd /tmp/ffmpeg/ffmpeg \ - | awk '/local/ {print $3}' \ - | xargs -i cp -L {} /buildout/usr/lib/ + cp -a \ + /usr/local/lib/lib*so* \ + /buildout/usr/local/lib/ # Storage layer consumed downstream FROM scratch diff --git a/Dockerfile.armhf b/Dockerfile.armhf deleted file mode 100644 index 4d3261c..0000000 --- a/Dockerfile.armhf +++ /dev/null @@ -1,451 +0,0 @@ -# syntax=docker/dockerfile:1 - -FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-jammy as buildstage - -# set version label -ARG FFMPEG_VERSION - -# common env -ENV \ - DEBIAN_FRONTEND="noninteractive" \ - MAKEFLAGS="-j4" - -# versions -ENV \ - AOM=v1.0.0 \ - FDKAAC=2.0.1 \ - FFMPEG_HARD=5.1.2 \ - FREETYPE=2.9.1 \ - FRIBIDI=1.0.8 \ - KVAZAAR=2.0.0 \ - LAME=3.100 \ - LIBASS=0.14.0 \ - LIBDRM=2.4.114 \ - LIBVA=2.6.0 \ - LIBVDPAU=1.2 \ - LIBVIDSTAB=1.1.0 \ - NVCODEC=n9.1.23.1 \ - OGG=1.3.4 \ - OPENCOREAMR=0.1.5 \ - OPENJPEG=2.3.1 \ - OPUS=1.3 \ - THEORA=1.1.1 \ - VORBIS=1.3.6 \ - VPX=1.10.0 \ - X265=3.4 \ - XVID=1.3.7 - -RUN \ - echo "**** install build packages ****" && \ - apt-get update && \ - apt-get install -y \ - autoconf \ - automake \ - bzip2 \ - cmake \ - diffutils \ - g++ \ - gcc \ - git \ - gperf \ - libexpat1-dev \ - libfontconfig1-dev \ - libxext-dev \ - libgcc-10-dev \ - libgomp1 \ - libpciaccess-dev \ - libssl-dev \ - libtool \ - libv4l-dev \ - libx11-dev \ - libxml2-dev \ - make \ - nasm \ - perl \ - pkg-config \ - python3 \ - x11proto-xext-dev \ - xserver-xorg-dev \ - yasm \ - zlib1g-dev - -# compile 3rd party libs -RUN \ - echo "**** grabbing aom ****" && \ - mkdir -p /tmp/aom && \ - git clone \ - --branch ${AOM} \ - --depth 1 https://aomedia.googlesource.com/aom \ - /tmp/aom -RUN \ - echo "**** compiling aom ****" && \ - cd /tmp/aom && \ - rm -rf \ - CMakeCache.txt \ - CMakeFiles && \ - mkdir -p \ - aom_build && \ - cd aom_build && \ - cmake \ - -DAOM_TARGET_CPU=generic \ - -DBUILD_STATIC_LIBS=0 .. && \ - make && \ - make install -RUN \ - echo "**** grabbing fdk-aac ****" && \ - mkdir -p /tmp/fdk-aac && \ - curl -Lf \ - https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/fdk-aac -RUN \ - echo "**** compiling fdk-aac ****" && \ - cd /tmp/fdk-aac && \ - autoreconf -fiv && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install - RUN \ - echo "**** grabbing freetype ****" && \ - mkdir -p /tmp/freetype && \ - curl -Lf \ - https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/freetype -RUN \ - echo "**** compiling freetype ****" && \ - cd /tmp/freetype && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install - RUN \ - echo "**** grabbing fribidi ****" && \ - mkdir -p /tmp/fribidi && \ - curl -Lf \ - https://github.com/fribidi/fribidi/archive/v${FRIBIDI}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/fribidi -RUN \ - echo "**** compiling fribidi ****" && \ - cd /tmp/fribidi && \ - ./autogen.sh && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make -j 1 && \ - make install - RUN \ - echo "**** grabbing kvazaar ****" && \ - mkdir -p /tmp/kvazaar && \ - curl -Lf \ - https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/kvazaar - RUN \ - echo "**** compiling kvazaar ****" && \ - cd /tmp/kvazaar && \ - ./autogen.sh && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing lame ****" && \ - mkdir -p /tmp/lame && \ - curl -Lf \ - http://downloads.sourceforge.net/project/lame/lame/3.100/lame-${LAME}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/lame -RUN \ - echo "**** compiling lame ****" && \ - cd /tmp/lame && \ - cp \ - /usr/share/automake-1.16/config.guess \ - config.guess && \ - cp \ - /usr/share/automake-1.16/config.sub \ - config.sub && \ - ./configure \ - --disable-frontend \ - --disable-static \ - --enable-nasm \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing libass ****" && \ - mkdir -p /tmp/libass && \ - curl -Lf \ - https://github.com/libass/libass/archive/${LIBASS}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/libass -RUN \ - echo "**** compiling libass ****" && \ - cd /tmp/libass && \ - ./autogen.sh && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing ogg ****" && \ - mkdir -p /tmp/ogg && \ - curl -Lf \ - http://downloads.xiph.org/releases/ogg/libogg-${OGG}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/ogg -RUN \ - echo "**** compiling ogg ****" && \ - cd /tmp/ogg && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing opencore-amr ****" && \ - mkdir -p /tmp/opencore-amr && \ - curl -Lf \ - http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/opencore-amr -RUN \ - echo "**** compiling opencore-amr ****" && \ - cd /tmp/opencore-amr && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing openjpeg ****" && \ - mkdir -p /tmp/openjpeg && \ - curl -Lf \ - https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/openjpeg -RUN \ - echo "**** compiling openjpeg ****" && \ - cd /tmp/openjpeg && \ - rm -Rf \ - thirdparty/libpng/* && \ - curl -Lf \ - https://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz | \ - tar -zx --strip-components=1 -C thirdparty/libpng/ && \ - cmake \ - -DBUILD_STATIC_LIBS=0 \ - -DBUILD_THIRDPARTY:BOOL=ON . && \ - make && \ - make install -RUN \ - echo "**** grabbing opus ****" && \ - mkdir -p /tmp/opus && \ - curl -Lf \ - https://archive.mozilla.org/pub/opus/opus-${OPUS}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/opus -RUN \ - echo "**** compiling opus ****" && \ - cd /tmp/opus && \ - autoreconf -fiv && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing theora ****" && \ - mkdir -p /tmp/theora && \ - curl -Lf \ - http://downloads.xiph.org/releases/theora/libtheora-${THEORA}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/theora -RUN \ - echo "**** compiling 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 \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing vid.stab ****" && \ - mkdir -p /tmp/vid.stab && \ - curl -Lf \ - https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/vid.stab -RUN \ - echo "**** compiling vid.stab ****" && \ - cd /tmp/vid.stab && \ - echo "" > \ - CMakeModules/FindSSE.cmake && \ - cmake . && \ - make && \ - make install -RUN \ - echo "**** grabbing vorbis ****" && \ - mkdir -p /tmp/vorbis && \ - curl -Lf \ - http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/vorbis -RUN \ - echo "**** compiling vorbis ****" && \ - cd /tmp/vorbis && \ - ./configure \ - --disable-static \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing vpx ****" && \ - mkdir -p /tmp/vpx && \ - curl -Lf \ - https://github.com/webmproject/libvpx/archive/v${VPX}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/vpx -RUN \ - echo "**** compiling vpx ****" && \ - cd /tmp/vpx && \ - LDFLAGS=-mfloat-abi=hard ./configure \ - --disable-debug \ - --disable-docs \ - --disable-examples \ - --disable-install-bins \ - --disable-static \ - --disable-unit-tests \ - --enable-pic \ - --enable-shared \ - --enable-vp8 \ - --enable-vp9 \ - --enable-vp9-highbitdepth \ - --extra-cflags="-mfloat-abi=hard" \ - --extra-cxxflags="-mfloat-abi=hard" && \ - make && \ - make install -RUN \ - echo "**** grabbing x264 ****" && \ - mkdir -p /tmp/x264 && \ - curl -Lf \ - https://code.videolan.org/videolan/x264/-/archive/master/x264-stable.tar.bz2 | \ - tar -jx --strip-components=1 -C /tmp/x264 -RUN \ - echo "**** compiling x264 ****" && \ - cd /tmp/x264 && \ - ./configure \ - --disable-cli \ - --disable-static \ - --enable-pic \ - --enable-shared && \ - make && \ - make install -RUN \ - echo "**** grabbing x265 ****" && \ - mkdir -p /tmp/x265 && \ - curl -Lf \ - http://anduin.linuxfromscratch.org/BLFS/x265/x265_${X265}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/x265 -RUN \ - echo "**** compiling x265 ****" && \ - cd /tmp/x265/build/linux && \ - curl -fL \ - https://sources.debian.org/data/main/x/x265/3.4-2/debian/patches/0001-Fix-arm-flags.patch \ - > arm.patch && \ - patch ../../source/CMakeLists.txt < arm.patch && \ - cmake \ - -D ENABLE_ASSEMBLY=OFF \ - -D ENABLE_CLI=OFF \ - -G "Unix Makefiles" ../../source && \ - make && \ - make install -RUN \ - echo "**** grabbing xvid ****" && \ - mkdir -p /tmp/xvid && \ - curl -Lf \ - https://downloads.xvid.com/downloads/xvidcore-${XVID}.tar.gz | \ - tar -zx --strip-components=1 -C /tmp/xvid - RUN \ - echo "**** compiling xvid ****" && \ - cd /tmp/xvid/build/generic && \ - ./configure && \ - make && \ - make install - -# main ffmpeg build -RUN \ - echo "**** Versioning ****" && \ - if [ -z ${FFMPEG_VERSION+x} ]; then \ - FFMPEG=${FFMPEG_HARD}; \ - else \ - FFMPEG=${FFMPEG_VERSION}; \ - fi && \ - echo "**** grabbing ffmpeg ****" && \ - mkdir -p /tmp/ffmpeg && \ - echo "https://ffmpeg.org/releases/ffmpeg-${FFMPEG}.tar.bz2" && \ - curl -Lf \ - https://ffmpeg.org/releases/ffmpeg-${FFMPEG}.tar.bz2 | \ - tar -jx --strip-components=1 -C /tmp/ffmpeg -RUN \ - echo "**** compiling ffmpeg ****" && \ - cd /tmp/ffmpeg && \ - ./configure \ - --disable-debug \ - --disable-doc \ - --disable-ffplay \ - --enable-ffprobe \ - --enable-gpl \ - --enable-libaom \ - --enable-libass \ - --enable-libfdk_aac \ - --enable-libfreetype \ - --enable-libkvazaar \ - --enable-libmp3lame \ - --enable-libopencore-amrnb \ - --enable-libopencore-amrwb \ - --enable-libopenjpeg \ - --enable-libopus \ - --enable-libtheora \ - --enable-libv4l2 \ - --enable-libvidstab \ - --enable-libvorbis \ - --enable-libvpx \ - --enable-libxml2 \ - --enable-libx264 \ - --enable-libx265 \ - --enable-libxvid \ - --enable-nonfree \ - --enable-openssl \ - --enable-small \ - --enable-stripping \ - --enable-version3 && \ - make - -RUN \ - echo "**** arrange files ****" && \ - ldconfig && \ - mkdir -p /buildout/usr/local/bin && \ - cp \ - /tmp/ffmpeg/ffmpeg \ - /buildout/usr/local/bin && \ - cp \ - /tmp/ffmpeg/ffprobe \ - /buildout/usr/local/bin && \ - mkdir -p /buildout/usr/lib && \ - ldd /tmp/ffmpeg/ffmpeg \ - | awk '/local/ {print $3}' \ - | xargs -i cp -L {} /buildout/usr/lib/ - -# Storage layer consumed downstream -FROM scratch - -# set version label -ARG BUILD_DATE -ARG VERSION -LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" -LABEL maintainer="thelamer" - -# Add files from buildstage -COPY --from=buildstage /buildout/ / diff --git a/Jenkinsfile b/Jenkinsfile index a077ed9..a27d1be 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -103,7 +103,7 @@ pipeline { steps{ script{ env.EXT_RELEASE = sh( - script: ''' echo 5.1.2 ''', + script: ''' echo 6.0 ''', returnStdout: true).trim() env.RELEASE_LINK = 'custom_command' } @@ -156,7 +156,7 @@ pipeline { env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-bin-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-bin-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-bin-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + env.CI_TAGS = 'amd64-bin-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-bin-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } else { env.CI_TAGS = 'bin-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } @@ -179,7 +179,7 @@ pipeline { env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.CI_TAGS = 'amd64-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA } else { env.CI_TAGS = 'bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA } @@ -202,7 +202,7 @@ pipeline { env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm32v7-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + env.CI_TAGS = 'amd64-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST } else { env.CI_TAGS = 'bin-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST } @@ -485,44 +485,6 @@ pipeline { --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." } } - stage('Build ARMHF') { - agent { - label 'ARMHF-NATIVE' - } - steps { - echo "Running on node: ${NODE_NAME}" - echo 'Logging into Github' - sh '''#! /bin/bash - echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin - ''' - sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.armhf" - sh "docker buildx build \ - --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ - --label \"org.opencontainers.image.authors=linuxserver.io\" \ - --label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-ffmpeg/packages\" \ - --label \"org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-ffmpeg\" \ - --label \"org.opencontainers.image.source=https://github.com/linuxserver/docker-ffmpeg\" \ - --label \"org.opencontainers.image.version=${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}\" \ - --label \"org.opencontainers.image.revision=${COMMIT_SHA}\" \ - --label \"org.opencontainers.image.vendor=linuxserver.io\" \ - --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ - --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ - --label \"org.opencontainers.image.title=Ffmpeg\" \ - --label \"org.opencontainers.image.description=ffmpeg image by linuxserver.io\" \ - --no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} --platform=linux/arm/v7 \ - --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." - sh "docker tag ${IMAGE}:arm32v7-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}" - retry(5) { - sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}" - } - sh '''#! /bin/bash - containers=$(docker ps -aq) - if [[ -n "${containers}" ]]; then - docker stop ${containers} - fi - docker system prune -af --volumes || : ''' - } - } stage('Build ARM64') { agent { label 'ARM64' @@ -585,9 +547,7 @@ pipeline { set -e docker pull ghcr.io/linuxserver/ci:latest if [ "${MULTIARCH}" == "true" ]; then - docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} - docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} fi docker run --rm \ @@ -690,8 +650,6 @@ pipeline { echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin if [ "${CI}" == "false" ]; then - docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} - docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} fi @@ -699,49 +657,47 @@ pipeline { docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-bin docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} - docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} - docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-bin - docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-bin docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} if [ -n "${SEMVER}" ]; then docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER} - docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER} docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER} fi docker push ${MANIFESTIMAGE}:amd64-${META_TAG} docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:amd64-bin - docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG} - docker push ${MANIFESTIMAGE}:arm32v7-bin - docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker push ${MANIFESTIMAGE}:arm64v8-bin docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} if [ -n "${SEMVER}" ]; then docker push ${MANIFESTIMAGE}:amd64-${SEMVER} - docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER} docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER} fi docker manifest push --purge ${MANIFESTIMAGE}:bin || : - docker manifest create ${MANIFESTIMAGE}:bin ${MANIFESTIMAGE}:amd64-bin ${MANIFESTIMAGE}:arm32v7-bin ${MANIFESTIMAGE}:arm64v8-bin - docker manifest annotate ${MANIFESTIMAGE}:bin ${MANIFESTIMAGE}:arm32v7-bin --os linux --arch arm + docker manifest create ${MANIFESTIMAGE}:bin ${MANIFESTIMAGE}:amd64-bin ${MANIFESTIMAGE}:arm64v8-bin docker manifest annotate ${MANIFESTIMAGE}:bin ${MANIFESTIMAGE}:arm64v8-bin --os linux --arch arm64 --variant v8 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || : - docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} - docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} --os linux --arch arm + docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} || : - docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} - docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm + docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8 if [ -n "${SEMVER}" ]; then docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || : - docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} - docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm + docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8 fi + token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token') + digest=$(curl -s \ + --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + --header "Authorization: Bearer ${token}" \ + "https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-bin") + if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then + docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-bin || : + docker manifest create ${MANIFESTIMAGE}:arm32v7-bin ${MANIFESTIMAGE}:amd64-bin + docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-bin + fi docker manifest push --purge ${MANIFESTIMAGE}:bin docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} diff --git a/jenkins-vars.yml b/jenkins-vars.yml index a73a2a9..240258c 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -2,12 +2,12 @@ # jenkins variables project_name: docker-ffmpeg external_type: na -custom_version_command: "echo 5.1.2" +custom_version_command: "echo 6.0" release_type: prerelease release_tag: bin ls_branch: bin skip_package_check: true -armhf_native: true +build_armhf: false repo_vars: - BUILD_VERSION_ARG = 'FFMPEG_VERSION' - LS_USER = 'linuxserver'