51 lines
1.7 KiB
Bash
51 lines
1.7 KiB
Bash
#!/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/<os>_<arch>/hammerhead the raw binaries (the Docker image uses the linux ones)
|
|
# dist/hammerhead_<version>_<os>_<arch>.tar.gz or .zip
|
|
# dist/SHA256SUMS
|
|
#
|
|
# Set TARGETS="linux/amd64 linux/arm64" to build fewer platforms.
|
|
set -eu
|
|
NAME=hammerhead
|
|
cd "$(dirname "$0")/.."
|
|
VERSION=${1:-$(git describe --tags --always 2>/dev/null || echo dev)}
|
|
TARGETS=${TARGETS:-"linux/amd64 linux/arm64 linux/arm windows/amd64 darwin/amd64 darwin/arm64"}
|
|
|
|
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/"
|