#!/bin/sh # Builds hammerhead for every release platform and packs the archives into dist/. # # deploy/build.sh [version] version defaults to `git describe` # # Output: # dist/bin/_/hammerhead the raw binaries (the Docker image uses the linux ones) # dist/hammerhead___.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=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/bin dist/stage for t in $TARGETS; do os=${t%/*} arch=${t#*/} ext="" [ "$os" = windows ] && ext=".exe" out="dist/bin/${os}_${arch}" mkdir -p "$out" echo "building $NAME $VERSION for $os/$arch" CGO_ENABLED=0 GOOS=$os GOARCH=$arch GOARM=7 \ go build -trimpath -ldflags "-s -w -X main.version=$VERSION" -o "$out/$NAME$ext" "./cmd/$NAME" pkg="${NAME}_${VERSION}_${os}_${arch}" stage="dist/stage/$pkg" mkdir -p "$stage" cp "$out/$NAME$ext" "$stage/" for f in LICENSE README.md .env.example; do [ -f "$f" ] && cp "$f" "$stage/" done if [ "$os" = linux ]; then cp deploy/install.sh deploy/setup.sh "deploy/$NAME.service" deploy/docker-compose.yml "$stage/" chmod +x "$stage/install.sh" fi 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/"