Add portable builds

This commit is contained in:
Joshua M. Boniface
2024-02-11 14:21:47 -05:00
parent 80a997253a
commit 6144590fff
3 changed files with 123 additions and 3 deletions

56
portable/Dockerfile Normal file
View File

@@ -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"]

46
portable/build.sh Executable file
View File

@@ -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