#!/bin/bash # ============================================================ # Cyrene 项目迁移打包脚本 # 用途: 在 Linux 环境下生成干净的源代码压缩包, # 用于迁移到 Windows 平台。 # 用法: bash scripts/migrate.sh [输出目录] # ============================================================ set -euo pipefail # 输出目录,默认为 /tmp OUTPUT_DIR="${1:-/tmp}" TIMESTAMP=$(date +%Y%m%d_%H%M%S) ARCHIVE_NAME="cyrene-source-${TIMESTAMP}.tar.gz" PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" echo "=== Cyrene 源码打包 ===" echo "项目根目录: ${PROJECT_ROOT}" echo "输出文件: ${OUTPUT_DIR}/${ARCHIVE_NAME}" echo "" # 确保输出目录存在 mkdir -p "${OUTPUT_DIR}" cd "${PROJECT_ROOT}" echo "正在打包..." # 打包源码,排除二进制和编译产物 # --exclude 规则说明: # *.exe - Windows 可执行文件(旧的编译产物) # backend/*/main - Go 编译生成的 Linux 二进制 # backend/*/cmd/* (非.go) - 各服务的编译产物 # node_modules - Node.js 依赖 # dist - 前端构建产物 # .env - 敏感配置文件 # *.log / logs/ - 日志文件 # tmp/ - 临时文件 # .git/objects/refs/logs - Git 内部数据(保留 HEAD 和 config) # package-lock.json - 锁文件(跨平台重新生成) # tar -czf "${OUTPUT_DIR}/${ARCHIVE_NAME}" \ --exclude='*.exe' \ --exclude='main' \ --exclude='backend/ai-core/main' \ --exclude='backend/ai-core/cmd/ai-core' \ --exclude='backend/gateway/main' \ --exclude='backend/gateway/cmd/main' \ --exclude='backend/memory-service/main' \ --exclude='backend/memory-service/cmd/memory-service' \ --exclude='backend/tool-engine/cmd/tool-engine' \ --exclude='backend/iot-debug-service/cmd/iot-debug-service' \ --exclude='backend/voice-service/cmd/voice-service' \ --exclude='node_modules' \ --exclude='frontend/web/node_modules' \ --exclude='frontend/web/dist' \ --exclude='frontend/node_modules' \ --exclude='devtools/node_modules' \ --exclude='frontend/packages/*/node_modules' \ --exclude='.env' \ --exclude='backend/.env' \ --exclude='*.log' \ --exclude='logs/' \ --exclude='debug/logs/' \ --exclude='debug/logs/chromium/' \ --exclude='tmp/' \ --exclude='.git/objects' \ --exclude='.git/refs' \ --exclude='.git/logs' \ --exclude='package-lock.json' \ --exclude='frontend/web/package-lock.json' \ --exclude='frontend/package-lock.json' \ --exclude='frontend/packages/*/package-lock.json' \ . echo "" echo "✅ 打包完成!" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "文件: ${OUTPUT_DIR}/${ARCHIVE_NAME}" echo "大小: $(du -h "${OUTPUT_DIR}/${ARCHIVE_NAME}" | cut -f1)" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo "=== 迁移到 Windows 的步骤 ===" echo "1. 将 ${ARCHIVE_NAME} 传输到 Windows 机器(U盘 / 网络共享 / scp)" echo "2. 在 Windows 上解压: tar -xzf ${ARCHIVE_NAME}" echo "3. 阅读 Migration.md 了解完整迁移流程" echo "4. 复制 backend/.env.example 为 backend/.env 并填入实际配置" echo "5. 编译并启动服务(参考 Migration.md 第 6 章)" echo "" echo "提示: 压缩包中已包含文档 docs/ 和 Migration.md,解压后即可查看。"