-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.sh
More file actions
executable file
·145 lines (120 loc) · 3.77 KB
/
Copy pathbuild.sh
File metadata and controls
executable file
·145 lines (120 loc) · 3.77 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/sh
# goddns 构建脚本
# 用法:
# ./build.sh - 构建开发版本 (当前平台)
# ./build.sh v2.0.0 - 构建指定版本 (当前平台)
# ./build.sh v2.0.0 all - 构建指定版本 (所有平台)
# ./build.sh dev linux - 构建开发版本 (Linux 平台)
set -e
# ----------------------------------------------------------------------------
# 默认构建设置(可直接在此修改,无需在命令行传参)
# ----------------------------------------------------------------------------
# 版本号:如果想要打特定版本,请修改此处或使用环境变量 VERSION
VERSION="dev"
# 构建类型:current / all / linux / darwin
BUILD_TYPE="current"
# 允许通过命令行参数覆盖默认值(可选)
VERSION=${1:-${VERSION}}
BUILD_TYPE=${2:-${BUILD_TYPE}}
COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() {
echo "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo "${RED}[ERROR]${NC} $1"
}
# 清理旧二进制文件
cleanup() {
if [ -f "goddns" ]; then
log_info "Removing old binary..."
rm -f goddns
fi
# 清理交叉编译产物
if [ -d "build" ]; then
log_info "Cleaning build directory..."
rm -rf build
fi
}
# 构建函数
build() {
GOOS=$1
GOARCH=$2
OUTPUT_NAME="goddns"
if [ "$BUILD_TYPE" = "all" ]; then
OUTPUT_NAME="build/goddns-${GOOS}-${GOARCH}"
mkdir -p build
fi
log_info "Building goddns ${VERSION} for ${GOOS}/${GOARCH}..."
LDFLAGS="-X main.version=${VERSION} -X main.commit=${COMMIT} -X main.buildDate=${BUILD_DATE}"
GOOS=$GOOS GOARCH=$GOARCH go build \
-ldflags "$LDFLAGS" \
-o "$OUTPUT_NAME" \
./cmd/goddns
if [ $? -eq 0 ]; then
log_info "Build completed: $OUTPUT_NAME"
else
log_error "Build failed for ${GOOS}/${GOARCH}"
return 1
fi
}
# 主逻辑
case "$BUILD_TYPE" in
current)
# 构建当前平台
cleanup
log_info "Building goddns ${VERSION} (${COMMIT}) for current platform..."
build "$(go env GOOS)" "$(go env GOARCH)"
log_info "Build completed. Run './goddns version' to check version."
;;
all)
# 构建所有支持的平台
cleanup
log_info "Building goddns ${VERSION} (${COMMIT}) for all platforms..."
# Linux
build "linux" "amd64"
build "linux" "arm64"
build "linux" "arm"
# macOS
build "darwin" "amd64"
build "darwin" "arm64"
# FreeBSD
build "freebsd" "amd64"
# OpenBSD
build "openbsd" "amd64"
log_info "All builds completed. Check the 'build' directory for binaries."
;;
linux)
cleanup
log_info "Building goddns ${VERSION} for Linux..."
build "linux" "amd64"
build "linux" "arm64"
log_info "Linux builds completed."
;;
darwin)
cleanup
log_info "Building goddns ${VERSION} for macOS..."
build "darwin" "amd64"
build "darwin" "arm64"
log_info "macOS builds completed."
;;
*)
log_error "Unknown build type: $BUILD_TYPE"
echo "Usage: $0 [VERSION] [BUILD_TYPE]"
echo ""
echo "BUILD_TYPE options:"
echo " current - Build for current platform (default)"
echo " all - Build for all supported platforms"
echo " linux - Build for Linux (amd64, arm64)"
echo " darwin - Build for macOS (amd64, arm64)"
exit 1
;;
esac