pkg-vsn.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # This script prints the release version for emqx
  4. # ensure dir
  5. cd -P -- "$(dirname -- "$0")"
  6. help() {
  7. echo
  8. echo "$0 PROFILE [options]"
  9. echo
  10. echo "-h|--help: To display this usage information"
  11. echo "--release: Print release version from emqx_release.hrl"
  12. echo
  13. echo "--long: Print long vsn number. e.g. 5.0.0-ubuntu20.04-amd64"
  14. echo " Otherwise short e.g. 5.0.0"
  15. echo "--elixir: Include elixir version in the long version string"
  16. echo " e.g. 5.0.0-elixir-ubuntu20.04-amd64"
  17. echo "--vsn_matcher: For --long option, replace the EMQX version with '*'"
  18. echo " so it can be used in find commands"
  19. }
  20. PROFILE="${1:-}"
  21. if [ -z "$PROFILE" ]; then
  22. echo "ERROR: missing profile"
  23. help
  24. exit 1
  25. fi
  26. shift
  27. while [ "$#" -gt 0 ]; do
  28. case $1 in
  29. -h|--help)
  30. help
  31. exit 0
  32. ;;
  33. --release)
  34. RELEASE_VERSION='yes'
  35. shift 1
  36. ;;
  37. --long)
  38. LONG_VERSION='yes'
  39. shift 1
  40. ;;
  41. --elixir)
  42. shift 1
  43. case ${1:-novalue} in
  44. -*)
  45. # another option
  46. IS_ELIXIR='yes'
  47. ;;
  48. yes|no)
  49. IS_ELIXIR="${1}"
  50. shift 1
  51. ;;
  52. novalue)
  53. IS_ELIXIR='yes'
  54. ;;
  55. *)
  56. echo "ERROR: unknown option: --elixir $2"
  57. exit 1
  58. ;;
  59. esac
  60. ;;
  61. --vsn_matcher)
  62. IS_MATCHER='yes'
  63. shift 1
  64. ;;
  65. *)
  66. echo "WARN: Unknown arg (ignored): $1"
  67. exit 1
  68. ;;
  69. esac
  70. done
  71. # return immediately if version is already set
  72. if [[ "${PKG_VSN:-novalue}" != novalue && "${LONG_VERSION:-novalue}" != 'yes' ]]; then
  73. echo "$PKG_VSN"
  74. exit 0
  75. fi
  76. case "${PROFILE}" in
  77. *enterprise*)
  78. RELEASE_EDITION="EMQX_RELEASE_EE"
  79. GIT_TAG_PREFIX="e"
  80. ;;
  81. *)
  82. RELEASE_EDITION="EMQX_RELEASE_CE"
  83. GIT_TAG_PREFIX="v"
  84. ;;
  85. esac
  86. ## emqx_release.hrl is the single source of truth for release version
  87. RELEASE="$(grep -E "define.+${RELEASE_EDITION}" apps/emqx/include/emqx_release.hrl | cut -d '"' -f2)"
  88. if [ "${RELEASE_VERSION:-}" = 'yes' ]; then
  89. echo "$RELEASE"
  90. exit 0
  91. fi
  92. git_exact_vsn() {
  93. local tag
  94. tag="$(git describe --tags --match "${GIT_TAG_PREFIX}*" --exact 2>/dev/null)"
  95. echo "${tag#[v|e]}"
  96. }
  97. GIT_EXACT_VSN="$(git_exact_vsn)"
  98. if [ "$GIT_EXACT_VSN" != '' ]; then
  99. if [ "$GIT_EXACT_VSN" != "$RELEASE" ]; then
  100. echo "ERROR: Tagged $GIT_EXACT_VSN, but $RELEASE in include/emqx_release.hrl" 1>&2
  101. exit 1
  102. fi
  103. SUFFIX=''
  104. else
  105. SUFFIX="-g$(git rev-parse HEAD | cut -b1-8)"
  106. fi
  107. PKG_VSN="${PKG_VSN:-${RELEASE}${SUFFIX}}"
  108. if [ "${LONG_VERSION:-}" != 'yes' ]; then
  109. echo "$PKG_VSN"
  110. exit 0
  111. fi
  112. ### --long LONG_VERSION handling start
  113. if [ "${IS_MATCHER:-}" = 'yes' ]; then
  114. PKG_VSN='*'
  115. fi
  116. SYSTEM="$(./scripts/get-distro.sh)"
  117. UNAME_M="$(uname -m)"
  118. case "$UNAME_M" in
  119. x86_64)
  120. ARCH='amd64'
  121. ;;
  122. aarch64)
  123. ARCH='arm64'
  124. ;;
  125. arm64)
  126. ARCH='arm64'
  127. ;;
  128. arm*)
  129. ARCH='arm'
  130. ;;
  131. esac
  132. if [ "${IS_ELIXIR:-}" = "yes" ]; then
  133. infix='-elixir'
  134. else
  135. infix=''
  136. fi
  137. echo "${PKG_VSN}${infix}-${SYSTEM}-${ARCH}"