58 lines
1.3 KiB
Bash
58 lines
1.3 KiB
Bash
|
|
#!/bin/sh
|
||
|
|
set -eu
|
||
|
|
|
||
|
|
VERSION="${1:?usage: build_gdu.sh <version> [output_dir]}"
|
||
|
|
OUTPUT_DIR="${2:-$PWD/dist}"
|
||
|
|
PREFIX_NAME="gdu-${VERSION}-linux-amd64-musl-static"
|
||
|
|
|
||
|
|
# strip leading 'v' if passed
|
||
|
|
VERSION="${VERSION#v}"
|
||
|
|
|
||
|
|
mkdir -p "$OUTPUT_DIR"
|
||
|
|
|
||
|
|
apk add --no-cache \
|
||
|
|
curl \
|
||
|
|
file \
|
||
|
|
go \
|
||
|
|
git \
|
||
|
|
tar \
|
||
|
|
xz
|
||
|
|
|
||
|
|
# gdu uses Go modules, pull source from GitHub
|
||
|
|
SRCDIR="${TMPDIR:-/tmp}/gdu-src-${VERSION}"
|
||
|
|
rm -rf "$SRCDIR"
|
||
|
|
mkdir -p "$SRCDIR"
|
||
|
|
|
||
|
|
curl -fsSL "https://github.com/dundee/gdu/archive/refs/tags/v${VERSION}.tar.gz" \
|
||
|
|
| tar -xz -C "$SRCDIR" --strip-components=1
|
||
|
|
|
||
|
|
cd "$SRCDIR"
|
||
|
|
|
||
|
|
# Build fully static with musl toolchain
|
||
|
|
# CGO_ENABLED=0 forces pure-Go, which means no C deps at all
|
||
|
|
# ldflags: strip debug + disable dynamic linking
|
||
|
|
CGO_ENABLED=0 GOARCH=amd64 GOOS=linux \
|
||
|
|
go build \
|
||
|
|
-trimpath \
|
||
|
|
-ldflags="-s -w -extldflags=-static" \
|
||
|
|
-o "$OUTPUT_DIR/$PREFIX_NAME" \
|
||
|
|
./cmd/gdu
|
||
|
|
|
||
|
|
strip "$OUTPUT_DIR/$PREFIX_NAME" 2>/dev/null || true
|
||
|
|
|
||
|
|
(
|
||
|
|
cd "$OUTPUT_DIR"
|
||
|
|
tar -czf "${PREFIX_NAME}.tar.gz" "$PREFIX_NAME"
|
||
|
|
sha256sum "$PREFIX_NAME" "${PREFIX_NAME}.tar.gz" > "${PREFIX_NAME}.sha256"
|
||
|
|
)
|
||
|
|
|
||
|
|
file "$OUTPUT_DIR/$PREFIX_NAME"
|
||
|
|
ldd "$OUTPUT_DIR/$PREFIX_NAME" || true
|
||
|
|
|
||
|
|
if file "$OUTPUT_DIR/$PREFIX_NAME" | grep -qi 'dynamically linked'; then
|
||
|
|
echo "error: output binary is still dynamically linked" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "build OK: $OUTPUT_DIR/$PREFIX_NAME"
|