docker-build.sh 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. # Builds the RPM inside the Docker container
  3. set -o errexit
  4. set -o xtrace
  5. # Move to source directory
  6. pushd ${SOURCE_DIR}
  7. VERSION="$( grep '^Version:' ${SOURCE_DIR}/SOURCES/pkg-src/jellyfin.spec | awk '{ print $NF }' )"
  8. # Clone down and build Web frontend
  9. web_build_dir="$( mktemp -d )"
  10. web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
  11. git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
  12. pushd ${web_build_dir}
  13. if [[ -n ${web_branch} ]]; then
  14. checkout -b origin/${web_branch}
  15. fi
  16. source "$HOME/.nvm/nvm.sh"
  17. nvm use v8
  18. yarn install
  19. mkdir -p ${web_target}
  20. mv dist/* ${web_target}/
  21. popd
  22. rm -rf ${web_build_dir}
  23. # Create RPM source archive
  24. GNU_TAR=1
  25. echo "Bundling all sources for RPM build."
  26. tar \
  27. --transform "s,^\.,jellyfin-${VERSION}," \
  28. --exclude='.git*' \
  29. --exclude='**/.git' \
  30. --exclude='**/.hg' \
  31. --exclude='**/.vs' \
  32. --exclude='**/.vscode' \
  33. --exclude='deployment' \
  34. --exclude='**/bin' \
  35. --exclude='**/obj' \
  36. --exclude='**/.nuget' \
  37. --exclude='*.deb' \
  38. --exclude='*.rpm' \
  39. -czf "${SOURCE_DIR}/SOURCES/pkg-src/jellyfin-${VERSION}.tar.gz" \
  40. -C ${SOURCE_DIR} ./ || GNU_TAR=0
  41. if [ $GNU_TAR -eq 0 ]; then
  42. echo "The installed tar binary did not support --transform. Using workaround."
  43. package_temporary_dir="$( mktemp -d )"
  44. mkdir -p "${package_temporary_dir}/jellyfin"
  45. # Not GNU tar
  46. tar \
  47. --exclude='.git*' \
  48. --exclude='**/.git' \
  49. --exclude='**/.hg' \
  50. --exclude='**/.vs' \
  51. --exclude='**/.vscode' \
  52. --exclude='deployment' \
  53. --exclude='**/bin' \
  54. --exclude='**/obj' \
  55. --exclude='**/.nuget' \
  56. --exclude='*.deb' \
  57. --exclude='*.rpm' \
  58. -czf "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz" \
  59. -C ${SOURCE_DIR} ./
  60. echo "Extracting filtered package."
  61. mkdir -p "${package_temporary_dir}/jellyfin-${VERSION}"
  62. tar -xzf "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz" -C "${package_temporary_dir}/jellyfin-${VERSION}"
  63. echo "Removing filtered package."
  64. rm -f "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz"
  65. echo "Repackaging package into final tarball."
  66. tar -czf "${SOURCE_DIR}/SOURCES/pkg-src/jellyfin-${VERSION}.tar.gz" -C "${package_temporary_dir}" "jellyfin-${VERSION}"
  67. rm -rf ${package_temporary_dir}
  68. fi
  69. # Build RPM
  70. spectool -g -R SPECS/jellyfin.spec
  71. rpmbuild -bs SPECS/jellyfin.spec --define "_sourcedir ${SOURCE_DIR}/SOURCES/pkg-src/"
  72. rpmbuild -bb SPECS/jellyfin.spec --define "_sourcedir ${SOURCE_DIR}/SOURCES/pkg-src/"
  73. # Move the artifacts out
  74. mkdir -p ${ARTIFACT_DIR}/rpm
  75. mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/rpm/
  76. chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}