|
@@ -0,0 +1,106 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+
|
|
|
+# build.sh - Build Jellyfin binary packages
|
|
|
+# Part of the Jellyfin Project
|
|
|
+
|
|
|
+set -o errexit
|
|
|
+set -o pipefail
|
|
|
+
|
|
|
+usage() {
|
|
|
+ echo -e "build.sh - Build Jellyfin binary packages"
|
|
|
+ echo -e "Usage:"
|
|
|
+ echo -e " $0 -t/--type <BUILD_TYPE> -p/--platform <PLATFORM> [-k/--keep-artifacts] [-l/--list-platforms]"
|
|
|
+ echo -e "Notes:"
|
|
|
+ echo -e " * BUILD_TYPE can be one of: [native, docker] and must be specified"
|
|
|
+ echo -e " * native: Build using the build script in the host OS"
|
|
|
+ echo -e " * docker: Build using the build script in a standardized Docker container"
|
|
|
+ echo -e " * PLATFORM can be any platform shown by -l/--list-platforms and must be specified"
|
|
|
+ echo -e " * If -k/--keep-artifacts is specified, transient artifacts (e.g. Docker containers) will be"
|
|
|
+ echo -e " retained after the build is finished"
|
|
|
+ echo -e " * If -l/--list-platforms is specified, all other arguments are ignored; the script will print"
|
|
|
+ echo -e " the list of supported platforms and exit"
|
|
|
+}
|
|
|
+
|
|
|
+list_platforms() {
|
|
|
+ declare -a platforms
|
|
|
+ platforms=(
|
|
|
+ $( find deployment -maxdepth 1 -mindepth 1 -type f -name "build.*" | awk -F'.' '{ $1=""; print $2 "." $3 }' )
|
|
|
+ )
|
|
|
+ echo -e "Valid platforms:"
|
|
|
+ echo
|
|
|
+ for platform in ${platforms[@]}; do
|
|
|
+ echo -e "* ${platform} : $( grep '^#=' deployment/build.${platform} | sed 's/^#= //' )"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+do_build_native() {
|
|
|
+ export IS_DOCKER=NO
|
|
|
+ deployment/build.${PLATFORM}
|
|
|
+}
|
|
|
+
|
|
|
+do_build_docker() {
|
|
|
+ if [[ ! -f deployment/Dockerfile.${PLATFORM} ]]; then
|
|
|
+ echo "Missing Dockerfile for platform ${PLATFORM}"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ if [[ ${KEEP_ARTIFACTS} == YES ]]; then
|
|
|
+ docker_args=""
|
|
|
+ else
|
|
|
+ docker_args="--rm"
|
|
|
+ fi
|
|
|
+
|
|
|
+ docker build . -t "jellyfin-builder.${PLATFORM}" -f deployment/Dockerfile.${PLATFORM}
|
|
|
+ mkdir -p ${ARTIFACT_DIR}
|
|
|
+ docker run $docker_args -v "${ARTIFACT_DIR}:/dist" "jellyfin-builder.${PLATFORM}"
|
|
|
+}
|
|
|
+
|
|
|
+while [[ $# -gt 0 ]]; do
|
|
|
+ key="$1"
|
|
|
+ case $key in
|
|
|
+ -t|--type)
|
|
|
+ BUILD_TYPE="$2"
|
|
|
+ shift # past argument
|
|
|
+ shift # past value
|
|
|
+ ;;
|
|
|
+ -p|--platform)
|
|
|
+ PLATFORM="$2"
|
|
|
+ shift # past argument
|
|
|
+ shift # past value
|
|
|
+ ;;
|
|
|
+ -k|--keep-artifacts)
|
|
|
+ KEEP_ARTIFACTS=YES
|
|
|
+ shift # past argument
|
|
|
+ ;;
|
|
|
+ -l|--list-platforms)
|
|
|
+ list_platforms
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+ -h|--help)
|
|
|
+ usage
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+ *) # unknown option
|
|
|
+ echo "Unknown option $1"
|
|
|
+ usage
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+done
|
|
|
+
|
|
|
+if [[ -z ${BUILD_TYPE} || -z ${PLATFORM} ]]; then
|
|
|
+ usage
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+export SOURCE_DIR="$( pwd )"
|
|
|
+export ARTIFACT_DIR="${SOURCE_DIR}/../bin/${PLATFORM}"
|
|
|
+
|
|
|
+# Determine build type
|
|
|
+case ${BUILD_TYPE} in
|
|
|
+ native)
|
|
|
+ do_build_native
|
|
|
+ ;;
|
|
|
+ docker)
|
|
|
+ do_build_docker
|
|
|
+ ;;
|
|
|
+esac
|