#!/usr/bin/env bash set -Eeuo pipefail REPO_URL="https://github.com/CoderLambert/ai-parallel.git" BASE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/ai-parallel" REPO_DIR="$BASE_DIR/repo" EXT_DIR="$BASE_DIR/browser-extension" log() { printf '\033[1;34m[ai-parallel]\033[0m %s\n' "$*"; } ok() { printf '\033[1;32m[✓]\033[0m %s\n' "$*"; } fail() { printf '\033[1;31m[✗]\033[0m %s\n' "$*" >&2; exit 1; } command -v git >/dev/null || fail "未找到 git" command -v node >/dev/null || fail "未找到 node" command -v npm >/dev/null || fail "未找到 npm" command -v rsync >/dev/null || fail "未找到 rsync" mkdir -p "$BASE_DIR" if [[ ! -d "$REPO_DIR/.git" ]]; then log "首次安装,克隆仓库..." git clone "$REPO_URL" "$REPO_DIR" else log "检查 GitHub Release..." if [[ -n "$(git -C "$REPO_DIR" status --porcelain)" ]]; then fail "同步缓存存在未提交修改:$REPO_DIR" fi fi git -C "$REPO_DIR" fetch origin --tags --prune LATEST_TAG="$(git -C "$REPO_DIR" tag --list 'v*' --sort=-v:refname | sed -n '1p')" [[ -n "$LATEST_TAG" ]] || fail "仓库中尚无可用的版本标签" git -C "$REPO_DIR" checkout --detach "$LATEST_TAG" ok "使用最新 Release:$LATEST_TAG" log "执行代码检查..." (cd "$REPO_DIR" && npm run check && npm test) ok "代码检查通过" MANIFEST="$REPO_DIR/apps/browser-extension/manifest.json" [[ -f "$MANIFEST" ]] || fail "找不到 manifest.json" VERSION="$(node -p "require('$MANIFEST').version")" log "同步浏览器扩展..." mkdir -p "$EXT_DIR" rsync -a --delete --exclude='node_modules' "$REPO_DIR/apps/browser-extension/" "$EXT_DIR/" COMMIT="$(git -C "$REPO_DIR" rev-parse --short HEAD)" ok "已同步 AI Parallel v$VERSION ($LATEST_TAG, $COMMIT)" printf '\n扩展目录:%s\n' "$EXT_DIR" printf '请在 chrome://extensions/ 或 edge://extensions/ 点击「重新加载」。\n'