build 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/bin/bash
  2. # This script helps to build release artifacts.
  3. # arg1: profile, e.g. emqx | emqx-edge | emqx-pkg | emqx-edge-pkg
  4. # arg2: artifact, e.g. tar | relup | zip | pkg
  5. set -euo pipefail
  6. PROFILE="$1"
  7. ARTIFACT="$2"
  8. # ensure dir
  9. cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")"
  10. PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh)}"
  11. export PKG_VSN
  12. if [ "$(uname -s)" = 'Darwin' ]; then
  13. SYSTEM=macos
  14. elif [ "$(uname -s)" = 'Linux' ]; then
  15. if grep -q -i 'centos' /etc/*-release; then
  16. DIST='centos'
  17. VERSION_ID="$(rpm --eval '%{centos_ver}')"
  18. else
  19. DIST="$(sed -n '/^ID=/p' /etc/os-release | sed -r 's/ID=(.*)/\1/g' | sed 's/"//g')"
  20. VERSION_ID="$(sed -n '/^VERSION_ID=/p' /etc/os-release | sed -r 's/VERSION_ID=(.*)/\1/g' | sed 's/"//g')"
  21. fi
  22. SYSTEM="$(echo "${DIST}${VERSION_ID}" | sed -r 's/([a-zA-Z]*)-.*/\1/g')"
  23. fi
  24. ##
  25. ## Support RPM and Debian based linux systems
  26. ##
  27. if [ "$(uname -s)" = 'Linux' ]; then
  28. case "${DIST:-}" in
  29. ubuntu|debian|raspbian)
  30. PKGERDIR='deb'
  31. ;;
  32. *)
  33. PKGERDIR='rpm'
  34. ;;
  35. esac
  36. fi
  37. log() {
  38. local msg="$1"
  39. # rebar3 prints ===>, so we print ===<
  40. echo "===< $msg"
  41. }
  42. make_tar() {
  43. ./rebar3 as "$PROFILE" tar
  44. }
  45. ## unzip previous version .zip files to _build/$PROFILE/rel/emqx/releases before making relup
  46. make_relup() {
  47. local releases_dir="_build/$PROFILE/rel/emqx/releases"
  48. local releases=()
  49. if [ -d "$releases_dir" ]; then
  50. while read -r dir; do
  51. local version
  52. version="$(basename "$dir")"
  53. # skip current version
  54. if [ "$version" != "$PKG_VSN" ]; then
  55. releases+=( "$version" )
  56. fi
  57. done < <(find "_build/$PROFILE/rel/emqx/releases" -maxdepth 1 -name '*.*.*' -type d)
  58. fi
  59. if [ ${#releases[@]} -eq 0 ]; then
  60. log "No previous release found, relup ignored"
  61. return 0
  62. fi
  63. if [ ${#releases[@]} -gt 1 ]; then
  64. log "Found more than one previous versions in $releases_dir:"
  65. log "${releases[@]}"
  66. log "ERROR: So far we can not support multi base-version relup creation"
  67. return 1
  68. fi
  69. local base_version="${releases[0]}"
  70. # TODO: comma separate base-versions when supported
  71. ./rebar3 as "$PROFILE" relup --relname emqx --relvsn "${PKG_VSN}" --upfrom "$base_version"
  72. }
  73. ## make_zip turns .tar.gz into a .zip with a slightly different name.
  74. ## It assumes the .tar.gz has been built -- relies on Makefile dependency
  75. make_zip() {
  76. tard="/tmp/emqx_untar_${PKG_VSN}"
  77. rm -rf "${tard}"
  78. mkdir -p "${tard}/emqx"
  79. local relpath="_build/${PROFILE}/rel/emqx"
  80. local pkgpath="_packages/${PROFILE}"
  81. mkdir -p "${pkgpath}"
  82. local tarball="${relpath}/emqx-${PKG_VSN}.tar.gz"
  83. if [ ! -f "$tarball" ]; then
  84. log "ERROR: $tarball is not found"
  85. fi
  86. local zipball
  87. zipball="${pkgpath}/${PROFILE}-${SYSTEM}-${PKG_VSN}-$(uname -m).zip"
  88. tar zxf "${tarball}" -C "${tard}/emqx"
  89. (cd "${tard}" && zip -qr - emqx) > "${zipball}"
  90. }
  91. log "building artifact=$ARTIFACT for profile=$PROFILE"
  92. case "$ARTIFACT" in
  93. tar)
  94. make_tar
  95. ;;
  96. relup)
  97. make_relup
  98. ;;
  99. zip)
  100. make_zip
  101. ;;
  102. pkg)
  103. if [ -z "${PKGERDIR:-}" ]; then
  104. # zip should have been built as a Makefile dependency
  105. log "Skipped making deb/rpm package for $SYSTEM"
  106. exit 0
  107. fi
  108. # build the tar which is going to be used as the base of deb and rpm packages
  109. make_tar
  110. make -C "deploy/packages/${PKGERDIR}" clean
  111. EMQX_REL="$(pwd)" EMQX_BUILD="${PROFILE}" SYSTEM="${SYSTEM}" make -C "deploy/packages/${PKGERDIR}"
  112. ;;
  113. *)
  114. log "Unknown artifact $ARTIFACT"
  115. exit 1
  116. ;;
  117. esac