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.
 
 
 
tetris/build.sh

267 lines
6.7 KiB

#!/bin/bash
# Tetris Game 自动化构建脚本
# 支持 Windows、macOS 和 Linux 平台
set -e # 遇到错误立即退出
# 颜色定义
BLUE='\033[34m'
GREEN='\033[32m'
YELLOW='\033[33m'
RED='\033[31m'
RESET='\033[0m'
# 配置
VERSION="1.0"
BUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S')
GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
# 函数:打印带颜色的消息
print_info() {
echo -e "${BLUE} $1${RESET}"
}
print_success() {
echo -e "${GREEN}$1${RESET}"
}
print_warning() {
echo -e "${YELLOW} $1${RESET}"
}
print_error() {
echo -e "${RED}$1${RESET}"
}
# 函数:显示帮助信息
show_help() {
echo -e "${BLUE}🎮 Tetris Game 自动化构建脚本${RESET}"
echo ""
echo "用法: $0 [选项] [平台]"
echo ""
echo "平台:"
echo " windows 构建 Windows 版本"
echo " macos 构建 macOS 版本"
echo " linux 构建 Linux 版本"
echo " all 构建所有平台 (默认)"
echo ""
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -c, --clean 构建前清理"
echo " -v, --verify 构建后验证"
echo " -i, --info 显示构建信息"
echo " --no-color 禁用颜色输出"
echo ""
echo "示例:"
echo " $0 # 构建所有平台"
echo " $0 windows # 仅构建 Windows"
echo " $0 -c all # 清理后构建所有平台"
echo " $0 -cv macos # 清理、构建 macOS 并验证"
}
# 函数:显示构建信息
show_info() {
print_info "构建信息"
echo " 版本: v${VERSION}"
echo " 构建时间: ${BUILD_TIME}"
echo " Git 提交: ${GIT_COMMIT}"
echo " Go 版本: $(go version 2>/dev/null || echo '未安装')"
echo " 当前平台: $(go env GOOS 2>/dev/null || echo 'unknown')/$(go env GOARCH 2>/dev/null || echo 'unknown')"
echo " 工作目录: $(pwd)"
}
# 函数:检查环境
check_environment() {
print_info "检查构建环境..."
# 检查 Go
if ! command -v go &> /dev/null; then
print_error "Go 未安装或不在 PATH 中"
exit 1
fi
print_success "Go 环境正常"
# 检查必要文件
if [ ! -f "main.go" ]; then
print_error "main.go 文件不存在"
exit 1
fi
if [ ! -d "assets" ]; then
print_error "assets 目录不存在"
exit 1
fi
print_success "源代码文件检查通过"
}
# 函数:清理构建文件
clean_build() {
print_info "清理构建文件..."
make clean
print_success "清理完成"
}
# 函数:构建指定平台
build_platform() {
local platform=$1
print_info "构建 ${platform} 版本..."
case $platform in
windows)
make windows
;;
macos)
make macos
;;
linux)
make linux
;;
all)
make all
;;
*)
print_error "不支持的平台: $platform"
exit 1
;;
esac
print_success "${platform} 构建完成"
}
# 函数:验证构建结果
verify_build() {
print_info "验证构建结果..."
make verify
print_success "验证完成"
}
# 函数:显示构建结果摘要
show_summary() {
echo ""
print_success "🎉 构建完成!"
echo ""
print_info "构建结果摘要:"
if [ -d "dist" ]; then
echo " 分发目录: dist/"
# 显示文件大小
if [ -f "dist/TetrisGame-Windows-v1.0.zip" ]; then
local size=$(ls -lh dist/TetrisGame-Windows-v1.0.zip | awk '{print $5}')
echo " Windows 版本: TetrisGame-Windows-v1.0.zip (${size})"
fi
if [ -f "dist/TetrisGame-macOS-v1.0.dmg" ]; then
local size=$(ls -lh dist/TetrisGame-macOS-v1.0.dmg | awk '{print $5}')
echo " macOS 版本: TetrisGame-macOS-v1.0.dmg (${size})"
fi
if [ -f "dist/TetrisGame-Linux-v1.0.tar.gz" ]; then
local size=$(ls -lh dist/TetrisGame-Linux-v1.0.tar.gz | awk '{print $5}')
echo " Linux 版本: TetrisGame-Linux-v1.0.tar.gz (${size})"
fi
echo ""
print_info "总计文件数: $(find dist/ -type f -name '*.zip' -o -name '*.dmg' -o -name '*.tar.gz' | wc -l | tr -d ' ')"
# 计算总大小
local total_size=$(find dist/ -type f -name '*.zip' -o -name '*.dmg' -o -name '*.tar.gz' -exec ls -l {} \; | awk '{sum += $5} END {print sum}')
if [ -n "$total_size" ] && [ "$total_size" -gt 0 ]; then
local total_mb=$((total_size / 1024 / 1024))
echo " 总大小: ${total_mb}MB"
fi
else
print_warning "dist 目录不存在"
fi
echo ""
print_info "使用说明:"
echo " - 查看详细文档: cat BUILD.md"
echo " - 验证构建: make verify"
echo " - 运行游戏: make run"
}
# 主函数
main() {
local platform="all"
local clean_first=false
local verify_after=false
local show_info_only=false
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-c|--clean)
clean_first=true
shift
;;
-v|--verify)
verify_after=true
shift
;;
-i|--info)
show_info_only=true
shift
;;
--no-color)
# 禁用颜色
BLUE=''
GREEN=''
YELLOW=''
RED=''
RESET=''
shift
;;
windows|macos|linux|all)
platform=$1
shift
;;
*)
print_error "未知参数: $1"
echo "使用 $0 --help 查看帮助"
exit 1
;;
esac
done
# 显示标题
echo -e "${BLUE}🎮 Tetris Game 自动化构建脚本 v${VERSION}${RESET}"
echo ""
# 如果只是显示信息
if [ "$show_info_only" = true ]; then
show_info
exit 0
fi
# 检查环境
check_environment
# 清理(如果需要)
if [ "$clean_first" = true ]; then
clean_build
fi
# 构建
build_platform "$platform"
# 验证(如果需要)
if [ "$verify_after" = true ]; then
verify_build
fi
# 显示摘要
show_summary
}
# 错误处理
trap 'print_error "构建过程中发生错误,退出码: $?"' ERR
# 运行主函数
main "$@"