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