Files
map-client-vue/RELEASE_SCRIPT_UPDATE.md
2025-10-15 15:41:17 +08:00

182 lines
4.2 KiB
Markdown
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.

# release.sh 脚本更新说明
## 更新日期: 2025-10-15
## 📋 本次更新内容
### 1. ✅ 修复 Release 内容显示问题
**问题**: Release 内容中出现大量 `\n` 转义字符,导致格式混乱
**原因**: 使用 `jq -R -s` 读取文本时,会将整个文本作为一个 JSON 字符串,导致换行符被转义
**修复**: 改用 `jq --arg` 参数传递多行文本
```bash
# 修复前 (❌ 错误)
JSON_PAYLOAD=$(echo "$TAG_MESSAGE" | jq -R -s -c \
--arg version "$VERSION" \
--arg title "$VERSION - $RELEASE_TITLE" \
'{
tag_name: $version,
name: $title,
body: .,
draft: false,
prerelease: false
}')
# 修复后 (✅ 正确)
JSON_PAYLOAD=$(jq -n -c \
--arg version "$VERSION" \
--arg title "$VERSION - $RELEASE_TITLE" \
--arg body "$TAG_MESSAGE" \
'{
tag_name: $version,
name: $title,
body: $body,
draft: false,
prerelease: false
}')
```
### 2. ✅ 添加远程 Release 删除逻辑
**功能**: 如果远程已存在该版本的 Release自动删除后重新创建
**实现步骤**:
1. 检查远程是否存在该版本的 Release
2. 如果存在,获取 Release ID 并删除
3. 创建新的 Release
```bash
# 检查远程 Release
check_response=$(curl -s -w "\n%{http_code}" \
-X GET "$GITEA_URL/api/v1/repos/$GITEA_REPO/releases/tags/$VERSION" \
-H "Authorization: token $GITEA_TOKEN")
if [ "$check_http_code" -eq 200 ]; then
# 删除已存在的 Release
release_id=$(echo "$check_body" | jq -r '.id')
curl -s -X DELETE \
"$GITEA_URL/api/v1/repos/$GITEA_REPO/releases/$release_id" \
-H "Authorization: token $GITEA_TOKEN"
fi
```
### 3. ✅ 优化版本信息提取
**改进**: 正确提取 release.md 中的版本块内容
**提取逻辑**:
- 版本号: 取最后一个 `## vX.X.X` 格式的标题
- 标题: 取第一个 `###` 标题(去掉 emoji 和 markdown 标记)
- 内容: 从版本标题下一行到下一个版本或文件结尾
```bash
# 提取版本号
VERSION=$(grep "^## v" release.md | tail -n 1 | sed 's/^## *//')
# 提取内容
TAG_MESSAGE=$(awk "
/^## $VERSION\$/ { flag=1; next }
/^## v[0-9]/ && flag { exit }
flag { print }
" release.md)
# 提取标题
RELEASE_TITLE=$(echo "$TAG_MESSAGE" | grep -m 1 "^###" | sed 's/^### *//' | sed 's/^[🎯✨🔧🐛📦]* *//')
```
## 🎯 效果对比
### 修复前
```
Release Notes\n\nThis is release v1.0.3: 重大功能:停止生成 & UI 优化\n\nFor detailed...
```
显示为一行,所有换行符都是 `\n`
### 修复后
```
发布时间: 2025-10-15
### 🎯 重大功能:停止生成 & UI 优化
本版本实现了完整的停止生成功能...
```
正确显示多行格式,保留原始排版
## 🚀 使用方法
```bash
# 1. 设置 GITEA_TOKEN 环境变量
export GITEA_TOKEN="your_token_here"
# 2. 确保 release.md 已更新
# 版本格式: ## v1.0.x
# 标题格式: ### 🎯 标题内容
# 3. 运行发布脚本
./release.sh
# 输出示例:
# ✅ 分支: main
# ✅ 工作区干净
# 📝 版本号: v1.0.3
# 📌 标题: 重大功能:停止生成 & UI 优化
# 🔍 检查远程 Release 是否已存在...
# ⚠️ 远程已存在 Release v1.0.3,正在删除...
# ✅ 已删除旧的 Release
# ✅ Release 创建成功: v1.0.3
# 🔗 Release 地址: https://...
```
## 📝 release.md 格式要求
```markdown
## v1.0.x
发布时间: YYYY-MM-DD
### 🎯 标题内容
详细说明...
#### 子标题
更多内容...
---
## v1.0.y
...
```
## ⚠️ 注意事项
1. **版本号格式**: 必须是 `## v` 开头,如 `## v1.0.3`
2. **标题提取**: 优先提取第一个 `###` 标题
3. **内容范围**: 从版本标题下一行到下一个版本或文件结尾
4. **字符集**: 如果中文内容创建失败,会自动回退到英文版本
5. **删除逻辑**: 会自动删除远程已存在的同名 Release
## 🔧 依赖要求
- `jq` - JSON 处理工具
- `curl` - HTTP 请求工具
- `git` - 版本控制
- `GITEA_TOKEN` - Gitea API 访问令牌
## 📚 相关文件
- `release.sh` - 发布脚本
- `test-release-extract.sh` - 版本提取测试
- `test-json-generation.sh` - JSON 生成测试
- `release.md` - 版本发布记录
---
**更新完成!** 🎉
现在 Release 内容会正确显示,支持删除重建,版本信息提取更准确。