#!/usr/bin/env bash set -e VER=$1 PROJ="etcd" if [ -z "$1" ]; then echo "Usage: ${0} VERSION" >> /dev/stderr exit 255 fi set -u function setup_env { local proj=${1} local ver=${2} if [ ! -d ${proj} ]; then git clone https://github.com/coreos/${proj} fi pushd ${proj} >/dev/null git checkout master git fetch --all git reset --hard origin/master git checkout $ver popd >/dev/null } function package { local target=${1} local srcdir="${2}/bin" local ccdir="${srcdir}/${GOOS}_${GOARCH}" if [ -d ${ccdir} ]; then srcdir=${ccdir} fi local ext="" if [ ${GOOS} == "windows" ]; then ext=".exe" fi for bin in etcd etcdctl; do cp ${srcdir}/${bin} ${target}/${bin}${ext} done cp etcd/README.md ${target}/README.md cp etcd/etcdctl/README.md ${target}/README-etcdctl.md cp etcd/etcdctl/READMEv2.md ${target}/READMEv2-etcdctl.md cp -R etcd/Documentation ${target}/Documentation } function main { mkdir release cd release setup_env ${PROJ} ${VER} for os in darwin windows linux; do export GOOS=${os} TARGET_ARCHS=("amd64") if [ ${GOOS} == "linux" ]; then TARGET_ARCHS+=("arm64") TARGET_ARCHS+=("ppc64le") fi for TARGET_ARCH in "${TARGET_ARCHS[@]}"; do export GOARCH=${TARGET_ARCH} pushd etcd >/dev/null GO_LDFLAGS="-s" ./build popd >/dev/null TARGET="etcd-${VER}-${GOOS}-${GOARCH}" mkdir ${TARGET} package ${TARGET} ${PROJ} if [ ${GOOS} == "linux" ]; then tar cfz ${TARGET}.tar.gz ${TARGET} echo "Wrote release/${TARGET}.tar.gz" else zip -qr ${TARGET}.zip ${TARGET} echo "Wrote release/${TARGET}.zip" fi done done } main