aboutsummaryrefslogtreecommitdiff
path: root/portable
diff options
context:
space:
mode:
Diffstat (limited to 'portable')
-rw-r--r--portable/Dockerfile56
-rwxr-xr-xportable/build.sh46
2 files changed, 102 insertions, 0 deletions
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
bgstack15