#!/bin/bash set -euo pipefail WORKSPACE_PATH="/Users/wenzhe/dev/workspace/go/projs/qiusheng/xinchun2026/h5-poster-project" APP_NAME="__UNI__86304DC" VARIANT="jiangsu" # App 发布路径 APP_SOURCE_DIR="./unpackage/resources/$APP_NAME" APP_TARGET_DIR="$WORKSPACE_PATH/app/src/$VARIANT/assets/apps/$APP_NAME" # H5 发布路径 H5_SOURCE_DIR="./unpackage/dist/build/web" H5_TARGET_DIR="$WORKSPACE_PATH/h5" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') $*"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') $*"; } log_error() { echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') $*"; } # 显示使用帮助 show_help() { echo "用法: $0 [app|h5]" echo "" echo "参数:" echo " app 发布 App 版本 (默认)" echo " h5 发布 H5 版本" echo "" echo "示例:" echo " $0 app # 发布 App" echo " $0 h5 # 发布 H5" } # 检查 rsync 是否可用 check_rsync() { if ! command -v rsync &> /dev/null; then log_error "rsync 命令未找到,请确保已安装" exit 1 fi log_info "使用 rsync 版本: $(rsync --version | head -n1)" } # 同步文件函数 sync_files() { local source_dir="$1" local target_dir="$2" local deploy_type="$3" log_info "开始部署: $deploy_type" # 检查源目录 if [ ! -d "$source_dir" ]; then log_error "源目录不存在: $source_dir" exit 1 fi # 创建目标父目录 mkdir -p "$target_dir" # 统计源目录信息 local source_size=$(du -sh "$source_dir" 2>/dev/null | cut -f1 || echo "未知") local source_count=$(find "$source_dir" -type f 2>/dev/null | wc -l) log_info "源目录信息: 大小=${source_size}, 文件数=${source_count}" log_info "开始同步文件..." # 使用 rsync 同步 if rsync -az --delete --progress --exclude='.DS_Store' "$source_dir/" "$target_dir/"; then log_info "同步完成!" # 验证同步结果 if [ -d "$target_dir" ]; then local target_size=$(du -sh "$target_dir" 2>/dev/null | cut -f1 || echo "未知") local target_count=$(find "$target_dir" -type f 2>/dev/null | wc -l) log_info "目标目录信息: 大小=${target_size}, 文件数=${target_count}" if [ "$source_count" -eq "$target_count" ]; then log_info "✓ 文件数量验证通过" else log_warn "⚠ 文件数量不匹配: 源=$source_count, 目标=$target_count" fi fi else log_error "rsync 同步失败!" exit 1 fi } main() { local deploy_type="${1:-h5}" # 检查 rsync check_rsync case "$deploy_type" in app) log_info "========== 开始 App 发布 ==========" sync_files "$APP_SOURCE_DIR" "$APP_TARGET_DIR" "App" log_info "========== App 发布完成 ==========" ;; h5) log_info "========== 开始 H5 发布 ==========" sync_files "$H5_SOURCE_DIR" "$H5_TARGET_DIR" "H5" log_info "========== H5 发布完成 ==========" ;; help|--help|-h) show_help exit 0 ;; *) log_error "未知的发布类型: $deploy_type" show_help exit 1 ;; esac } main "$@"