Prechádzať zdrojové kódy

Add new build.sh script and symlink

Joshua M. Boniface 5 rokov pred
rodič
commit
f9cecfc0fb
2 zmenil súbory, kde vykonal 107 pridanie a 0 odobranie
  1. 1 0
      build
  2. 106 0
      build.sh

+ 1 - 0
build

@@ -0,0 +1 @@
+build.sh

+ 106 - 0
build.sh

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