From 6144590fffb3d29f322dd06e85ebad6e2d7ab67c Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Sun, 11 Feb 2024 14:21:47 -0500 Subject: Add portable builds --- portable/Dockerfile | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ portable/build.sh | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 portable/Dockerfile create mode 100755 portable/build.sh (limited to 'portable') diff --git a/portable/Dockerfile b/portable/Dockerfile new file mode 100644 index 0000000..3f86299 --- /dev/null +++ b/portable/Dockerfile @@ -0,0 +1,56 @@ +# Docker build arguments +ARG DOTNET_VERSION=8.0 +ARG NODEJS_VERSION=20 + +ARG PTYPE=debian +ARG PVERSION=12 + +FROM ${PTYPE}:${PVERSION} + +ARG SOURCE_DIR=/jellyfin +ARG ARTIFACT_DIR=/dist +ARG DOTNET_VERSION +ARG NODEJS_VERSION +ARG PTYPE +ARG PVERSION + +# Docker run environment +ENV SOURCE_DIR=/jellyfin +ENV ARTIFACT_DIR=/dist +ENV TYPE=${PTYPE} +ENV VERSION=${PVERSION} +ENV ARCHIVE_TYPES=tar + +# Prepare Debian build environment +RUN apt-get update -y \ + && DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC \ + apt-get install --no-install-recommends -y \ + wget debhelper gnupg devscripts build-essential mmv lsb-release zip \ + libssl*.* liblttng-ust* \ + libfontconfig*-dev libcurl*openssl-dev libfreetype*-dev libssl-dev \ + && apt-get clean autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/* + +# Prepare dotnet SDK +RUN wget https://packages.microsoft.com/config/${PTYPE}/${PVERSION}/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \ + && dpkg -i packages-microsoft-prod.deb \ + && apt-get -f install \ + && apt-get update \ + && apt-get install -y dotnet-sdk-${DOTNET_VERSION} + +# Prepare nodejs +RUN wget https://deb.nodesource.com/setup_${NODEJS_VERSION}.x -O nodejs-install.sh \ + && chmod +x ./nodejs-install.sh \ + && ./nodejs-install.sh \ + && apt-get install -y \ + nodejs + +# Link to build script +RUN ln -sf ${SOURCE_DIR}/portable/build.sh /build.sh + +VOLUME ${SOURCE_DIR}/ + +VOLUME ${ARTIFACT_DIR}/ + +ENTRYPOINT ["/build.sh"] diff --git a/portable/build.sh b/portable/build.sh new file mode 100755 index 0000000..f8a3295 --- /dev/null +++ b/portable/build.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +#= Debian .deb builder + +set -o errexit +set -o xtrace + +# Create the intermediate build dir +BUILD_DIR="/build" +mkdir -p ${BUILD_DIR} + +# Move to source directory +pushd "${SOURCE_DIR}" + +# Build server +pushd jellyfin-server +dotnet publish Jellyfin.Server --configuration Release --output ${BUILD_DIR}/ -p:DebugSymbols=false -p:DebugType=none -p:UseAppHost=false +popd + +# Build web +pushd jellyfin-web +npm ci --no-audit --unsafe-perm +npm run build:production +mv dist ${BUILD_DIR}/jellyfin-web +popd + +mkdir -p "${ARTIFACT_DIR}/" + +pushd ${BUILD_DIR} +for ARCHIVE_TYPE in $( tr ',' '\n' <<<"${ARCHIVE_TYPES}" ); do + case ${ARCHIVE_TYPE} in + tar) + tar -czf "${ARTIFACT_DIR}"/jellyfin_${JVERS}.tar.gz . + ;; + zip) + zip -qr "${ARTIFACT_DIR}"/jellyfin_${JVERS}.zip . + ;; + esac +done +popd + +# Clean up any lingering artifacts +make -f debian/rules clean +rm -rf ${BUILD_DIR} + +popd -- cgit