#!/bin/bash set -xeo pipefail OS_TARGETS=(linux) ARCH_TARGETS=${ARCH_TARGETS:-amd64} ARM_TARGETS=${ARM_TARGETS:-5 6 7} DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" PROJECT_DIR="$DIR/../.." function build { local name=$1 local srcdir=$2 local os=$3 local arch=$4 local dirname="$name-$os-$arch$GOARM" local destdir="$PROJECT_DIR/release/$dirname" rm -rf "$destdir" mkdir -p "$destdir" echo "building $dirname..." CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build \ -ldflags="-s -w -X 'main.GitRef=$(current_commit_ref)' -X 'main.ProjectVersion=$(current_version)' -X 'main.BuildDate=$(current_date)'" \ -gcflags=-trimpath="${PWD}" \ -asmflags=-trimpath="${PWD}" \ -o "$destdir/bin/$name" \ "$srcdir" if [ ! -z "$(which upx)" ]; then upx --brute -9 "$destdir/bin/$name" fi } function current_date { date '+%Y-%m-%d %H:%M' } function current_commit_ref { git log -n 1 --pretty="format:%h" } function current_version { local latest_tag=$(git describe --abbrev=0 | rev | cut -d '/' -f 1 | rev) echo ${latest_tag:-0.0.0} } function copy { local name=$1 local os=$2 local arch=$3 local src=$4 local dest=$5 local dirname="$name-$os-$arch$GOARM" local destdir="$PROJECT_DIR/release/$dirname" echo "copying '$src' to '$destdir/$dest'..." mkdir -p "$(dirname $destdir/$dest)" cp -rfL $src "$destdir/$dest" } function compress { local name=$1 local os=$2 local arch=$3 local dirname="$name-$os-$arch$GOARM" local destdir="$PROJECT_DIR/release/$dirname" echo "compressing $dirname..." tar -czf "$destdir.tar.gz" -C "$destdir/../" "$dirname" } function release_frmd { local os=$1 local arch=$2 build 'frmd' "$PROJECT_DIR/cmd/frmd" $os $arch copy 'frmd' $os $arch "$PROJECT_DIR/README.md" "README.md" compress 'frmd' $os $arch } function main { for os in ${OS_TARGETS[@]}; do for arch in ${ARCH_TARGETS[@]}; do if [ "$arch" == "arm" ]; then for arm_target in $ARM_TARGETS; do GOARM=$arm_target release_frmd $os $arch done else release_frmd $os $arch fi done done } main