Files
miaoDirectory/build.auto.release.sh
T

242 lines
6.3 KiB
Bash

#!/bin/bash
# 解析命令行参数
FULL_BUILD=false
FAST_COMPRESSION=false
for arg in "$@"; do
case $arg in
-full)
FULL_BUILD=true
;;
-fast)
FAST_COMPRESSION=true
;;
esac
done
# 检查UPX是否存在
check_upx() {
if command -v upx &> /dev/null; then
echo "UPX已找到,将执行可执行文件压缩"
return 0
else
echo "UPX未找到,跳过压缩步骤"
return 1
fi
}
# 清理已有构建产物
echo "清理已有构建产物..."
# 基础前缀
PREFIX="miao-directory"
# 基础构建产物
BASE_ARCHOS=(
"amd64-win.exe"
"amd64-win.upx.exe"
"amd64-win.gui.exe"
"amd64-win.gui.upx.exe"
"amd64-linux"
"amd64-linux.upx"
)
# 清理基础构建产物
for suffix in "${BASE_ARCHOS[@]}"; do
[ -f "./$PREFIX-$suffix" ] && rm "./$PREFIX-$suffix"
done
# 如果是完整构建,清理额外架构产物
if [ "$FULL_BUILD" = true ]; then
echo "完整构建模式,清理额外架构产物..."
# 无需添加x-前缀的特殊版本
SPECIAL_ARCHOS=(
"arm64-linux"
"arm64-linux.upx"
"amd64-darwin"
"amd64-darwin.upx"
"arm64-darwin"
"arm64-darwin.upx"
"arm64-win.exe"
)
# 清理特殊版本产物
for suffix in "${SPECIAL_ARCHOS[@]}"; do
[ -f "./$PREFIX-$suffix" ] && rm "./$PREFIX-$suffix"
done
# 处理带x-前缀的不同系统和架构
X_OS_ARCHS=(
# FreeBSD系列
"freebsd:amd64,arm64,386"
# OpenBSD系列
"openbsd:amd64,arm64,386"
# Windows额外架构
"win.exe:386"
# Linux额外架构
"linux:386,mips,mips64,mips64le,ppc64,ppc64le,riscv64,s390x"
)
# 清理带x-前缀的版本产物
for os_arch in "${X_OS_ARCHS[@]}"; do
# 分离操作系统和架构列表
IFS=":" read -r os archs <<< "$os_arch"
# 处理每个架构
IFS="," read -ra arch_array <<< "$archs"
for arch in "${arch_array[@]}"; do
file="$PREFIX-x-$arch-$os"
[ -f "./$file" ] && rm "./$file"
done
done
fi
echo "构建前端..."
pnpm run build
echo "复制前端文件到服务端..."
rm -rf ./src-server/web/*
mkdir -p ./src-server/web/
cp -r ./dist/* ./src-server/web/
cd ./src-server
# ===== 构建阶段 =====
echo "===== 开始构建阶段 ====="
# 基础构建 - 始终构建的版本
echo "构建基础版本..."
# Windows AMD64 无GUI
echo "构建 Windows AMD64 无GUI 版本"
go env -w GOOS=windows GOARCH=amd64
go build -ldflags="-s -w" -o ../miao-directory-amd64-win.exe
# Linux AMD64 无GUI
echo "构建 Linux AMD64 无GUI 版本"
go env -w GOOS=linux GOARCH=amd64
export CGO_ENABLED=0
go build -ldflags="-s -w" -o ../miao-directory-amd64-linux
export CGO_ENABLED=1
# Windows AMD64 GUI
echo "构建 Windows AMD64 GUI 版本"
go env -w GOOS=windows GOARCH=amd64
go build -tags webview -ldflags="-s -w -H=windowsgui" -o ../miao-directory-amd64-win.gui.exe
# 完整构建 - 额外的系统和架构
if [ "$FULL_BUILD" = true ]; then
echo "构建额外架构版本..."
# 备份resource.syso文件(如果存在)
if [ -f "resource.syso" ]; then
echo "备份resource.syso文件"
mv resource.syso resource.syso.bak
fi
# 无需GUI和syso的构建批次
export CGO_ENABLED=0
# 定义操作系统和架构映射
declare -A OS_ARCHS
OS_ARCHS["linux"]="arm64 386 mips mips64 mips64le ppc64 ppc64le riscv64 s390x"
OS_ARCHS["darwin"]="amd64 arm64"
OS_ARCHS["windows"]="arm64 386"
OS_ARCHS["freebsd"]="amd64 arm64 386"
OS_ARCHS["openbsd"]="amd64 arm64 386"
# OS_ARCHS["netbsd"]="amd64 arm64 386"
# 遍历操作系统和架构进行构建
for os in "${!OS_ARCHS[@]}"; do
echo "构建 ${os^} 系列版本..."
go env -w GOOS=$os
# 获取当前操作系统支持的架构列表
archs=${OS_ARCHS[$os]}
for arch in $archs; do
# 设置输出文件名后缀
suffix=""
if [ "$os" = "windows" ]; then
suffix=".exe"
fi
echo "构建 ${os^} ${arch^^} 版本"
go env -w GOARCH=$arch
# 根据条件设置不同的输出文件名格式
if [[ "$os" == "darwin" || ("$os" == "linux" && "$arch" == "arm64") || ("$os" == "windows" && "$arch" == "arm64") ]]; then
output_file="../miao-directory-${arch}-${os}${suffix}"
else
output_file="../miao-directory-x-${arch}-${os}${suffix}"
fi
go build -ldflags="-s -w" -o "$output_file"
done
done
# 恢复resource.syso文件
if [ -f "resource.syso.bak" ]; then
echo "恢复resource.syso文件"
mv resource.syso.bak resource.syso
fi
export CGO_ENABLED=1
fi
# ===== 压缩阶段 =====
echo "===== 开始压缩阶段 ====="
# 检查是否可以进行UPX压缩
if check_upx; then
echo "开始压缩所有可执行文件..."
# 设置压缩级别
COMPRESSION_LEVEL="--ultra-brute"
if [ "$FAST_COMPRESSION" = true ]; then
echo "使用快速压缩模式"
COMPRESSION_LEVEL="--fast"
else
echo "使用极限压缩模式"
fi
# 压缩基础版本
echo "压缩基础版本..."
# 压缩Windows无GUI版本
echo "正在压缩Windows AMD64无GUI版本"
upx $COMPRESSION_LEVEL -o ../miao-directory-amd64-win.upx.exe ../miao-directory-amd64-win.exe
# 压缩Linux AMD64版本
echo "正在压缩Linux AMD64版本"
upx $COMPRESSION_LEVEL -o ../miao-directory-amd64-linux.upx ../miao-directory-amd64-linux
# 压缩Windows GUI版本
echo "正在压缩Windows AMD64 GUI版本"
upx $COMPRESSION_LEVEL -o ../miao-directory-amd64-win.gui.upx.exe ../miao-directory-amd64-win.gui.exe
# 压缩额外架构版本
if [ "$FULL_BUILD" = true ]; then
echo "压缩额外架构版本..."
# 压缩Linux ARM64版本
echo "正在压缩Linux ARM64版本"
upx $COMPRESSION_LEVEL -o ../miao-directory-arm64-linux.upx ../miao-directory-arm64-linux
# # 压缩macOS AMD64版本
# echo "正在压缩macOS AMD64版本"
# upx $COMPRESSION_LEVEL -o ../miao-directory-amd64-darwin.upx ../miao-directory-amd64-darwin
# # 压缩macOS ARM64版本
# echo "正在压缩macOS ARM64版本"
# upx $COMPRESSION_LEVEL -o ../miao-directory-arm64-darwin.upx ../miao-directory-arm64-darwin
fi
echo "所有压缩完成"
fi
echo "构建完成"
echo "构建模式: $([ "$FULL_BUILD" = true ] && echo "完整构建" || echo "基础构建")"
echo "压缩模式: $([ "$FAST_COMPRESSION" = true ] && echo "快速压缩" || echo "极限压缩")"