From 8feffd53cd25bba925ced4dc5e204923088871e7 Mon Sep 17 00:00:00 2001 From: thzxx Date: Tue, 23 Jun 2026 20:12:46 +0800 Subject: [PATCH] chore: remove build-release.sh, docs/BUILD.md, release-notes.md, restore-build-cache.sh --- build-release.sh | 157 ----------------------------------- docs/BUILD.md | 183 ----------------------------------------- release-notes.md | 147 --------------------------------- restore-build-cache.sh | 97 ---------------------- 4 files changed, 584 deletions(-) delete mode 100755 build-release.sh delete mode 100644 docs/BUILD.md delete mode 100644 release-notes.md delete mode 100755 restore-build-cache.sh diff --git a/build-release.sh b/build-release.sh deleted file mode 100755 index 4de93f5..0000000 --- a/build-release.sh +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash -set -e - -PROJECT_DIR="/root/.openclaw/workspace/metona-ollama-desktop" -TOKEN="2faf8da068ae0944f7d40c265d21e651" -REPO="thzxx/metona-ollama-desktop" -VERSION="5.1.4" -LOG_FILE="/root/.openclaw/workspace/metona-ollama-desktop/build-v5.1.4.log" - -exec > >(tee -a "$LOG_FILE") 2>&1 - -echo "══════════════════════════════════════════════" -echo " Metona Ollama Desktop v${VERSION} 构建开始" -echo " $(date '+%Y-%m-%d %H:%M:%S')" -echo "══════════════════════════════════════════════" - -cd "$PROJECT_DIR" - -# ── Step 1: 检查环境 ── -echo "" -echo "▶ Step 1: 检查构建环境" -echo "──────────────────────" -node --version -npm --version -echo "OS: $(uname -a)" -echo "Wine: $(wine --version 2>/dev/null || echo 'NOT INSTALLED')" -echo "p7zip: $(7z 2>/dev/null | head -1 || echo 'NOT INSTALLED')" - -# ── Step 2: 确保在正确分支 ── -echo "" -echo "▶ Step 2: 确认分支" -echo "──────────────────────" -git checkout develop -git log --oneline -1 - -# ── Step 3: 安装依赖 ── -echo "" -echo "▶ Step 3: npm install" -echo "──────────────────────" -npm config set registry https://registry.npmmirror.com -ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm install 2>&1 -echo "npm install 完成" - -# ── Step 4: 构建 ── -echo "" -echo "▶ Step 4: npm run build" -echo "──────────────────────" -npm run build 2>&1 -echo "npm run build 完成" - -# ── Step 5: 打包 Windows 安装包 ── -echo "" -echo "▶ Step 5: npm run dist (Windows NSIS)" -echo "──────────────────────────────────────" -# 先尝试恢复构建缓存 -if [ -f restore-build-cache.sh ]; then - echo "尝试恢复构建缓存..." - bash restore-build-cache.sh 2>&1 || echo "构建缓存恢复失败,electron-builder 将自动下载" -fi - -ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist 2>&1 -echo "npm run dist 完成" - -# ── Step 6: 检查产物 ── -echo "" -echo "▶ Step 6: 检查构建产物" -echo "────────────────────────" -ls -lh release/*.exe 2>/dev/null || echo "未找到 .exe 文件!" -EXE_FILE=$(ls release/*Setup*.exe 2>/dev/null | head -1) -if [ -z "$EXE_FILE" ]; then - echo "❌ 构建失败:未找到安装包" - exit 1 -fi -echo "✅ 安装包: $EXE_FILE ($(du -h "$EXE_FILE" | cut -f1))" - -# ── Step 7: Gitee 发布 ── -echo "" -echo "▶ Step 7: Gitee 发布" -echo "──────────────────────" - -# 删除旧的 v5.1.4-desktop release(如有) -echo "检查旧 release..." -RELEASES=$(curl -s "https://gitee.com/api/v5/repos/${REPO}/releases?access_token=${TOKEN}&page=1&per_page=50") -OLD_RELEASE_ID=$(echo "$RELEASES" | python3 -c " -import sys, json -try: - releases = json.load(sys.stdin) - for r in releases: - if r.get('tag_name') == 'v${VERSION}-desktop': - print(r['id']) - break -except: pass -" 2>/dev/null) - -if [ -n "$OLD_RELEASE_ID" ]; then - echo "删除旧 release ID: $OLD_RELEASE_ID" - curl -s -X DELETE "https://gitee.com/api/v5/repos/${REPO}/releases/${OLD_RELEASE_ID}?access_token=${TOKEN}" > /dev/null - echo "旧 release 已删除" -fi - -# 创建新 release -echo "创建 v${VERSION}-desktop release..." -RELEASE_RESPONSE=$(curl -s -X POST "https://gitee.com/api/v5/repos/${REPO}/releases?access_token=${TOKEN}" \ - -H "Content-Type: application/json" \ - -d "{ - \"tag_name\": \"v${VERSION}-desktop\", - \"name\": \"v${VERSION}-desktop\", - \"body\": \"Metona Ollama Desktop v${VERSION}\\n\\n详见 [更新日志](https://gitee.com/thzxx/metona-ollama-desktop/blob/develop/docs/CHANGELOG.md)\", - \"target_commitish\": \"develop\" - }") - -RELEASE_ID=$(echo "$RELEASE_RESPONSE" | python3 -c " -import sys, json -try: - r = json.load(sys.stdin) - print(r.get('id', '')) -except: pass -" 2>/dev/null) - -if [ -z "$RELEASE_ID" ]; then - echo "❌ 创建 release 失败" - echo "$RELEASE_RESPONSE" - exit 1 -fi -echo "✅ Release 创建成功,ID: $RELEASE_ID" - -# 上传附件 -echo "上传安装包附件..." -UPLOAD_RESPONSE=$(curl -s -X POST "https://gitee.com/api/v5/repos/${REPO}/releases/${RELEASE_ID}/attach_files?access_token=${TOKEN}" \ - -H "Content-Type: multipart/form-data" \ - -F "file=@${EXE_FILE}") - -UPLOAD_SUCCESS=$(echo "$UPLOAD_RESPONSE" | python3 -c " -import sys, json -try: - r = json.load(sys.stdin) - if r.get('browser_download_url'): - print('OK') - else: - print('FAIL: ' + str(r)) -except Exception as e: - print('FAIL: ' + str(e)) -" 2>/dev/null) - -if [ "$UPLOAD_SUCCESS" = "OK" ]; then - echo "✅ 安装包上传成功" -else - echo "❌ 上传失败: $UPLOAD_RESPONSE" - exit 1 -fi - -echo "" -echo "══════════════════════════════════════════════" -echo " 构建完成!v${VERSION}" -echo " $(date '+%Y-%m-%d %H:%M:%S')" -echo " Release: https://gitee.com/${REPO}/releases" -echo "══════════════════════════════════════════════" diff --git a/docs/BUILD.md b/docs/BUILD.md deleted file mode 100644 index 2b544f4..0000000 --- a/docs/BUILD.md +++ /dev/null @@ -1,183 +0,0 @@ -# Windows 安装包构建指南 - -## 环境要求 - -- Ubuntu 24.04 (amd64) -- Node.js v22+ -- Wine 9.0+(用于 electron-builder 交叉编译) -- i386 架构已启用(`dpkg --add-architecture i386`) -- p7zip-full(解压构建资源) - -## 快速构建(3 步) - -```bash -# 1. 克隆并安装依赖 -git clone https://gitee.com/thzxx/metona-ollama-desktop.git -cd metona-ollama-desktop -npm config set registry https://registry.npmmirror.com -npm install - -# 2. 恢复构建缓存(首次从镜像下载,后续使用本地缓存) -bash restore-build-cache.sh - -# 3. 构建 -ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist -``` - -产出文件在 `release/` 目录。 - -## 构建资源管理 - -构建需要以下资源(共 ~145MB),通过 `restore-build-cache.sh` 自动管理: - -| 资源 | 大小 | 来源 | -|------|------|------| -| Electron v33.4.11 win32-x64 | 110MB | npmmirror | -| NSIS 3.0.4.1 | 7.8MB | GitHub (ghfast.top 代理) | -| NSIS Resources 3.4.1 | 3.0MB | GitHub (ghfast.top 代理) | -| winCodeSign 2.6.0 | 24MB | GitHub (ghfast.top 代理) | - -**工作原理**: -- 首次运行:从镜像下载 → 自动缓存到 `build-resources/` 和 `~/.cache/` -- 后续运行:从 `build-resources/` 复制到 `~/.cache/`(秒级完成) -- `build-resources/` 在 `.gitignore` 中,不进 git(Electron 二进制 110MB 超 git 限制) - -**自定义镜像**: -```bash -GITHUB_PROXY=https://gh-proxy.com/ bash restore-build-cache.sh -``` - -## 详细步骤 - -### 1. 安装 Wine - -```bash -dpkg --add-architecture i386 -apt-get update -apt-get install -y wine wine32 p7zip-full -``` - -### 2. 安装 npm 依赖 - -```bash -npm config set registry https://registry.npmmirror.com -npm install -``` - -### 3. 恢复构建缓存 - -```bash -bash restore-build-cache.sh -``` - -首次会从镜像下载约 145MB 资源,后续构建只需秒级恢复。 - -### 4. 构建 Windows 安装包 - -```bash -ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist -``` - -## 常用命令 - -```bash -npm start # 开发运行 -npm run pack # 仅构建目录(不打包) -npm run dist:nsis # 仅 NSIS 安装包 -npm run dist # NSIS 安装包 -``` - -## 构建产物 - -| 文件 | 说明 | -|------|------| -| `release/Metona Ollama Setup v0.12.2.exe` | NSIS 安装包(可选目录、创建快捷方式) | - -> 仅提供 NSIS 安装包。 - -## 发布到 Gitee - -### 创建 Release - -```bash -TOKEN="your_access_token" -curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama-desktop/releases?access_token=$TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"tag_name":"v0.12.2","name":"v0.12.2","body":"Release notes","target_commitish":"master"}' -``` - -### 上传附件 - -```bash -TOKEN="your_access_token" -RELEASE_ID="" -curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama-desktop/releases/$RELEASE_ID/attach_files?access_token=$TOKEN" \ - -H "Content-Type: multipart/form-data" -F "file=@release/Metona Ollama Setup v0.12.2.exe" -``` - -## 故障排查 - -| 问题 | 解决方案 | -|------|----------| -| apt 源超时(mirrors.cloud.aliyuncs.com 不可达) | `sed -i 's\|mirrors.cloud.aliyuncs.com\|archive.ubuntu.com\|g' /etc/apt/sources.list && apt-get update` | -| npm install 卡住无输出 | 终止后重试 `npm install --prefer-offline`,通常首次已装大部分包,二次秒完成 | -| npmmirror 缺少 Electron 包(restore-build-cache.sh 失败,NoSuchKey) | npmmirror 可能未同步特定版本。跳过缓存脚本,直接 `npm run dist`,electron-builder 会自动从 npmmirror 下载(`ELECTRON_MIRROR` 环境变量生效) | -| electron-builder 报错 "wine is required" | Wine 是签名步骤的硬依赖,必须安装:`dpkg --add-architecture i386 && apt-get update && apt-get install -y wine wine32` | -| apt 源 i386 架构下载失败 | 先确保主源可用(切 archive.ubuntu.com),再 `apt-get update`,最后装 wine | -| Electron 下载超时 | 设 `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/` 或直接用 `npm run dist`(electron-builder 自动处理) | -| NSIS/winCodeSign 下载超时 | `GITHUB_PROXY=https://gh-proxy.com/ bash restore-build-cache.sh` | -| winCodeSign 下载 EOF 错误(github.com 连接中断) | 手动下载并缓存(见下方) | -| npm install 时 Electron "socket hang up" | 设置 `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/` 后重试 | -| restore-build-cache.sh 因 Electron 失败导致后续缓存全部跳过 | 跳过脚本,手动下载缺失资源(见下方) | -| "symbol already declared" | 检查 TS 文件中的重复 `const`/`let` 声明 | - -### 手动下载构建缓存(逐项修复) - -当 `restore-build-cache.sh` 部分失败时,可手动下载缺失资源: - -```bash -GITHUB_PROXY="https://ghfast.top/" -GITHUB_ORIG="https://github.com/electron-userland/electron-builder-binaries/releases/download" -CACHE="$HOME/.cache/electron-builder" - -# winCodeSign(构建签名步骤硬依赖) -mkdir -p "$CACHE/winCodeSign" -wget -O "/tmp/winCodeSign-2.6.0.7z" \ - "${GITHUB_PROXY}${GITHUB_ORIG}/winCodeSign-2.6.0/winCodeSign-2.6.0.7z" -cd "$CACHE/winCodeSign" && 7z x -y "/tmp/winCodeSign-2.6.0.7z" -o"winCodeSign-2.6.0" - -# NSIS -mkdir -p "$CACHE/nsis" -wget -O "/tmp/nsis-3.0.4.1.7z" \ - "${GITHUB_PROXY}${GITHUB_ORIG}/nsis-3.0.4.1/nsis-3.0.4.1.7z" -cd "$CACHE/nsis" && 7z x -y "/tmp/nsis-3.0.4.1.7z" -o"nsis-3.0.4.1" - -# NSIS Resources -wget -O "/tmp/nsis-resources-3.4.1.7z" \ - "${GITHUB_PROXY}${GITHUB_ORIG}/nsis-resources-3.4.1/nsis-resources-3.4.1.7z" -cd "$CACHE/nsis" && 7z x -y "/tmp/nsis-resources-3.4.1.7z" -o"nsis-resources-3.4.1" - -# 清理临时文件 -rm -f /tmp/winCodeSign-2.6.0.7z /tmp/nsis-3.0.4.1.7z /tmp/nsis-resources-3.4.1.7z -``` - -> Electron 无需手动下载——设置 `ELECTRON_MIRROR` 后 electron-builder 会自动处理。 - -### ⚠️ 已知问题:npmmirror 与 restore-build-cache.sh 兼容性 - -`restore-build-cache.sh` 第一步从 npmmirror 下载 Electron zip 时可能遇到 **NoSuchKey** 错误,因为 npmmirror 未同步该版本。此时脚本会因 `set -e` 直接退出,后续 NSIS/winCodeSign 缓存也不会恢复。 - -**推荐做法**:跳过 `restore-build-cache.sh`,直接执行: -```bash -ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist -``` -electron-builder 会自动处理所有依赖下载(Electron、NSIS、winCodeSign),虽然首次较慢(~5分钟),但无需手动管理缓存。 - -## 提速清单 - -| 环节 | 默认 → 加速 | 效果 | -|------|------------|------| -| apt 源 | aliyuncs → archive.ubuntu.com | 稳定 | -| npm | npmjs → npmmirror | ~17s | -| Electron | github → npmmirror | ~3s | -| NSIS/winCodeSign | github → ghfast + 本地缓存 | 秒级 | diff --git a/release-notes.md b/release-notes.md deleted file mode 100644 index 871c298..0000000 --- a/release-notes.md +++ /dev/null @@ -1,147 +0,0 @@ -# Metona Ollama Desktop v1.1.0 - -> 本地 Ollama AI 桌面客户端 — 首个稳定版本 - -## 项目简介 - -Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,采用 TypeScript + Electron 构建。所有 AI 推理均在本地完成,数据不离开本机。支持 ReAct Agent Loop、42 个内置工具、智能记忆系统、MCP 协议扩展、四引擎联网搜索、浏览器控制等能力。 - ---- - -## 核心功能 - -### 🤖 ReAct Agent Loop -- Thought → Action → Observation → Reflection 完整循环 -- 默认最大 85 轮迭代,支持自动重试(最多 2 次) -- 工具调用去重机制:调用缓存 + 同轮重复检测 + 跨轮次重复检测 -- 并行工具调用:互相独立的工具可在同一次回复中同时执行 -- 链式工具调用:web_search → web_fetch、list_directory → read_file 等模式 -- 文本解析兜底:当模型未通过 tool_calls 返回时,从文本中提取 Action/Input - -### 🔧 42 个内置工具 - -| 分类 | 数量 | 工具 | -|------|------|------| -| 文件系统 | 17 | read_file, write_file, list_directory, search_files, create_directory, delete_file, move_file, copy_file, append_file, edit_file, get_file_info, tree, download_file, diff_files, replace_in_files, read_multiple_files, compress | -| 命令执行 | 1 | run_command(实时流式输出,工作空间终端集成) | -| 联网搜索 | 2 | web_search(Bing + 百度 + 搜狗 + 360搜索 四引擎), web_fetch | -| 浏览器控制 | 8 | browser_open, browser_screenshot, browser_evaluate, browser_extract, browser_click, browser_type, browser_scroll, browser_close | -| Git | 1 | git(init/clone/add/commit/push/pull/diff/log/status/branch/checkout/merge/stash/reset/tag/remote) | -| 记忆管理 | 4 | memory_search, memory_add, memory_replace, memory_remove | -| 会话管理 | 2 | session_list, session_read | -| 子代理 | 1 | spawn_task(独立上下文 + 超时保护) | -| 系统工具 | 6 | datetime / calculator / random / uuid / json_format / hash | - -### 🧠 智能记忆系统 -- **三类记忆**:fact(事实)、preference(偏好)、rule(规则,始终注入上下文) -- **双模式检索**:FTS5 全文搜索 + 向量语义搜索(IVF 索引) -- **安全扫描**:写入前检测 prompt injection、敏感信息泄露、不可见 Unicode 字符 -- **容量管理**:上限 500 条,超限自动清理低价值条目(rule 类型受保护) -- **过期衰减**:90 天未使用的记忆自动降低 importance - -### 🌐 MCP 协议支持 -- JSON-RPC 2.0 over stdio 标准协议 -- 动态工具发现与执行 -- Shadowing 防护(防止 MCP 工具覆盖内置工具名) -- 60 秒请求超时保护 - -### 🔍 四引擎联网搜索 -- Bing + 百度 + 搜狗 + 360搜索 四引擎聚合 -- web_search 返回标题、URL、摘要(默认 15 条) -- web_fetch 支持网页内容抓取(默认不截断) -- 工具链规则:搜索后自动引导抓取详情 - -### 🖥️ 工作空间面板 -- 终端(实时流式输出)+ 文件浏览器一体化 -- AI 通过 run_command 工具执行命令,输出实时显示 -- 命令安全检查:路径黑名单 + 命令黑名单 + 三种执行模式 - -### 🎨 Token 实时监控仪表盘 -- 全局统计(跨会话累计 Token 分析)和当前会话统计双视图 -- Token 消耗趋势图(输入/输出分色显示) -- 2 秒自动刷新 - -### 🔒 安全机制 -- 文件路径安全检查(checkPathAllowed) -- 命令执行安全检查(checkCommandAllowed) -- 前端 HTML 净化器(白名单标签 + 属性过滤 + URI 协议检查) -- contextIsolation: true + IPC 白名单 -- AES-256-GCM 加密支持 - ---- - -## 技术架构 - -``` -用户消息 → Agent Loop(ReAct) - ↓ - 记忆检索(FTS5 + 向量搜索)→ 上下文注入 - ↓ - Ollama API(流式响应) - ↓ - 工具调用(39 内置 + MCP 动态) - ↓ - 观察结果 → 反思 → 循环/最终回答 -``` - -### 数据层 -- **SQLite (sql.js WASM)**:6 张表(sessions, messages, tool_calls, memories, settings, traces) -- **FTS5 全文搜索**:memories 表支持全文检索 -- **WAL 模式 + NORMAL 同步**:零原生依赖,无需 electron-rebuild - -### 上下文管理(v5.0) -- 三层策略:滑动窗口 + LLM 摘要压缩 + 记忆注入 -- `/compress` 手动触发上下文压缩 -- 自动压缩阈值:消息 token 占 context window 50% 时触发 -- Token 估算:中文 1.5 字/token,英文 4 字符/token - -### 技术栈 -| 层级 | 技术 | -|------|------| -| 语言 | TypeScript (strict mode) | -| 桌面框架 | Electron 33+ | -| 构建 | Vite(渲染进程)+ tsc(主进程) | -| 数据库 | sql.js (WASM) + FTS5 | -| 第三方库 | marked(Markdown), DOMPurify(HTML 净化) | -| 打包 | electron-builder (NSIS) | - ---- - -## 最近改进 - -- **`/compress` 上下文压缩**:支持手动触发 LLM 摘要压缩,长对话不再丢失上下文 -- **Token 全局统计**:仪表盘新增跨会话累计 Token 分析视图 -- **图表重写**:Token 消耗趋势图重写 — 网格线 + 正确高度计算 + 柱子底部对齐 -- **Agent Loop 稳定性**:修复 abortController 在自动压缩前未定义的严重 bug -- **工具调用修复**:修复工具卡片状态更新、错误信息显示、执行中状态残留等问题 -- **消息渲染修复**:修复用户消息不显示、AI 消息时间戳、思考气泡残留等 UI 问题 - ---- - -## 系统要求 - -- **操作系统**:Windows 10/11(64 位) -- **Ollama**:需要本地运行 Ollama 服务(默认 http://localhost:11434) -- **磁盘空间**:安装包约 82MB,运行时根据模型大小需要额外空间 -- **内存**:建议 8GB+(取决于使用的 AI 模型) - ---- - -## 安装说明 - -1. 下载 `Metona Ollama Setup v1.1.0.exe` -2. 运行安装程序,可自定义安装目录 -3. 确保本地已安装并运行 [Ollama](https://ollama.com) -4. 启动 Metona Ollama,在设置中配置 Ollama 服务地址 -5. 选择模型,开始对话 - ---- - -## 已知限制 - -- 仅支持 Windows x64 平台 -- 需要本地运行 Ollama 服务,不支持远程 Ollama 服务器(后续版本考虑支持) -- 浏览器控制工具依赖系统 Chromium,部分 SPA 页面抓取可能不完整 -- 向量搜索需要配置嵌入模型(embedding model),未配置时仅支持关键词搜索 -- MCP 工具目前仅支持 stdio 传输方式 -- 子代理(spawn_task)为独立上下文,无法共享主对话记忆 diff --git a/restore-build-cache.sh b/restore-build-cache.sh deleted file mode 100755 index 0ffb2aa..0000000 --- a/restore-build-cache.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# restore-build-cache.sh -# 从 build-resources/ 恢复 electron-builder 缓存,加速构建 -# 如果本地资源不存在,自动从镜像下载 - -set -e - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -CACHE_ELECTRON="$HOME/.cache/electron" -CACHE_BUILDER="$HOME/.cache/electron-builder" -LOCAL="$SCRIPT_DIR/build-resources" - -ELECTRON_MIRROR="${ELECTRON_MIRROR:-https://npmmirror.com/mirrors/electron/}" -GITHUB_PROXY="${GITHUB_PROXY:-https://ghfast.top/}" -GITHUB_ORIG="https://github.com/electron-userland/electron-builder-binaries/releases/download" - -ELECTRON_VERSION="33.4.11" -NSIS_VERSION="3.0.4.1" -NSIS_RES_VERSION="3.4.1" -WINCODESIGN_VERSION="2.6.0" - -echo "===== 恢复构建缓存 =====" - -ELECTRON_FILE="electron-v${ELECTRON_VERSION}-win32-x64.zip" -mkdir -p "$CACHE_ELECTRON" -if [ -f "$LOCAL/electron/$ELECTRON_FILE" ]; then - echo "[1/4] Electron ← 本地缓存" - cp "$LOCAL/electron/$ELECTRON_FILE" "$CACHE_ELECTRON/" -elif [ -f "$CACHE_ELECTRON/$ELECTRON_FILE" ]; then - echo "[1/4] Electron ← 缓存已存在" -else - echo "[1/4] Electron ← 下载 ${ELECTRON_MIRROR}${ELECTRON_FILE}" - mkdir -p "$LOCAL/electron" - wget -q --show-progress -O "$CACHE_ELECTRON/$ELECTRON_FILE" "${ELECTRON_MIRROR}${ELECTRON_FILE}" - cp "$CACHE_ELECTRON/$ELECTRON_FILE" "$LOCAL/electron/" -fi - -mkdir -p "$CACHE_BUILDER/nsis" -NSIS_DIR="$CACHE_BUILDER/nsis/nsis-${NSIS_VERSION}" -if [ -d "$LOCAL/electron-builder/nsis-${NSIS_VERSION}" ]; then - echo "[2/4] NSIS ${NSIS_VERSION} ← 本地缓存" - cp -r "$LOCAL/electron-builder/nsis-${NSIS_VERSION}" "$NSIS_DIR" -elif [ -d "$NSIS_DIR" ]; then - echo "[2/4] NSIS ${NSIS_VERSION} ← 缓存已存在" -else - echo "[2/4] NSIS ${NSIS_VERSION} ← 下载" - mkdir -p "$LOCAL/electron-builder" - wget -q --show-progress -O "/tmp/nsis-${NSIS_VERSION}.7z" \ - "${GITHUB_PROXY}${GITHUB_ORIG}/nsis-${NSIS_VERSION}/nsis-${NSIS_VERSION}.7z" - cd "$CACHE_BUILDER/nsis" - 7z x -y "/tmp/nsis-${NSIS_VERSION}.7z" -o"nsis-${NSIS_VERSION}" >/dev/null - rm -f "/tmp/nsis-${NSIS_VERSION}.7z" - cp -r "$NSIS_DIR" "$LOCAL/electron-builder/" - cd "$SCRIPT_DIR" -fi - -NSIS_RES_DIR="$CACHE_BUILDER/nsis/nsis-resources-${NSIS_RES_VERSION}" -if [ -d "$LOCAL/electron-builder/nsis-resources-${NSIS_RES_VERSION}" ]; then - echo "[3/4] NSIS Resources ${NSIS_RES_VERSION} ← 本地缓存" - cp -r "$LOCAL/electron-builder/nsis-resources-${NSIS_RES_VERSION}" "$NSIS_RES_DIR" -elif [ -d "$NSIS_RES_DIR" ]; then - echo "[3/4] NSIS Resources ${NSIS_RES_VERSION} ← 缓存已存在" -else - echo "[3/4] NSIS Resources ${NSIS_RES_VERSION} ← 下载" - mkdir -p "$LOCAL/electron-builder" - wget -q --show-progress -O "/tmp/nsis-resources-${NSIS_RES_VERSION}.7z" \ - "${GITHUB_PROXY}${GITHUB_ORIG}/nsis-resources-${NSIS_RES_VERSION}/nsis-resources-${NSIS_RES_VERSION}.7z" - cd "$CACHE_BUILDER/nsis" - 7z x -y "/tmp/nsis-resources-${NSIS_RES_VERSION}.7z" -o"nsis-resources-${NSIS_RES_VERSION}" >/dev/null - rm -f "/tmp/nsis-resources-${NSIS_RES_VERSION}.7z" - cp -r "$NSIS_RES_DIR" "$LOCAL/electron-builder/" - cd "$SCRIPT_DIR" -fi - -WINCS_DIR="$CACHE_BUILDER/winCodeSign/winCodeSign-${WINCODESIGN_VERSION}" -if [ -d "$LOCAL/electron-builder/winCodeSign-${WINCODESIGN_VERSION}" ]; then - echo "[4/4] winCodeSign ${WINCODESIGN_VERSION} ← 本地缓存" - mkdir -p "$CACHE_BUILDER/winCodeSign" - cp -r "$LOCAL/electron-builder/winCodeSign-${WINCODESIGN_VERSION}" "$WINCS_DIR" -elif [ -d "$WINCS_DIR" ]; then - echo "[4/4] winCodeSign ${WINCODESIGN_VERSION} ← 缓存已存在" -else - echo "[4/4] winCodeSign ${WINCODESIGN_VERSION} ← 下载" - mkdir -p "$LOCAL/electron-builder" - mkdir -p "$CACHE_BUILDER/winCodeSign" - wget -q --show-progress -O "/tmp/winCodeSign-${WINCODESIGN_VERSION}.7z" \ - "${GITHUB_PROXY}${GITHUB_ORIG}/winCodeSign-${WINCODESIGN_VERSION}/winCodeSign-${WINCODESIGN_VERSION}.7z" - cd "$CACHE_BUILDER/winCodeSign" - 7z x -y "/tmp/winCodeSign-${WINCODESIGN_VERSION}.7z" -o"winCodeSign-${WINCODESIGN_VERSION}" >/dev/null - rm -f "/tmp/winCodeSign-${WINCODESIGN_VERSION}.7z" - cp -r "$WINCS_DIR" "$LOCAL/electron-builder/" - cd "$SCRIPT_DIR" -fi - -echo "" -echo "===== 缓存恢复完成 =====" -echo "现在可以运行: ELECTRON_MIRROR=$ELECTRON_MIRROR npm run dist"