279 lines
5.8 KiB
Markdown
279 lines
5.8 KiB
Markdown
# 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
|