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
- 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
183 lines
3.7 KiB
Bash
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 "$@"
|