-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild
More file actions
executable file
·78 lines (63 loc) · 1.92 KB
/
Copy pathbuild
File metadata and controls
executable file
·78 lines (63 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env bash
set -e
APP_NAME="dvs"
# VERSION="v1.0.0" # optional: tag version
OUTPUT_DIR="releases"
# List of OS/ARCH combinations
PLATFORMS=(
"linux/amd64"
"linux/arm64"
"darwin/amd64"
"darwin/arm64"
"windows/amd64"
"windows/arm64"
)
# Clean and recreate output directory
rm -rf "$OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"
CHECKSUM_FILE="${OUTPUT_DIR}/checksums.txt"
for PLATFORM in "${PLATFORMS[@]}"; do
IFS="/" read -r GOOS GOARCH <<<"$PLATFORM"
BIN_NAME="$APP_NAME"
ARCHIVE_NAME="${APP_NAME}-${GOOS}-${GOARCH}"
if [ "$GOOS" = "windows" ]; then
BIN_NAME="${APP_NAME}.exe"
ARCHIVE_FILE="${OUTPUT_DIR}/${ARCHIVE_NAME}.zip"
else
ARCHIVE_FILE="${OUTPUT_DIR}/${ARCHIVE_NAME}.tar.gz"
fi
echo "→ Building for $GOOS/$GOARCH"
# Set env vars and build with reproducible flags
env GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=0 go build \
-ldflags="-s -w" \
-trimpath \
-o "$BIN_NAME"
# Generate checksum for the binary before packaging
if command -v sha256sum >/dev/null 2>&1; then
echo "$(sha256sum "$BIN_NAME" | cut -d' ' -f1) ${ARCHIVE_NAME}/${BIN_NAME}" >>"$CHECKSUM_FILE"
elif command -v shasum >/dev/null 2>&1; then
echo "$(shasum -a 256 "$BIN_NAME" | cut -d' ' -f1) ${ARCHIVE_NAME}/${BIN_NAME}" >>"$CHECKSUM_FILE"
else
echo "Warning: No SHA256 utility found, skipping checksum generation"
fi
# Package binary
mkdir -p tmp_build
mv "$BIN_NAME" tmp_build/
# Copy LICENSE and README files if they exist
for file in LICENSE README.md; do
if [ -f "$file" ]; then
cp "$file" tmp_build/
fi
done
if [[ "$ARCHIVE_FILE" == *.zip ]]; then
(cd tmp_build && zip -r "../$ARCHIVE_FILE" * >/dev/null)
else
(cd tmp_build && tar -czf "../$ARCHIVE_FILE" *)
fi
# Cleanup temp
rm -rf tmp_build
done
echo "✅ All binaries built and packaged in ./$OUTPUT_DIR"
if [ -f "$CHECKSUM_FILE" ]; then
echo "✅ Binary checksums generated in ./$CHECKSUM_FILE"
fi