Files
re-teamspeak/build.sh
T
ReTeamSpeak ea08823c97
CI/CD / Build Frontend (push) Failing after 11s
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
CI/CD / Test (ubuntu-latest) (push) Failing after 2s
Initial commit: ReTeamSpeak cross-platform TeamSpeak client
- tscore: Protocol implementation (packets, crypto, connection handshake)
- tsaudio: Audio engine (capture, playback, codec, VAD, jitter buffer)
- tsdb: SQLite database (identities, bookmarks, messages, settings)
- shared: Core types and events
- tauri-app: Tauri v2 desktop application with React frontend
- docs: SRS, SAD, SDD documentation
- CI/CD: GitHub Actions workflow
- 32 unit tests passing
2026-05-12 14:41:54 +09:00

183 lines
3.7 KiB
Bash

#!/bin/bash
# ReTeamSpeak 跨平台构建脚本
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$SCRIPT_DIR"
BUILD_DIR="$PROJECT_DIR/build"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查依赖
check_dependencies() {
log_info "检查依赖..."
# 检查 Rust
if ! command -v rustc &> /dev/null; then
log_error "Rust 未安装。请访问 https://rustup.rs 安装 Rust。"
exit 1
fi
# 检查 Node.js
if ! command -v node &> /dev/null; then
log_error "Node.js 未安装。请访问 https://nodejs.org 安装 Node.js。"
exit 1
fi
# 检查 npm
if ! command -v npm &> /dev/null; then
log_error "npm 未安装。"
exit 1
fi
log_info "依赖检查完成。"
}
# 构建前端
build_frontend() {
log_info "构建前端..."
cd "$PROJECT_DIR/src/tauri-app/frontend"
npm install
npm run build
log_info "前端构建完成。"
}
# 构建桌面应用
build_desktop() {
log_info "构建桌面应用..."
cd "$PROJECT_DIR/src/tauri-app/src-tauri"
cargo build --release
log_info "桌面应用构建完成。"
}
# 构建 Android 应用
build_android() {
log_info "构建 Android 应用..."
cd "$PROJECT_DIR/src/tauri-app/src-tauri"
# 检查 Android SDK
if [ -z "$ANDROID_HOME" ]; then
log_error "ANDROID_HOME 环境变量未设置。"
exit 1
fi
cargo tauri android build
log_info "Android 应用构建完成。"
}
# 构建 iOS 应用
build_ios() {
log_info "构建 iOS 应用..."
cd "$PROJECT_DIR/src/tauri-app/src-tauri"
# 检查 Xcode
if ! command -v xcodebuild &> /dev/null; then
log_error "Xcode 未安装。"
exit 1
fi
cargo tauri ios build
log_info "iOS 应用构建完成。"
}
# 构建所有平台
build_all() {
log_info "构建所有平台..."
build_frontend
build_desktop
# 检查是否在 macOS 上
if [[ "$OSTYPE" == "darwin"* ]]; then
build_ios
fi
# 检查 Android SDK
if [ -n "$ANDROID_HOME" ]; then
build_android
fi
log_info "所有平台构建完成。"
}
# 清理构建
clean() {
log_info "清理构建..."
rm -rf "$BUILD_DIR"
cd "$PROJECT_DIR/src/tauri-app/src-tauri"
cargo clean
cd "$PROJECT_DIR/src/tauri-app/frontend"
rm -rf node_modules dist
log_info "清理完成。"
}
# 显示帮助
show_help() {
echo "用法: $0 [命令]"
echo ""
echo "命令:"
echo " all 构建所有平台"
echo " desktop 构建桌面应用"
echo " android 构建 Android 应用"
echo " ios 构建 iOS 应用"
echo " frontend 构建前端"
echo " clean 清理构建"
echo " help 显示帮助"
echo ""
echo "示例:"
echo " $0 all # 构建所有平台"
echo " $0 desktop # 仅构建桌面应用"
echo " $0 android # 仅构建 Android 应用"
}
# 主函数
main() {
check_dependencies
case "${1:-help}" in
all)
build_all
;;
desktop)
build_frontend
build_desktop
;;
android)
build_frontend
build_android
;;
ios)
build_frontend
build_ios
;;
frontend)
build_frontend
;;
clean)
clean
;;
help|*)
show_help
;;
esac
}
main "$@"