build-binary 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env bash
  2. set -e
  3. VER=$1
  4. PROJ="etcd"
  5. if [ -z "$1" ]; then
  6. echo "Usage: ${0} VERSION" >> /dev/stderr
  7. exit 255
  8. fi
  9. set -u
  10. function setup_env {
  11. local proj=${1}
  12. local ver=${2}
  13. if [ ! -d "${proj}" ]; then
  14. git clone https://github.com/etcd-io/"${proj}"
  15. fi
  16. pushd "${proj}" >/dev/null
  17. git checkout master
  18. git fetch --all
  19. git reset --hard origin/master
  20. git checkout "${ver}"
  21. popd >/dev/null
  22. }
  23. function package {
  24. local target=${1}
  25. local srcdir="${2}/bin"
  26. local ccdir="${srcdir}/${GOOS}_${GOARCH}"
  27. if [ -d "${ccdir}" ]; then
  28. srcdir="${ccdir}"
  29. fi
  30. local ext=""
  31. if [ "${GOOS}" == "windows" ]; then
  32. ext=".exe"
  33. fi
  34. for bin in etcd etcdctl; do
  35. cp "${srcdir}/${bin}" "${target}/${bin}${ext}"
  36. done
  37. cp etcd/README.md "${target}"/README.md
  38. cp etcd/etcdctl/README.md "${target}"/README-etcdctl.md
  39. cp etcd/etcdctl/READMEv2.md "${target}"/READMEv2-etcdctl.md
  40. cp -R etcd/Documentation "${target}"/Documentation
  41. }
  42. function main {
  43. mkdir release
  44. cd release
  45. setup_env "${PROJ}" "${VER}"
  46. tarcmd=tar
  47. if [[ $(go env GOOS) == "darwin" ]]; then
  48. tarcmd=gtar
  49. fi
  50. for os in darwin windows linux; do
  51. export GOOS=${os}
  52. TARGET_ARCHS=("amd64")
  53. if [ ${GOOS} == "linux" ]; then
  54. TARGET_ARCHS+=("arm64")
  55. TARGET_ARCHS+=("ppc64le")
  56. fi
  57. for TARGET_ARCH in "${TARGET_ARCHS[@]}"; do
  58. export GOARCH=${TARGET_ARCH}
  59. pushd etcd >/dev/null
  60. GO_LDFLAGS="-s" ./build
  61. popd >/dev/null
  62. TARGET="etcd-${VER}-${GOOS}-${GOARCH}"
  63. mkdir "${TARGET}"
  64. package "${TARGET}" "${PROJ}"
  65. if [ ${GOOS} == "linux" ]; then
  66. ${tarcmd} cfz "${TARGET}.tar.gz" "${TARGET}"
  67. echo "Wrote release/${TARGET}.tar.gz"
  68. else
  69. zip -qr "${TARGET}.zip" "${TARGET}"
  70. echo "Wrote release/${TARGET}.zip"
  71. fi
  72. done
  73. done
  74. }
  75. main