45 lines
1.4 KiB
Bash
45 lines
1.4 KiB
Bash
#!/bin/sh
|
|
# Builds hhctl for every release platform and packs the archives into dist/.
|
|
#
|
|
# deploy/build.sh [version] version defaults to `git describe`
|
|
#
|
|
# Output:
|
|
# dist/hhctl_<version>_<os>_<arch>.tar.gz or .zip
|
|
# dist/SHA256SUMS
|
|
#
|
|
# Releases are published for linux/amd64 and windows/amd64 only. Set TARGETS="linux/arm64 darwin/arm64"
|
|
# (any GOOS/GOARCH pair Go supports) to build something else by hand.
|
|
set -eu
|
|
NAME=hhctl
|
|
CMDS="hhctl terraform-provider-hammerhead"
|
|
cd "$(dirname "$0")/.."
|
|
VERSION=${1:-$(git describe --tags --always 2>/dev/null || echo dev)}
|
|
TARGETS=${TARGETS:-"linux/amd64 windows/amd64"}
|
|
|
|
rm -rf dist
|
|
mkdir -p dist/stage
|
|
for t in $TARGETS; do
|
|
os=${t%/*}
|
|
arch=${t#*/}
|
|
ext=""
|
|
[ "$os" = windows ] && ext=".exe"
|
|
pkg="${NAME}_${VERSION}_${os}_${arch}"
|
|
stage="dist/stage/$pkg"
|
|
mkdir -p "$stage"
|
|
for c in $CMDS; do
|
|
echo "building $c $VERSION for $os/$arch"
|
|
CGO_ENABLED=0 GOOS=$os GOARCH=$arch go build -trimpath -ldflags "-s -w -X main.version=$VERSION" -o "$stage/$c$ext" "./cmd/$c"
|
|
done
|
|
for f in LICENSE README.md; do
|
|
[ -f "$f" ] && cp "$f" "$stage/"
|
|
done
|
|
if [ "$os" = windows ] && command -v zip >/dev/null 2>&1; then
|
|
(cd dist/stage && zip -qr "../$pkg.zip" "$pkg")
|
|
else
|
|
tar -C dist/stage -czf "dist/$pkg.tar.gz" "$pkg"
|
|
fi
|
|
done
|
|
rm -rf dist/stage
|
|
(cd dist && sha256sum $(ls | grep -E '\.(tar\.gz|zip)$') > SHA256SUMS)
|
|
echo "done: $(ls dist | grep -cE '\.(tar\.gz|zip)$') archives in dist/"
|