Files
onvif-go/build-release.sh
T

113 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# build-release.sh - Build release binaries locally
set -e
VERSION=${1:-$(git describe --tags --always --dirty 2>/dev/null || echo "dev")}
echo "Building release binaries for version: $VERSION"
# Clean previous builds
rm -rf bin releases
mkdir -p bin releases
# Platforms to build
PLATFORMS=(
"linux/amd64"
"linux/arm64"
"linux/arm"
"windows/amd64"
"windows/arm64"
"darwin/amd64"
"darwin/arm64"
)
# Binaries to build
BINARIES=(
"onvif-cli"
"onvif-quick"
"onvif-server"
"onvif-diagnostics"
)
LDFLAGS="-s -w -X main.Version=${VERSION} -X main.Commit=$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')"
echo "Building binaries..."
for platform in "${PLATFORMS[@]}"; do
OS="${platform%/*}"
ARCH="${platform#*/}"
echo ""
echo "Building for $OS/$ARCH..."
for binary in "${BINARIES[@]}"; do
OUTPUT="bin/${binary}-${OS}-${ARCH}"
if [ "$OS" = "windows" ]; then
OUTPUT="${OUTPUT}.exe"
fi
echo " - ${binary}"
GOOS=$OS GOARCH=$ARCH CGO_ENABLED=0 go build -ldflags="${LDFLAGS}" -o "$OUTPUT" "./cmd/${binary}" 2>/dev/null || {
echo " ⚠️ Skipped (build failed)"
continue
}
done
done
echo ""
echo "Creating release archives..."
cd bin
for platform in "${PLATFORMS[@]}"; do
OS="${platform%/*}"
ARCH="${platform#*/}"
ARCHIVE_NAME="onvif-go-${VERSION}-${OS}-${ARCH}"
# Check if any binary exists for this platform
if [ "$OS" = "windows" ]; then
FILES=(*-${OS}-${ARCH}.exe)
else
FILES=(*-${OS}-${ARCH})
fi
# Skip if no files found
if [ "${FILES[0]}" = "*-${OS}-${ARCH}" ] || [ "${FILES[0]}" = "*-${OS}-${ARCH}.exe" ]; then
continue
fi
echo " Creating archive for ${OS}/${ARCH}..."
if [ "$OS" = "windows" ]; then
# ZIP for Windows
zip -q "../releases/${ARCHIVE_NAME}.zip" *-${OS}-${ARCH}.exe ../README.md ../LICENSE
else
# tar.gz for Unix-like
tar czf "../releases/${ARCHIVE_NAME}.tar.gz" *-${OS}-${ARCH} -C .. README.md LICENSE
fi
done
cd ..
echo ""
echo "Generating checksums..."
cd releases
if command -v sha256sum >/dev/null 2>&1; then
sha256sum * > checksums.txt
else
shasum -a 256 * > checksums.txt
fi
cd ..
echo ""
echo "✅ Build complete!"
echo ""
echo "Binaries in: $(pwd)/bin/"
echo "Archives in: $(pwd)/releases/"
echo ""
ls -lh releases/
echo ""
echo "To create a GitHub release, run:"
echo " gh release create ${VERSION} releases/* --title \"Release ${VERSION}\" --notes \"Release notes here\""