Files
FunConnect/scripts/build.sh

142 lines
2.7 KiB
Bash

#!/bin/bash
# FunMC 构建脚本 (Linux/macOS)
# 用于构建所有组件
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
TARGET="all"
RELEASE=false
BUNDLE=false
print_usage() {
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " -t, --target <target> 构建目标 (all, client, server, relay) [默认: all]"
echo " -r, --release 构建发布版本"
echo " -b, --bundle 打包客户端安装包"
echo " -h, --help 显示帮助信息"
}
while [[ $# -gt 0 ]]; do
case $1 in
-t|--target)
TARGET="$2"
shift 2
;;
-r|--release)
RELEASE=true
shift
;;
-b|--bundle)
BUNDLE=true
shift
;;
-h|--help)
print_usage
exit 0
;;
*)
echo "未知选项: $1"
print_usage
exit 1
;;
esac
done
log_step() {
echo -e "\n\033[36m==> $1\033[0m"
}
log_success() {
echo -e "\033[32m$1\033[0m"
}
build_server() {
log_step "构建主服务端..."
cd "$ROOT_DIR/server"
if $RELEASE; then
cargo build --release
else
cargo build
fi
log_success "主服务端构建完成!"
}
build_relay() {
log_step "构建中继服务端..."
cd "$ROOT_DIR/relay-server"
if $RELEASE; then
cargo build --release
else
cargo build
fi
log_success "中继服务端构建完成!"
}
build_client() {
log_step "构建客户端..."
cd "$ROOT_DIR/client"
# 安装前端依赖
echo "安装前端依赖..."
cd ui
npm install
cd ..
# 构建 Tauri 应用
if $BUNDLE; then
if $RELEASE; then
cargo tauri build
else
cargo tauri build --debug
fi
else
if $RELEASE; then
cargo build --release
else
cargo build
fi
fi
log_success "客户端构建完成!"
}
echo -e "\033[33mFunMC 构建系统\033[0m"
echo "==============="
case $TARGET in
all)
build_server
build_relay
build_client
;;
client)
build_client
;;
server)
build_server
;;
relay)
build_relay
;;
*)
echo "无效的构建目标: $TARGET"
exit 1
;;
esac
echo -e "\n\033[32m所有构建完成!\033[0m"
if $BUNDLE && [[ "$TARGET" == "all" || "$TARGET" == "client" ]]; then
echo -e "\n\033[33m客户端安装包位置:\033[0m"
echo "$ROOT_DIR/client/target/release/bundle/"
fi