update at 2025-10-15 15:29:17

This commit is contained in:
douboer
2025-10-15 15:29:17 +08:00
parent 7ce2366639
commit 3a27c7febf
6 changed files with 1161 additions and 0 deletions

278
RELEASE_SCRIPT_GUIDE.md Normal file
View File

@@ -0,0 +1,278 @@
# release.sh 使用指南
## 📋 概述
`release.sh` 是一个自动化发布脚本,用于简化版本发布流程。
## ✨ 功能特性
### v2.0 新特性
-**自动字符集降级** - 检测到字符集问题时自动使用英文版本
-**详细错误提示** - 提供清晰的错误信息和解决方案
-**Release 验证** - 创建后验证并显示访问链接
-**手动创建指南** - API 失败时提供详细的手动步骤
### 核心功能
1. 检查 Git 分支和工作区状态
2.`release.md` 提取最新版本信息
3. 创建并推送 Git 标签
4. 通过 Gitea API 自动创建 Release
5. 智能处理字符集兼容性问题
## 🚀 使用方法
### 前置要求
1. **安装 jq 命令**
```bash
# macOS
brew install jq
# Ubuntu/Debian
sudo apt-get install jq
# CentOS/RHEL
sudo yum install jq
```
2. **设置 Gitea 访问令牌**
```bash
export GITEA_TOKEN="your_token_here"
```
获取令牌方法:
- 登录 Gitea
- 设置 → 应用 → 生成新令牌
- 权限选择:`repo` (完整仓库访问)
3. **准备 release.md**
确保 `release.md` 文件存在,且最新版本在**文件末尾**
```markdown
## v1.0.2
...
## v1.0.3
...
```
### 执行发布
```bash
# 1. 确保在 main 分支
git checkout main
# 2. 确保工作区干净
git status
# 3. 设置令牌(可选,如果已设置)
export GITEA_TOKEN="73c2e2cd8ca86dbeaebdeaef77cbab3564d5122a"
# 4. 执行脚本
./release.sh
```
## 📊 执行流程
```
1. 检查 jq 命令
2. 检查 Git 分支 (必须是 main)
3. 检查工作区状态 (必须干净)
4. 拉取最新代码
5. 从 release.md 提取版本
6. 创建 Git 标签
7. 推送标签到远程
8. 尝试创建 Gitea Release (中文)
失败?→ 尝试英文版本
成功!→ 显示 Release 链接
9. 显示发布总结
```
## 🔧 字符集问题处理
### 问题说明
某些 Gitea 服务器的 MySQL 数据库配置可能不支持完整的 UTF-8 字符(如 Emoji导致创建 Release 时出错。
### 自动处理流程
1. **首次尝试** - 使用 `release.md` 中的原始内容(中文 + Emoji
2. **检测错误** - 如果返回字符集转换错误
3. **自动降级** - 使用简化的英文版本
4. **提供链接** - 在英文版本中添加指向 `release.md` 的链接
### 手动编辑 Release
如果你想在 Release 中使用中文说明:
1. 访问 Gitea Release 页面
2. 点击 "编辑" 按钮
3. 复制 `release.md` 中对应版本的内容
4. 粘贴并保存
## 📝 输出示例
### 成功输出
```
✅ 分支: main
✅ 工作区干净
⬇️ 拉取远程代码...
✅ 已同步最新代码
📝 版本号: v1.0.3
说明:
发布时间: 2025-10-15
...
✅ 已创建 tag v1.0.3
🚀 推送到远程...
...
🔄 尝试创建 Release (使用中文内容)...
⚠️ 检测到字符集问题,尝试使用英文版本...
✅ Release 创建成功 (英文版): v1.0.3
🔗 Release 地址: https://biboer.cn/gitea/gavin/map-client-vue/releases/tag/v1.0.3
💡 提示: 可以在 Gitea Web 界面手动编辑添加中文说明
🎉 发布完成!
📦 版本v1.0.3
📊 发布总结:
✅ Git 标签已推送
✅ 代码已推送到远程
✅ Gitea Release 已创建
🔗 访问地址:
- Release: https://biboer.cn/gitea/gavin/map-client-vue/releases/tag/v1.0.3
- 标签列表: https://biboer.cn/gitea/gavin/map-client-vue/tags
- 提交历史: https://biboer.cn/gitea/gavin/map-client-vue/commits/branch/main
🚀 用户升级指南:
git pull origin main
cd web && npm install
npm run dev
```
### 错误处理
如果 Release 创建完全失败,脚本会提供手动创建步骤:
```
❌ Release 创建失败HTTP 500
💡 手动创建步骤:
1. 访问: https://biboer.cn/gitea/gavin/map-client-vue/releases
2. 点击 '新建发布'
3. 选择标签: v1.0.3
4. 从 release.md 复制说明
```
## 🐛 常见问题
### Q1: "未安装 jq 命令"
**解决方案**
```bash
# macOS
brew install jq
# 或下载二进制文件
wget https://github.com/jqlang/jq/releases/download/jq-1.7/jq-macos-amd64
chmod +x jq-macos-amd64
sudo mv jq-macos-amd64 /usr/local/bin/jq
```
### Q2: "工作区有未提交的更改"
**解决方案**
```bash
# 查看状态
git status
# 选项1: 提交更改
git add .
git commit -m "准备发布"
# 选项2: 暂存更改
git stash
# 选项3: 放弃更改
git reset --hard
```
### Q3: "未设置 GITEA_TOKEN"
**解决方案**
```bash
# 临时设置(当前会话)
export GITEA_TOKEN="your_token_here"
# 永久设置(添加到 ~/.zshrc 或 ~/.bashrc
echo 'export GITEA_TOKEN="your_token_here"' >> ~/.zshrc
source ~/.zshrc
```
### Q4: "标签已存在"
脚本会自动删除旧标签并重新创建,无需手动处理。
### Q5: Release 内容是英文的
这是因为字符集问题自动降级了。你可以:
1. 在 Gitea Web 界面手动编辑 Release
2. 或者升级服务器的 MySQL 数据库配置
## 🔒 安全建议
1. **不要在脚本中硬编码 Token**
```bash
# ❌ 错误
GITEA_TOKEN="73c2e2cd8ca86dbeaebdeaef77cbab3564d5122a"
# ✅ 正确
export GITEA_TOKEN="73c2e2cd8ca86dbeaebdeaef77cbab3564d5122a"
```
2. **限制 Token 权限**
- 只授予必要的 `repo` 权限
- 定期轮换 Token
3. **不要提交 Token 到 Git**
```bash
# 添加到 .gitignore
echo '.env' >> .gitignore
echo '*.token' >> .gitignore
```
## 📚 相关文档
- `release.md` - 版本发布记录
- `GITEA_RELEASE_SUCCESS.md` - 成功案例
- [Gitea API 文档](https://docs.gitea.io/en-us/api-usage/)
## 🆕 版本历史
### v2.0 (2025-10-15)
- ✨ 添加字符集自动降级处理
- ✨ 改进错误提示和日志输出
- ✨ 添加 Release 创建验证
- ✨ 添加手动创建指南
- ✨ 检查 jq 命令是否安装
### v1.0 (2024-xx-xx)
- 🎉 初始版本
- ✅ 基本的发布功能
---
**维护者**: douboer
**更新时间**: 2025-10-15