4.2 KiB
4.2 KiB
release.sh 脚本更新说明
更新日期: 2025-10-15
📋 本次更新内容
1. ✅ 修复 Release 内容显示问题
问题: Release 内容中出现大量 \n 转义字符,导致格式混乱
原因: 使用 jq -R -s 读取文本时,会将整个文本作为一个 JSON 字符串,导致换行符被转义
修复: 改用 jq --arg 参数传递多行文本
# 修复前 (❌ 错误)
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,自动删除后重新创建
实现步骤:
- 检查远程是否存在该版本的 Release
- 如果存在,获取 Release ID 并删除
- 创建新的 Release
# 检查远程 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 标记) - 内容: 从版本标题下一行到下一个版本或文件结尾
# 提取版本号
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 优化
本版本实现了完整的停止生成功能...
正确显示多行格式,保留原始排版
🚀 使用方法
# 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 格式要求
## v1.0.x
发布时间: YYYY-MM-DD
### 🎯 标题内容
详细说明...
#### 子标题
更多内容...
---
## v1.0.y
...
⚠️ 注意事项
- 版本号格式: 必须是
## v开头,如## v1.0.3 - 标题提取: 优先提取第一个
###标题 - 内容范围: 从版本标题下一行到下一个版本或文件结尾
- 字符集: 如果中文内容创建失败,会自动回退到英文版本
- 删除逻辑: 会自动删除远程已存在的同名 Release
🔧 依赖要求
jq- JSON 处理工具curl- HTTP 请求工具git- 版本控制GITEA_TOKEN- Gitea API 访问令牌
📚 相关文件
release.sh- 发布脚本test-release-extract.sh- 版本提取测试test-json-generation.sh- JSON 生成测试release.md- 版本发布记录
更新完成! 🎉
现在 Release 内容会正确显示,支持删除重建,版本信息提取更准确。