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