#!/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