113 lines
2.6 KiB
Bash
113 lines
2.6 KiB
Bash
#!/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\""
|