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

4.2 KiB
Raw Blame History

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自动删除后重新创建

实现步骤:

  1. 检查远程是否存在该版本的 Release
  2. 如果存在,获取 Release ID 并删除
  3. 创建新的 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

...

⚠️ 注意事项

  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 内容会正确显示,支持删除重建,版本信息提取更准确。