update at 2025-10-15 15:41:17
This commit is contained in:
181
RELEASE_SCRIPT_UPDATE.md
Normal file
181
RELEASE_SCRIPT_UPDATE.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# 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 内容会正确显示,支持删除重建,版本信息提取更准确。
|
||||
@@ -175,13 +175,15 @@ fi
|
||||
|
||||
# 7.2 使用 jq 生成正确的 JSON
|
||||
# 首先尝试使用原始内容(中文)
|
||||
JSON_PAYLOAD=$(echo "$TAG_MESSAGE" | jq -R -s -c \
|
||||
# 使用 --arg 参数来正确处理多行文本,避免 \n 转义问题
|
||||
JSON_PAYLOAD=$(jq -n -c \
|
||||
--arg version "$VERSION" \
|
||||
--arg title "$VERSION - $RELEASE_TITLE" \
|
||||
--arg body "$TAG_MESSAGE" \
|
||||
'{
|
||||
tag_name: $version,
|
||||
name: $title,
|
||||
body: .,
|
||||
body: $body,
|
||||
draft: false,
|
||||
prerelease: false
|
||||
}')
|
||||
|
||||
64
test-json-generation.sh
Executable file
64
test-json-generation.sh
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 测试 JSON 生成逻辑
|
||||
|
||||
echo "🧪 测试 Release JSON 生成"
|
||||
echo "================================"
|
||||
|
||||
# 模拟提取的内容
|
||||
VERSION="v1.0.3"
|
||||
RELEASE_TITLE="重大功能:停止生成 & UI 优化"
|
||||
TAG_MESSAGE="发布时间: 2025-10-15
|
||||
|
||||
### 🎯 重大功能:停止生成 & UI 优化
|
||||
|
||||
本版本实现了完整的停止生成功能。
|
||||
|
||||
#### ✨ 核心功能
|
||||
|
||||
**⏸️ 智能停止生成**
|
||||
- 点击停止按钮立即中断 AI 回复
|
||||
- 保留已生成的内容"
|
||||
|
||||
echo "📝 版本号: $VERSION"
|
||||
echo "📌 标题: $RELEASE_TITLE"
|
||||
echo ""
|
||||
|
||||
# 方法1:使用 jq -R -s(会导致 \n 转义)
|
||||
echo "❌ 方法1 (有问题的):"
|
||||
JSON_BAD=$(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
|
||||
}')
|
||||
echo "$JSON_BAD" | jq -r '.body' | head -n 5
|
||||
echo ""
|
||||
|
||||
# 方法2:使用 --arg(正确的)
|
||||
echo "✅ 方法2 (正确的):"
|
||||
JSON_GOOD=$(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
|
||||
}')
|
||||
echo "$JSON_GOOD" | jq -r '.body' | head -n 5
|
||||
echo ""
|
||||
|
||||
echo "🔍 比较:"
|
||||
echo "方法1 body 长度: $(echo "$JSON_BAD" | jq -r '.body' | wc -c)"
|
||||
echo "方法2 body 长度: $(echo "$JSON_GOOD" | jq -r '.body' | wc -c)"
|
||||
echo ""
|
||||
|
||||
echo "📋 完整的 JSON (方法2):"
|
||||
echo "$JSON_GOOD" | jq '.'
|
||||
Reference in New Issue
Block a user