diff --git a/.github/workflows/update-homebrew.yml b/.github/workflows/update-homebrew.yml new file mode 100644 index 000000000..c452f8b23 --- /dev/null +++ b/.github/workflows/update-homebrew.yml @@ -0,0 +1,104 @@ +name: Update Homebrew Tap + +on: + release: + types: [published] + workflow_dispatch: + inputs: + version: + description: '版本号 (不带 v 前缀,如 0.37.0)' + required: true + +jobs: + update-homebrew: + runs-on: macos-latest + steps: + - name: 获取版本号 + id: version + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT + else + # 从 tag 中提取版本号,去掉 v 前缀 + VERSION="${{ github.event.release.tag_name }}" + echo "version=${VERSION#v}" >> $GITHUB_OUTPUT + fi + + - name: 等待 Release 资源就绪 + run: sleep 30 + + - name: 下载 DMG 并计算 SHA256 + id: sha + run: | + VERSION="${{ steps.version.outputs.version }}" + + # 下载 ARM64 DMG + echo "下载 ARM64 DMG..." + curl -sL -o arm64.dmg "https://github.com/aiclientproxy/proxycast/releases/download/v${VERSION}/proxycast_${VERSION}_aarch64.dmg" + ARM64_SHA=$(shasum -a 256 arm64.dmg | awk '{print $1}') + echo "ARM64 SHA256: $ARM64_SHA" + echo "arm64_sha=$ARM64_SHA" >> $GITHUB_OUTPUT + + # 下载 x64 DMG + echo "下载 x64 DMG..." + curl -sL -o x64.dmg "https://github.com/aiclientproxy/proxycast/releases/download/v${VERSION}/proxycast_${VERSION}_x64.dmg" + X64_SHA=$(shasum -a 256 x64.dmg | awk '{print $1}') + echo "x64 SHA256: $X64_SHA" + echo "x64_sha=$X64_SHA" >> $GITHUB_OUTPUT + + - name: Checkout homebrew-tap + uses: actions/checkout@v4 + with: + repository: aiclientproxy/homebrew-tap + token: ${{ secrets.HOMEBREW_TAP_TOKEN }} + path: homebrew-tap + + - name: 更新 Cask 文件 + run: | + VERSION="${{ steps.version.outputs.version }}" + ARM64_SHA="${{ steps.sha.outputs.arm64_sha }}" + X64_SHA="${{ steps.sha.outputs.x64_sha }}" + + cat > homebrew-tap/Casks/proxycast.rb << EOF + cask "proxycast" do + version "$VERSION" + + on_arm do + sha256 "$ARM64_SHA" + url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/proxycast_#{version}_aarch64.dmg" + end + + on_intel do + sha256 "$X64_SHA" + url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/proxycast_#{version}_x64.dmg" + end + + name "ProxyCast" + desc "AI API 代理桌面应用 - 将 AI 客户端凭证转换为 OpenAI 兼容接口" + homepage "https://github.com/aiclientproxy/proxycast" + + livecheck do + url :url + strategy :github_latest + end + + app "ProxyCast.app" + + zap trash: [ + "~/.config/com.proxycast.app", + "~/Library/Application Support/com.proxycast.app", + "~/Library/Caches/com.proxycast.app", + "~/Library/Preferences/com.proxycast.app.plist", + "~/Library/Saved Application State/com.proxycast.app.savedState", + ] + end + EOF + + - name: 提交并推送 + run: | + cd homebrew-tap + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add Casks/proxycast.rb + git commit -m "chore: bump proxycast to ${{ steps.version.outputs.version }}" + git push diff --git a/README.md b/README.md index be083699c..83c598a74 100644 --- a/README.md +++ b/README.md @@ -126,11 +126,26 @@ ### 下载安装 +#### macOS (推荐使用 Homebrew) + +```bash +brew tap aiclientproxy/tap +brew install --cask proxycast +``` + +更新版本: +```bash +brew upgrade --cask proxycast +``` + +#### 手动下载 + 从 [Releases](https://github.com/aiclientproxy/proxycast/releases) 页面下载对应平台的安装包: -- **macOS (Apple Silicon)**: `ProxyCast_x.x.x_aarch64.dmg` -- **Windows (x64)**: `ProxyCast_x.x.x_x64-setup.exe` -- **Ubuntu/Debian (x64)**: `ProxyCast_x.x.x_amd64.deb` +- **macOS (Apple Silicon)**: `proxycast_x.x.x_aarch64.dmg` +- **macOS (Intel)**: `proxycast_x.x.x_x64.dmg` +- **Windows (x64)**: `proxycast_x.x.x_x64-setup.exe` +- **Ubuntu/Debian (x64)**: `proxycast_x.x.x_amd64.deb` ### 使用步骤 diff --git a/homebrew/Casks/proxycast.rb b/homebrew/Casks/proxycast.rb new file mode 100644 index 000000000..f9437368c --- /dev/null +++ b/homebrew/Casks/proxycast.rb @@ -0,0 +1,31 @@ +cask "proxycast" do + version "0.37.0" + + on_arm do + sha256 "REPLACE_WITH_ARM64_SHA256" + url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/ProxyCast_#{version}_aarch64.dmg" + end + + on_intel do + sha256 "REPLACE_WITH_X64_SHA256" + url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/ProxyCast_#{version}_x64.dmg" + end + + name "ProxyCast" + desc "AI 代理服务桌面应用 - 多 Provider 凭证池管理" + homepage "https://github.com/aiclientproxy/proxycast" + + livecheck do + url :url + strategy :github_latest + end + + app "ProxyCast.app" + + zap trash: [ + "~/Library/Application Support/com.proxycast.app", + "~/Library/Caches/com.proxycast.app", + "~/Library/Preferences/com.proxycast.app.plist", + "~/Library/Saved Application State/com.proxycast.app.savedState", + ] +end diff --git a/homebrew/README.md b/homebrew/README.md new file mode 100644 index 000000000..ca6a519f1 --- /dev/null +++ b/homebrew/README.md @@ -0,0 +1,44 @@ +# ProxyCast Homebrew Tap + +ProxyCast 的 Homebrew Cask 分发仓库。 + +## 安装 + +```bash +# 添加 tap +brew tap terryso/tap + +# 安装 ProxyCast +brew install --cask proxycast +``` + +## 更新 + +```bash +brew upgrade --cask proxycast +``` + +## 卸载 + +```bash +brew uninstall --cask proxycast +``` + +## 维护说明 + +### 手动更新版本 + +1. 下载新版本的 DMG 文件 +2. 计算 sha256: `shasum -a 256 ProxyCast_x.x.x_aarch64.dmg` +3. 更新 `Casks/proxycast.rb` 中的 `version` 和 `sha256` +4. 推送到仓库 + +### 自动化更新 + +使用 `scripts/update-cask.sh` 脚本自动更新: + +```bash +./scripts/update-cask.sh 0.38.0 +``` + +该脚本会自动下载 DMG、计算 sha256、更新 Cask 文件。 diff --git a/homebrew/scripts/update-cask.sh b/homebrew/scripts/update-cask.sh new file mode 100755 index 000000000..02034e6d8 --- /dev/null +++ b/homebrew/scripts/update-cask.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# 自动更新 ProxyCast Homebrew Cask 版本 +# 用法: ./update-cask.sh +# 示例: ./update-cask.sh 0.38.0 + +set -e + +VERSION=$1 +REPO="aiclientproxy/proxycast" +CASK_FILE="$(dirname "$0")/../Casks/proxycast.rb" + +if [ -z "$VERSION" ]; then + echo "用法: $0 " + echo "示例: $0 0.38.0" + exit 1 +fi + +echo "🔄 更新 ProxyCast Cask 到版本 $VERSION" + +# 下载 DMG 并计算 sha256 +ARM64_URL="https://github.com/$REPO/releases/download/v$VERSION/ProxyCast_${VERSION}_aarch64.dmg" +X64_URL="https://github.com/$REPO/releases/download/v$VERSION/ProxyCast_${VERSION}_x64.dmg" + +TEMP_DIR=$(mktemp -d) +trap "rm -rf $TEMP_DIR" EXIT + +echo "📥 下载 ARM64 DMG..." +curl -sL "$ARM64_URL" -o "$TEMP_DIR/arm64.dmg" +ARM64_SHA=$(shasum -a 256 "$TEMP_DIR/arm64.dmg" | awk '{print $1}') +echo " SHA256: $ARM64_SHA" + +echo "📥 下载 x64 DMG..." +curl -sL "$X64_URL" -o "$TEMP_DIR/x64.dmg" +X64_SHA=$(shasum -a 256 "$TEMP_DIR/x64.dmg" | awk '{print $1}') +echo " SHA256: $X64_SHA" + +# 更新 Cask 文件 +echo "📝 更新 Cask 文件..." +sed -i '' "s/version \".*\"/version \"$VERSION\"/" "$CASK_FILE" +sed -i '' "/on_arm do/,/end/ s/sha256 \".*\"/sha256 \"$ARM64_SHA\"/" "$CASK_FILE" +sed -i '' "/on_intel do/,/end/ s/sha256 \".*\"/sha256 \"$X64_SHA\"/" "$CASK_FILE" + +echo "✅ 更新完成!" +echo "" +echo "下一步:" +echo " 1. git add Casks/proxycast.rb" +echo " 2. git commit -m 'chore: bump proxycast to $VERSION'" +echo " 3. git push"