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