Files
cursornew2026/参考计费/Scripts/release.sh
ccdojox-crypto 73a71f198f 蜂鸟Pro v2.0.1 - 基础框架版本 (待完善)
## 当前状态
- 插件界面已完成重命名 (cursorpro → hummingbird)
- 双账号池 UI 已实现 (Auto/Pro 卡片)
- 后端已切换到 MySQL 数据库
- 添加了 Cursor 官方用量 API 文档

## 已知问题 (待修复)
1. 激活时检查账号导致无账号时激活失败
2. 未启用无感换号时不应获取账号
3. 账号用量模块不显示 (seamless 未启用时应隐藏)
4. 积分显示为 0 (后端未正确返回)
5. Auto/Pro 双密钥逻辑混乱,状态不同步
6. 账号添加后无自动分析功能

## 下一版本计划
- 重构数据模型,优化账号状态管理
- 实现 Cursor API 自动分析账号
- 修复激活流程,不依赖账号
- 启用无感时才分配账号
- 完善账号用量实时显示

## 文件说明
- docs/系统设计文档.md - 完整架构设计
- cursor 官方用量接口.md - Cursor API 文档
- 参考计费/ - Vibeviewer 开源项目参考

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 11:21:52 +08:00

227 lines
6.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# 完整的 Release 流程脚本
# 用法: ./Scripts/release.sh [VERSION] [--skip-build] [--skip-upload] [--skip-commit]
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
APP_NAME="Vibeviewer"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 解析参数
SKIP_BUILD=false
SKIP_UPLOAD=false
VERSION=""
while [[ $# -gt 0 ]]; do
case $1 in
--skip-build)
SKIP_BUILD=true
shift
;;
--skip-upload)
SKIP_UPLOAD=true
shift
;;
--version|-v)
VERSION="$2"
shift 2
;;
--help|-h)
echo "用法: $0 [选项] [VERSION]"
echo ""
echo "选项:"
echo " --version, -v <版本> 指定版本号(默认从 Project.swift 读取)"
echo " --skip-build 跳过构建步骤"
echo " --skip-upload 跳过上传到 GitHub Release"
echo " --help, -h 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 # 自动检测版本并完整流程"
echo " $0 1.1.7 # 指定版本号"
echo " $0 --skip-build 1.1.7 # 跳过构建(使用已有 DMG"
exit 0
;;
*)
if [ -z "$VERSION" ] && [[ "$1" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
VERSION="$1"
else
echo -e "${RED}❌ 未知选项: $1${NC}"
echo "使用 --help 查看帮助信息"
exit 1
fi
shift
;;
esac
done
echo -e "${BLUE}🚀 开始 Release 流程...${NC}"
echo ""
# 1. 获取版本号(从 Project.swift 的统一版本号配置读取)
if [ -z "$VERSION" ]; then
echo -e "${BLUE}📋 检测版本号...${NC}"
# 优先从 appVersion 常量读取(统一版本号配置)
VERSION=$(grep -E '^let appVersion\s*=' "$PROJECT_ROOT/Project.swift" | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/' | head -1)
# Fallback: 从 MARKETING_VERSION 读取
if [ -z "$VERSION" ]; then
VERSION=$(grep -E 'MARKETING_VERSION' "$PROJECT_ROOT/Project.swift" | head -1 | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/')
fi
if [ -z "$VERSION" ]; then
echo -e "${RED}❌ 无法自动检测版本号${NC}"
echo -e "${YELLOW} 请使用 --version 参数指定版本号${NC}"
exit 1
fi
fi
echo -e "${GREEN}✅ 版本号: ${VERSION}${NC}"
echo ""
# 2. 检查 GitHub CLI
if ! command -v gh >/dev/null 2>&1; then
echo -e "${RED}❌ 错误: 需要 GitHub CLI (gh)${NC}"
echo -e "${YELLOW} 安装: brew install gh${NC}"
exit 1
fi
# 4. 构建和创建 DMG
DMG_NAME="${APP_NAME}-${VERSION}.dmg"
if [ "$SKIP_BUILD" = false ]; then
echo -e "${BLUE}🔨 构建 Release 版本并创建 DMG...${NC}"
"$SCRIPT_DIR/create_dmg.sh" --version "$VERSION" || {
echo -e "${RED}❌ 构建失败${NC}"
exit 1
}
echo ""
else
echo -e "${YELLOW}⏭️ 跳过构建步骤${NC}"
if [ ! -f "$DMG_NAME" ]; then
echo -e "${RED}❌ 错误: DMG 文件不存在: $DMG_NAME${NC}"
exit 1
fi
echo ""
fi
# 5. 检查 Git 状态
echo -e "${BLUE}📋 检查 Git 状态...${NC}"
if [ -n "$(git status --porcelain)" ]; then
echo -e "${YELLOW}⚠️ 有未提交的更改${NC}"
git status --short
echo ""
read -p "是否继续?(y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# 6. 创建 Git Tag
echo -e "${BLUE}🏷️ 创建 Git Tag...${NC}"
if git rev-parse "v${VERSION}" >/dev/null 2>&1; then
echo -e "${YELLOW}⚠️ Tag v${VERSION} 已存在${NC}"
read -p "是否删除并重新创建?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
git tag -d "v${VERSION}" 2>/dev/null || true
git push origin ":refs/tags/v${VERSION}" 2>/dev/null || true
else
echo -e "${YELLOW}⏭️ 跳过 Tag 创建${NC}"
fi
fi
if ! git rev-parse "v${VERSION}" >/dev/null 2>&1; then
git tag -a "v${VERSION}" -m "Release version ${VERSION}"
echo -e "${GREEN}✅ Tag v${VERSION} 已创建${NC}"
else
echo -e "${YELLOW}⏭️ 使用现有 Tag${NC}"
fi
echo ""
# 7. 创建 GitHub Release
if [ "$SKIP_UPLOAD" = false ]; then
echo -e "${BLUE}📤 创建 GitHub Release...${NC}"
# 检查 Release 是否已存在
if gh release view "v${VERSION}" >/dev/null 2>&1; then
echo -e "${YELLOW}⚠️ Release v${VERSION} 已存在${NC}"
read -p "是否删除并重新创建?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
gh release delete "v${VERSION}" --yes 2>/dev/null || true
else
echo -e "${YELLOW}⏭️ 跳过 Release 创建,直接上传 DMG${NC}"
gh release upload "v${VERSION}" "$DMG_NAME" --clobber || {
echo -e "${RED}❌ 上传失败${NC}"
exit 1
}
echo -e "${GREEN}✅ DMG 已上传${NC}"
echo ""
SKIP_RELEASE_CREATE=true
fi
fi
if [ "$SKIP_RELEASE_CREATE" != true ]; then
# 获取变更日志
PREV_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
if [ -n "$PREV_TAG" ]; then
CHANGELOG=$(git log "${PREV_TAG}..HEAD" --pretty=format:"- %s" | head -20)
else
CHANGELOG=$(git log --oneline -10 --pretty=format:"- %s")
fi
RELEASE_NOTES=$(cat <<EOF
## 更新内容
${CHANGELOG}
## 技术改进
- 版本更新至 ${VERSION}
- 优化自动更新机制
EOF
)
# 创建 Release
gh release create "v${VERSION}" \
--title "Version ${VERSION}" \
--notes "$RELEASE_NOTES" \
"$DMG_NAME" || {
echo -e "${RED}❌ Release 创建失败${NC}"
exit 1
}
echo -e "${GREEN}✅ GitHub Release 已创建${NC}"
echo -e "${BLUE} URL: https://github.com/MarveleE/Vibeviewer/releases/tag/v${VERSION}${NC}"
fi
echo ""
else
echo -e "${YELLOW}⏭️ 跳过上传步骤${NC}"
echo ""
fi
# 8. 推送 Tag
echo -e "${BLUE}📤 推送 Git Tag...${NC}"
git push origin "v${VERSION}" || {
echo -e "${YELLOW}⚠️ Tag 推送失败或已存在${NC}"
}
echo ""
# 完成
echo -e "${GREEN}🎉 Release 流程完成!${NC}"
echo ""
echo -e "${BLUE}📋 总结:${NC}"
echo -e " 版本: ${VERSION}"
echo -e " DMG: ${DMG_NAME}"
echo -e " Release: https://github.com/MarveleE/Vibeviewer/releases/tag/v${VERSION}"
echo ""