You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.1 KiB
143 lines
3.1 KiB
#!/bin/bash
|
|
|
|
# 设置颜色代码 / Set color codes
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color / 无颜色
|
|
|
|
# Build optimization flags
|
|
OPTIMIZATION_FLAGS="-trimpath -ldflags=\"-s -w\""
|
|
PARALLEL_JOBS=$(nproc || echo "4") # Get number of CPU cores or default to 4
|
|
|
|
# Messages / 消息
|
|
EN_MESSAGES=(
|
|
"Starting build process for version"
|
|
"Cleaning old builds..."
|
|
"Creating bin directory..."
|
|
"Failed to create bin directory"
|
|
"Building for"
|
|
"Successfully built:"
|
|
"Failed to build for"
|
|
"Build Summary:"
|
|
"Successful builds:"
|
|
"Failed builds:"
|
|
"Generated files:"
|
|
)
|
|
|
|
CN_MESSAGES=(
|
|
"开始构建版本"
|
|
"正在清理旧的构建文件..."
|
|
"正在创建bin目录..."
|
|
"创建bin目录失败"
|
|
"正在构建"
|
|
"构建成功:"
|
|
"构建失败:"
|
|
"构建摘要:"
|
|
"成功构建数:"
|
|
"失败构建数:"
|
|
"生成的文件:"
|
|
"构建过程被中断"
|
|
"错误:"
|
|
)
|
|
|
|
# 版本信息 / Version info
|
|
VERSION="1.0.0"
|
|
|
|
# Detect system language / 检测系统语言
|
|
detect_language() {
|
|
if [[ $(locale | grep "LANG=zh_CN") ]]; then
|
|
echo "cn"
|
|
else
|
|
echo "en"
|
|
fi
|
|
}
|
|
|
|
# Get message based on language / 根据语言获取消息
|
|
get_message() {
|
|
local index=$1
|
|
local lang=$(detect_language)
|
|
|
|
if [[ "$lang" == "cn" ]]; then
|
|
echo "${CN_MESSAGES[$index]}"
|
|
else
|
|
echo "${EN_MESSAGES[$index]}"
|
|
fi
|
|
}
|
|
|
|
# 错误处理函数 / Error handling function
|
|
handle_error() {
|
|
echo -e "${RED}$(get_message 12) $1${NC}"
|
|
exit 1
|
|
}
|
|
|
|
# 清理函数 / Cleanup function
|
|
cleanup() {
|
|
if [ -d "../bin" ]; then
|
|
rm -rf ../bin
|
|
echo -e "${GREEN}$(get_message 1)${NC}"
|
|
fi
|
|
}
|
|
|
|
# Build function with optimizations
|
|
build() {
|
|
local os=$1
|
|
local arch=$2
|
|
local ext=""
|
|
[ "$os" = "windows" ] && ext=".exe"
|
|
|
|
echo -e "${GREEN}$(get_message 4) $os/$arch${NC}"
|
|
|
|
GOOS=$os GOARCH=$arch CGO_ENABLED=0 go build \
|
|
-trimpath \
|
|
-ldflags="-s -w" \
|
|
-o "../bin/$os/$arch/cursor-id-modifier$ext" \
|
|
-a -installsuffix cgo \
|
|
-mod=readonly \
|
|
../cmd/cursor-id-modifier &
|
|
}
|
|
|
|
# Parallel build execution
|
|
build_all() {
|
|
local builds=0
|
|
local max_parallel=$PARALLEL_JOBS
|
|
|
|
# Define build targets
|
|
declare -A targets=(
|
|
["linux/amd64"]=1
|
|
["linux/386"]=1
|
|
["linux/arm64"]=1
|
|
["windows/amd64"]=1
|
|
["windows/386"]=1
|
|
["darwin/amd64"]=1
|
|
["darwin/arm64"]=1
|
|
)
|
|
|
|
for target in "${!targets[@]}"; do
|
|
IFS='/' read -r os arch <<< "$target"
|
|
build "$os" "$arch"
|
|
|
|
((builds++))
|
|
|
|
if ((builds >= max_parallel)); then
|
|
wait
|
|
builds=0
|
|
fi
|
|
done
|
|
|
|
# Wait for remaining builds
|
|
wait
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
cleanup
|
|
mkdir -p ../bin || { echo -e "${RED}$(get_message 3)${NC}"; exit 1; }
|
|
build_all
|
|
echo -e "${GREEN}Build completed successfully${NC}"
|
|
}
|
|
|
|
# 捕获错误信号 / Catch error signals
|
|
trap 'echo -e "\n${RED}$(get_message 11)${NC}"; exit 1' INT TERM
|
|
|
|
# 执行主函数 / Execute main function
|
|
main
|