common.build.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/usr/bin/env bash
  2. set -o errexit
  3. set -o nounset
  4. RED='\033[0;31m'
  5. GREEN='\033[0;32m'
  6. CYAN='\033[0;36m'
  7. NC='\033[0m' # No Color
  8. DEFAULT_BUILD_CONTEXT="../.."
  9. DEFAULT_ROOT="."
  10. DEFAULT_DOTNETRUNTIME="framework"
  11. DEFAULT_CONFIG="Release"
  12. DEFAULT_OUTPUT_DIR="dist/jellyfin-git"
  13. DEFAULT_PKG_DIR="pkg-dist"
  14. DEFAULT_DOCKERFILE="Dockerfile"
  15. DEFAULT_ARCHIVE_CMD="tar -xvzf"
  16. # Parse the version from the AssemblyVersion
  17. get_version()
  18. (
  19. local ROOT=${1-$DEFAULT_ROOT}
  20. grep "AssemblyVersion" ${ROOT}/SharedVersion.cs \
  21. | sed -E 's/\[assembly: ?AssemblyVersion\("([0-9\.]+)"\)\]/\1/'
  22. )
  23. # Run a build
  24. build_jellyfin()
  25. (
  26. ROOT=${1-$DEFAULT_ROOT}
  27. CONFIG=${2-$DEFAULT_CONFIG}
  28. DOTNETRUNTIME=${3-$DEFAULT_DOTNETRUNTIME}
  29. OUTPUT_DIR=${4-$DEFAULT_OUTPUT_DIR}
  30. echo -e "${CYAN}Building jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}'.${NC}"
  31. if [[ $DOTNETRUNTIME == 'framework' ]]; then
  32. dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}" "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
  33. else
  34. dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}" --self-contained --runtime ${DOTNETRUNTIME} "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
  35. fi
  36. EXIT_CODE=$?
  37. if [ $EXIT_CODE -eq 0 ]; then
  38. echo -e "${GREEN}[DONE] Build jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' complete.${NC}"
  39. else
  40. echo -e "${RED}[FAIL] Build jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' FAILED.${NC}"
  41. fi
  42. )
  43. # Run a docker
  44. build_jellyfin_docker()
  45. (
  46. BUILD_CONTEXT=${1-$DEFAULT_BUILD_CONTEXT}
  47. DOCKERFILE=${2-$DEFAULT_DOCKERFILE}
  48. IMAGE_TAG=${3-"jellyfin:$(git rev-parse --abbrev-ref HEAD)"}
  49. echo -e "${CYAN}Building jellyfin docker image in '${BUILD_CONTEXT}' with Dockerfile '${DOCKERFILE}' and tag '${IMAGE_TAG}'.${NC}"
  50. docker build -t ${IMAGE_TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
  51. EXIT_CODE=$?
  52. if [ $EXIT_CODE -eq 0 ]; then
  53. echo -e "${GREEN}[DONE] Building jellyfin docker image in '${BUILD_CONTEXT}' with Dockerfile '${DOCKERFILE}' and tag '${IMAGE_TAG}' complete.${NC}"
  54. else
  55. echo -e "${RED}[FAIL] Building jellyfin docker image in '${BUILD_CONTEXT}' with Dockerfile '${DOCKERFILE}' and tag '${IMAGE_TAG}' FAILED.${NC}"
  56. fi
  57. )
  58. # Clean a build
  59. clean_jellyfin()
  60. (
  61. local ROOT=${1-$DEFAULT_ROOT}
  62. local CONFIG=${2-$DEFAULT_CONFIG}
  63. local OUTPUT_DIR=${3-$DEFAULT_OUTPUT_DIR}
  64. local PKG_DIR=${4-$DEFAULT_PKG_DIR}
  65. echo -e "${CYAN}Cleaning jellyfin in '${ROOT}'' with configuration ${CONFIG} and output directory '${OUTPUT_DIR}'.${NC}"
  66. echo -e "${CYAN}Deleting '${OUTPUT_DIR}'${NC}"
  67. rm -rf "$OUTPUT_DIR"
  68. echo -e "${CYAN}Deleting '${PKG_DIR}'${NC}"
  69. rm -rf "$PKG_DIR"
  70. dotnet clean "${ROOT}" -maxcpucount:1 --configuration ${CONFIG}
  71. local EXIT_CODE=$?
  72. if [ $EXIT_CODE -eq 0 ]; then
  73. echo -e "${GREEN}[DONE] Clean jellyfin in '${ROOT}' with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' complete.${NC}"
  74. else
  75. echo -e "${RED}[FAIL] Clean jellyfin in '${ROOT}' with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' failed.${NC}"
  76. fi
  77. )
  78. # Packages the output folder into an archive.
  79. package_portable()
  80. (
  81. local ROOT=${1-$DEFAULT_ROOT}
  82. local OUTPUT_DIR=${2-$DEFAULT_OUTPUT_DIR}
  83. local PKG_DIR=${3-$DEFAULT_PKG_DIR}
  84. local ARCHIVE_CMD=${4-$DEFAULT_ARCHIVE_CMD}
  85. # Package portable build result
  86. if [ -d ${OUTPUT_DIR} ]; then
  87. echo -e "${CYAN}Packaging build in '${OUTPUT_DIR}' for `basename "${OUTPUT_DIR}"` to '${PKG_DIR}' with root '${ROOT}'.${NC}"
  88. mkdir -p ${PKG_DIR}
  89. tar -zcvf "${PKG_DIR}/`basename "${OUTPUT_DIR}"`.portable.tar.gz" -C "`dirname "${OUTPUT_DIR}"`" "`basename "${OUTPUT_DIR}"`"
  90. local EXIT_CODE=$?
  91. if [ $EXIT_CODE -eq 0 ]; then
  92. echo -e "${GREEN}[DONE] Packaging build in '${OUTPUT_DIR}' for `basename "${OUTPUT_DIR}"` to '${PKG_DIR}' with root '${ROOT}' complete.${NC}"
  93. else
  94. echo -e "${RED}[FAIL] Packaging build in '${OUTPUT_DIR}' for `basename "${OUTPUT_DIR}"` to '${PKG_DIR}' with root '${ROOT}' FAILED.${NC}"
  95. fi
  96. else
  97. echo -e "${RED}[FAIL] Build artifacts do not exist for ${OUTPUT_DIR}. Run build.sh first.${NC}"
  98. fi
  99. )