diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 28e1793..dcda628 100755 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -20,7 +20,7 @@ jobs: echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_FFMPEG_MASTER\". ****" echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_FFMPEG_MASTER\`" >> $GITHUB_STEP_SUMMARY echo "**** Retrieving external version ****" - EXT_RELEASE=$(echo 5.1.2-cli) + EXT_RELEASE=$(echo 6.0-cli) 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 master" diff --git a/Dockerfile b/Dockerfile index e86bdee..3028f6a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,590 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/ffmpeg:bin as binstage +# build stage +FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy as buildstage + +# set version label +ARG FFMPEG_VERSION + +# common env +ENV \ + DEBIAN_FRONTEND="noninteractive" \ + MAKEFLAGS="-j4" + +# versions +ENV \ + AOM=v3.6.1 \ + FDKAAC=2.0.2 \ + FFMPEG_HARD=6.0 \ + FONTCONFIG=2.14.2 \ + FREETYPE=2.12.1 \ + FRIBIDI=1.0.13 \ + GMMLIB=22.3.5 \ + IHD=23.1.6 \ + KVAZAAR=2.2.0 \ + LAME=3.100 \ + 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.7 \ + VPX=1.13.0 \ + X265=3.5 \ + XVID=1.3.7 + +RUN \ + echo "**** install build packages ****" && \ + apt-get update && \ + apt-get install -y \ + autoconf \ + automake \ + bzip2 \ + cmake \ + diffutils \ + doxygen \ + g++ \ + gcc \ + git \ + gperf \ + libexpat1-dev \ + libxext-dev \ + libgcc-10-dev \ + libgomp1 \ + libharfbuzz-dev \ + libpciaccess-dev \ + libssl-dev \ + libtool \ + libv4l-dev \ + libx11-dev \ + libxml2-dev \ + make \ + nasm \ + ninja-build \ + ocl-icd-opencl-dev \ + perl \ + pkg-config \ + python3-venv \ + x11proto-xext-dev \ + xserver-xorg-dev \ + xxd \ + yasm \ + zlib1g-dev && \ + python3 -m venv /lsiopy && \ + pip install -U --no-cache-dir \ + pip \ + setuptools \ + wheel && \ + pip install --no-cache-dir meson + +# 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 \ + -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 ffnvcodec ****" && \ + mkdir -p /tmp/ffnvcodec && \ + git clone \ + --branch ${NVCODEC} \ + --depth 1 https://git.videolan.org/git/ffmpeg/nv-codec-headers.git \ + /tmp/ffnvcodec +RUN \ + echo "**** compiling ffnvcodec ****" && \ + cd /tmp/ffnvcodec && \ + 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 fontconfig ****" && \ + mkdir -p /tmp/fontconfig && \ + curl -Lf \ + https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG}.tar.gz | \ + tar -zx --strip-components=1 -C /tmp/fontconfig +RUN \ + echo "**** compiling fontconfig ****" && \ + cd /tmp/fontconfig && \ + ./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 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/x86_64-linux-gnu \ + -Dvalgrind=disabled \ + . build && \ + ninja -C build && \ + ninja -C build install && \ + strip -d /usr/local/lib/x86_64-linux-gnu/libdrm*.so +RUN \ + echo "**** grabbing libva ****" && \ + mkdir -p /tmp/libva && \ + curl -Lf \ + https://github.com/intel/libva/archive/${LIBVA}.tar.gz | \ + tar -zx --strip-components=1 -C /tmp/libva +RUN \ + echo "**** compiling libva ****" && \ + cd /tmp/libva && \ + ./autogen.sh && \ + ./configure \ + --disable-static \ + --enable-shared && \ + make && \ + make install && \ + strip -d /usr/local/lib/libva.so && \ + strip -d /usr/local/lib/libva-drm.so +RUN \ + echo "**** grabbing gmmlib ****" && \ + mkdir -p /tmp/gmmlib && \ + curl -Lf \ + https://github.com/intel/gmmlib/archive/refs/tags/intel-gmmlib-${GMMLIB}.tar.gz | \ + tar -zx --strip-components=1 -C /tmp/gmmlib +RUN \ + echo "**** compiling gmmlib ****" && \ + mkdir -p /tmp/gmmlib/build && \ + cd /tmp/gmmlib/build && \ + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + .. && \ + make && \ + make install && \ + strip -d /usr/local/lib/libigdgmm.so +RUN \ + echo "**** grabbing IHD ****" && \ + mkdir -p /tmp/ihd && \ + curl -Lf \ + https://github.com/intel/media-driver/archive/refs/tags/intel-media-${IHD}.tar.gz | \ + tar -zx --strip-components=1 -C /tmp/ihd +RUN \ + echo "**** compiling IHD ****" && \ + mkdir -p /tmp/ihd/build && \ + cd /tmp/ihd/build && \ + cmake \ + -DLIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri/ \ + .. && \ + make && \ + make install && \ + strip -d /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so +RUN \ + echo "**** grabbing libvdpau ****" && \ + mkdir -p /tmp/libvdpau && \ + git clone \ + --branch ${LIBVDPAU} \ + --depth 1 https://gitlab.freedesktop.org/vdpau/libvdpau.git \ + /tmp/libvdpau +RUN \ + echo "**** compiling libvdpau ****" && \ + cd /tmp/libvdpau && \ + meson setup \ + --prefix=/usr --libdir=/usr/local/lib \ + -Ddocumentation=false \ + build && \ + ninja -C build install && \ + strip -d /usr/local/lib/libvdpau.so +RUN \ + echo "**** grabbing vmaf ****" && \ + mkdir -p /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 setup \ + --prefix=/usr --libdir=/usr/local/lib \ + --buildtype release \ + build && \ + ninja -vC build && \ + ninja -vC build 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 && \ + cmake \ + -DBUILD_STATIC_LIBS=0 . && \ + 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 && \ + ./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 && \ + 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 \ + https://bitbucket.org/multicoreware/x265_git/downloads/x265_${X265}.tar.gz | \ + tar -zx --strip-components=1 -C /tmp/x265 +RUN \ + echo "**** compiling x265 ****" && \ + cd /tmp/x265/build/linux && \ + ./multilib.sh && \ + make -C 8bit 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%-cli}; \ + 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-cuvid \ + --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-libvmaf \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libxml2 \ + --enable-libx264 \ + --enable-libx265 \ + --enable-libxvid \ + --enable-nonfree \ + --enable-nvdec \ + --enable-nvenc \ + --enable-opencl \ + --enable-openssl \ + --enable-small \ + --enable-stripping \ + --enable-vaapi \ + --enable-vdpau \ + --enable-version3 && \ + make + +RUN \ + echo "**** arrange files ****" && \ + ldconfig && \ + mkdir -p \ + /buildout/usr/local/bin \ + /buildout/usr/local/lib/x86_64-linux-gnu/dri \ + /buildout/etc/OpenCL/vendors && \ + cp \ + /tmp/ffmpeg/ffmpeg \ + /buildout/usr/local/bin && \ + cp \ + /tmp/ffmpeg/ffprobe \ + /buildout/usr/local/bin && \ + cp -a \ + /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/ && \ + cp -a \ + /usr/lib/x86_64-linux-gnu/dri/*.so \ + /buildout/usr/local/lib/x86_64-linux-gnu/dri/ && \ + echo \ + 'libnvidia-opencl.so.1' > \ + /buildout/etc/OpenCL/vendors/nvidia.icd + +# runtime stage FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy # Add files from binstage -COPY --from=binstage / / +COPY --from=buildstage /buildout/ / # set version label ARG BUILD_DATE @@ -16,7 +596,7 @@ ARG DEBIAN_FRONTEND="noninteractive" # hardware env ENV \ - LIBVA_DRIVERS_PATH="/usr/lib/x86_64-linux-gnu/dri" \ + LIBVA_DRIVERS_PATH="/usr/local/lib/x86_64-linux-gnu/dri" \ NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" \ NVIDIA_VISIBLE_DEVICES="all" @@ -24,9 +604,7 @@ RUN \ echo "**** install runtime ****" && \ apt-get update && \ apt-get install -y \ - i965-va-driver \ libexpat1 \ - libgl1-mesa-dri \ libglib2.0-0 \ libgomp1 \ libharfbuzz0b \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 40c549f..b7dc0cd 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,10 +1,444 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/ffmpeg:arm64v8-bin as binstage +# build stage +FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy as buildstage + +# set version label +ARG FFMPEG_VERSION + +# common env +ENV \ + DEBIAN_FRONTEND="noninteractive" \ + MAKEFLAGS="-j4" + +# versions +ENV \ + 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.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.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 ****" && \ + 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 \ + libharfbuzz-dev \ + libpciaccess-dev \ + libssl-dev \ + libtool \ + libv4l-dev \ + libx11-dev \ + libxml2-dev \ + make \ + nasm \ + perl \ + pkg-config \ + python3-venv \ + x11proto-xext-dev \ + xserver-xorg-dev \ + xxd \ + 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 \ + -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 && \ + ./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 && \ + 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 && \ + git clone \ + --branch ${X265} \ + https://bitbucket.org/multicoreware/x265_git.git \ + /tmp/x265 +RUN \ + echo "**** compiling x265 ****" && \ + cd /tmp/x265/build/linux && \ + export CXXFLAGS="-fPIC" && \ + ./multilib.sh && \ + make -C 8bit 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%-cli}; \ + 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 \ + /buildout/usr/local/lib && \ + cp \ + /tmp/ffmpeg/ffmpeg \ + /buildout/usr/local/bin && \ + cp \ + /tmp/ffmpeg/ffprobe \ + /buildout/usr/local/bin && \ + cp -a \ + /usr/local/lib/lib*so* \ + /buildout/usr/local/lib/ + +# runtime stage FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy # Add files from binstage -COPY --from=binstage / / +COPY --from=buildstage /buildout/ / # set version label ARG BUILD_DATE diff --git a/Dockerfile.armhf b/Dockerfile.armhf deleted file mode 100644 index cfc5639..0000000 --- a/Dockerfile.armhf +++ /dev/null @@ -1,38 +0,0 @@ -# syntax=docker/dockerfile:1 - -FROM ghcr.io/linuxserver/ffmpeg:arm32v7-bin as binstage -FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-jammy - -# Add files from binstage -COPY --from=binstage / / - -# set version label -ARG BUILD_DATE -ARG VERSION -LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" -LABEL maintainer="thelamer" - -ARG DEBIAN_FRONTEND="noninteractive" - -RUN \ - echo "**** install runtime ****" && \ - apt-get update && \ - apt-get install -y \ - libexpat1 \ - libfontconfig1 \ - libglib2.0-0 \ - libgomp1 \ - libharfbuzz0b \ - libv4l-0 \ - libx11-6 \ - libxcb1 \ - libxext6 \ - libxml2 && \ - echo "**** clean up ****" && \ - rm -rf \ - /var/lib/apt/lists/* \ - /var/tmp/* - -COPY /root / - -ENTRYPOINT ["/ffmpegwrapper.sh"] diff --git a/Jenkinsfile b/Jenkinsfile index 3949e09..d172ac3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -103,7 +103,7 @@ pipeline { steps{ script{ env.EXT_RELEASE = sh( - script: ''' echo 5.1.2-cli ''', + script: ''' echo 6.0-cli ''', 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-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } else { env.CI_TAGS = 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-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA } else { env.CI_TAGS = 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-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST } else { env.CI_TAGS = 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' - } - 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' @@ -663,9 +625,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 \ @@ -768,8 +728,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 @@ -777,49 +735,47 @@ pipeline { docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest 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-latest - 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-latest 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-latest - docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG} - docker push ${MANIFESTIMAGE}:arm32v7-latest - docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker push ${MANIFESTIMAGE}:arm64v8-latest 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}:latest || : - docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest - docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm + docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm64v8-latest --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-latest") + if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then + docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest || : + docker manifest create ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:amd64-latest + docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest + fi docker manifest push --purge ${MANIFESTIMAGE}:latest docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} diff --git a/README.md b/README.md index 5b84003..1bdbc48 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,6 @@ Find us at: * [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team. * [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images. -* [Podcast](https://anchor.fm/linuxserverio) - on hiatus. Coming back soon (late 2018). * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fffmpeg?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fffmpeg) @@ -53,7 +52,7 @@ The architectures supported by this image are: | :----: | :----: | ---- | | x86-64 | ✅ | amd64-\ | | arm64 | ✅ | arm64v8-\ | -| armhf| ✅ | arm32v7-\ | +| armhf| ❌ | arm32v7-\ | ## Usage @@ -129,6 +128,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **13.06.23:** - Bump to 6.0, update shared libraries, deprecate armhf, combine bin stage. * **14.12.22:** - Rebase to Jammy, bump to 5.1.2. * **19.06.22:** - Rebase to Focal. * **26.08.21:** - Add support for libOpenCL. diff --git a/jenkins-vars.yml b/jenkins-vars.yml index defc5f6..7508d25 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -3,10 +3,11 @@ # jenkins variables project_name: docker-ffmpeg external_type: na -custom_version_command: "echo 5.1.2-cli" +custom_version_command: "echo 6.0-cli" release_type: stable release_tag: latest ls_branch: master +build_armhf: false repo_vars: - BUILD_VERSION_ARG = 'FFMPEG_VERSION' - LS_USER = 'linuxserver' diff --git a/readme-vars.yml b/readme-vars.yml index bfeb745..b8f406c 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -26,7 +26,6 @@ full_custom_readme: | * [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team. * [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images. - * [Podcast](https://anchor.fm/linuxserverio) - on hiatus. Coming back soon (late 2018). * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fffmpeg?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fffmpeg) @@ -56,7 +55,7 @@ full_custom_readme: | | :----: | :----: | ---- | | x86-64 | ✅ | amd64-\ | | arm64 | ✅ | arm64v8-\ | - | armhf| ✅ | arm32v7-\ | + | armhf| ❌ | arm32v7-\ | ## Usage @@ -132,6 +131,7 @@ full_custom_readme: | ## Versions + * **13.06.23:** - Bump to 6.0, update shared libraries, deprecate armhf, combine bin stage. * **14.12.22:** - Rebase to Jammy, bump to 5.1.2. * **19.06.22:** - Rebase to Focal. * **26.08.21:** - Add support for libOpenCL.