Skip to content

Commit 6c3a70a

Browse files
committed
fix(ci): rewrite release notes generation - use direct echo instead of heredoc+placeholder replacement
1 parent 523a608 commit 6c3a70a

1 file changed

Lines changed: 150 additions & 187 deletions

File tree

.github/workflows/release.yml

Lines changed: 150 additions & 187 deletions
Original file line numberDiff line numberDiff line change
@@ -353,21 +353,21 @@ jobs:
353353
echo "Release assets:"
354354
ls -la release-assets/
355355
356-
- name: Get previous tag
357-
id: prev_tag
358-
run: |
359-
# 获取上一个 tag
360-
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
361-
echo "prev_tag=$PREV_TAG" >> $GITHUB_OUTPUT
362-
echo "Previous tag: $PREV_TAG"
363-
364-
- name: Generate Changelog
365-
id: changelog
356+
- name: Generate Release Notes
357+
id: release_notes
366358
run: |
367359
VERSION=${{ steps.get_version.outputs.version }}
368-
PREV_TAG=${{ steps.prev_tag.outputs.prev_tag }}
360+
TAG_NAME=${GITHUB_REF_NAME}
361+
REPO=${{ github.repository }}
362+
TODAY=$(date +'%Y-%m-%d')
369363
370-
# 确定比较范围
364+
# ========== 1. 获取上一个 tag ==========
365+
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
366+
echo "DEBUG: PREV_TAG='${PREV_TAG}'"
367+
echo "DEBUG: HEAD=$(git rev-parse HEAD)"
368+
echo "DEBUG: All tags: $(git tag -l 'release-v*' | tr '\n' ' ')"
369+
370+
# ========== 2. 生成 Changelog ==========
371371
if [ -z "$PREV_TAG" ]; then
372372
COMPARE_RANGE="HEAD"
373373
echo "No previous tag found, using all commits"
@@ -376,203 +376,166 @@ jobs:
376376
echo "Comparing: $COMPARE_RANGE"
377377
fi
378378
379-
# 初始化变更分类
380379
FEATURES=""
381380
FIXES=""
382381
IMPROVEMENTS=""
383-
BREAKING=""
384382
DOCS=""
385383
REFACTOR=""
386-
TESTS=""
387384
CHORE=""
388385
OTHER=""
389386
390-
# 解析 commit 消息并分类
391387
while IFS= read -r line; do
392-
if [ -z "$line" ]; then
393-
continue
394-
fi
395-
396-
# 提取 commit 信息 (格式: hash|subject)
388+
[ -z "$line" ] && continue
397389
HASH=$(echo "$line" | cut -d'|' -f1 | cut -c1-7)
398390
MSG=$(echo "$line" | cut -d'|' -f2-)
399-
400-
# 跳过合并提交
401-
if echo "$MSG" | grep -qiE "^Merge"; then
402-
continue
403-
fi
404-
405-
# 根据 Conventional Commits 格式分类
391+
echo "$MSG" | grep -qiE "^Merge" && continue
406392
ENTRY="- $MSG (\`$HASH\`)"
407-
408393
if echo "$MSG" | grep -qiE "^feat(\(.+\))?[!:]|^feature[!:]"; then
409-
FEATURES="$FEATURES\n$ENTRY"
394+
FEATURES="${FEATURES}${ENTRY}
395+
"
410396
elif echo "$MSG" | grep -qiE "^fix(\(.+\))?[!:]"; then
411-
FIXES="$FIXES\n$ENTRY"
397+
FIXES="${FIXES}${ENTRY}
398+
"
412399
elif echo "$MSG" | grep -qiE "^perf(\(.+\))?[!:]|^improve(\(.+\))?[!:]|^optimize"; then
413-
IMPROVEMENTS="$IMPROVEMENTS\n$ENTRY"
414-
elif echo "$MSG" | grep -qiE "^breaking|^!:"; then
415-
BREAKING="$BREAKING\n$ENTRY"
400+
IMPROVEMENTS="${IMPROVEMENTS}${ENTRY}
401+
"
416402
elif echo "$MSG" | grep -qiE "^docs?(\(.+\))?[!:]"; then
417-
DOCS="$DOCS\n$ENTRY"
403+
DOCS="${DOCS}${ENTRY}
404+
"
418405
elif echo "$MSG" | grep -qiE "^refactor(\(.+\))?[!:]"; then
419-
REFACTOR="$REFACTOR\n$ENTRY"
420-
elif echo "$MSG" | grep -qiE "^test(s)?(\(.+\))?[!:]"; then
421-
TESTS="$TESTS\n$ENTRY"
406+
REFACTOR="${REFACTOR}${ENTRY}
407+
"
422408
elif echo "$MSG" | grep -qiE "^chore(\(.+\))?[!:]|^build(\(.+\))?[!:]|^ci(\(.+\))?[!:]"; then
423-
CHORE="$CHORE\n$ENTRY"
409+
CHORE="${CHORE}${ENTRY}
410+
"
424411
else
425-
OTHER="$OTHER\n$ENTRY"
412+
OTHER="${OTHER}${ENTRY}
413+
"
426414
fi
427-
done < <(git log $COMPARE_RANGE --pretty=format:"%H|%s" --no-merges 2>/dev/null || echo "")
428-
429-
# 生成 Changelog 内容
430-
CHANGELOG=""
431-
432-
if [ -n "$BREAKING" ]; then
433-
CHANGELOG="$CHANGELOG\n### ⚠️ 重大变更 (Breaking Changes)\n$BREAKING\n"
434-
fi
435-
436-
if [ -n "$FEATURES" ]; then
437-
CHANGELOG="$CHANGELOG\n### ✨ 新功能 (Features)\n$FEATURES\n"
438-
fi
439-
440-
if [ -n "$FIXES" ]; then
441-
CHANGELOG="$CHANGELOG\n### 🐛 问题修复 (Bug Fixes)\n$FIXES\n"
442-
fi
443-
444-
if [ -n "$IMPROVEMENTS" ]; then
445-
CHANGELOG="$CHANGELOG\n### ⚡ 性能优化 (Performance)\n$IMPROVEMENTS\n"
446-
fi
447-
448-
if [ -n "$REFACTOR" ]; then
449-
CHANGELOG="$CHANGELOG\n### ♻️ 代码重构 (Refactor)\n$REFACTOR\n"
450-
fi
451-
452-
if [ -n "$DOCS" ]; then
453-
CHANGELOG="$CHANGELOG\n### 📝 文档更新 (Documentation)\n$DOCS\n"
454-
fi
455-
456-
if [ -n "$TESTS" ]; then
457-
CHANGELOG="$CHANGELOG\n### 🧪 测试 (Tests)\n$TESTS\n"
458-
fi
459-
460-
if [ -n "$CHORE" ]; then
461-
CHANGELOG="$CHANGELOG\n### 🔧 其他更新 (Chore)\n$CHORE\n"
462-
fi
463-
464-
if [ -n "$OTHER" ]; then
465-
CHANGELOG="$CHANGELOG\n### 📋 其他变更 (Other Changes)\n$OTHER\n"
466-
fi
467-
468-
# 如果没有任何变更记录
469-
if [ -z "$CHANGELOG" ]; then
470-
CHANGELOG="\n*暂无详细变更记录*\n"
471-
fi
472-
473-
# 保存到文件供后续使用
474-
echo -e "$CHANGELOG" > changelog_content.md
415+
done < <(git log ${COMPARE_RANGE} --pretty=format:"%H|%s" --no-merges 2>/dev/null || echo "")
475416
476417
# 统计信息
477-
TOTAL_COMMITS=$(git rev-list --count $COMPARE_RANGE 2>/dev/null || echo "0")
478-
CONTRIBUTORS=$(git log $COMPARE_RANGE --format='%aN' 2>/dev/null | sort -u | wc -l || echo "0")
479-
echo "total_commits=$TOTAL_COMMITS" >> $GITHUB_OUTPUT
480-
echo "contributors=$CONTRIBUTORS" >> $GITHUB_OUTPUT
481-
482-
- name: Generate Release Notes
483-
id: release_notes
484-
run: |
485-
VERSION=${{ steps.get_version.outputs.version }}
486-
PREV_TAG=${{ steps.prev_tag.outputs.prev_tag }}
487-
TOTAL_COMMITS=${{ steps.changelog.outputs.total_commits }}
488-
CONTRIBUTORS=${{ steps.changelog.outputs.contributors }}
489-
490-
# 读取 changelog 内容
491-
CHANGELOG_CONTENT=$(cat changelog_content.md)
492-
493-
# 生成比较链接
494-
if [ -n "$PREV_TAG" ]; then
495-
COMPARE_URL="https://github.com/${{ github.repository }}/compare/${PREV_TAG}...${GITHUB_REF_NAME}"
496-
COMPARE_SECTION="[📊 查看完整代码变更](${COMPARE_URL}) | 共 ${TOTAL_COMMITS} 个提交,${CONTRIBUTORS} 位贡献者"
497-
else
498-
COMPARE_SECTION="这是首次发布版本"
499-
fi
500-
501-
cat > release_notes.md << 'RELEASE_EOF'
502-
# SQLMap WebUI v__VERSION__
503-
504-
## 📋 版本概述
505-
506-
发布日期: __DATE__
507-
508-
__COMPARE_SECTION__
509-
510-
## 🔄 更新内容
511-
512-
__CHANGELOG_CONTENT__
513-
514-
---
515-
516-
## 📦 发布包说明
517-
518-
### 后端应用 (sqlmapwebui-__VERSION__.zip)
519-
完整的后端服务包,包含:
520-
- Python 后端 API 服务
521-
- 前端静态资源(已集成)
522-
- 启动脚本 (start.sh / start.bat)
523-
524-
**使用方法:**
525-
```bash
526-
# Linux/Mac
527-
unzip sqlmapwebui-__VERSION__.zip
528-
cd sqlmapwebui-__VERSION__
529-
./start.sh
530-
531-
# Windows
532-
# 解压后运行 start.bat
533-
```
534-
535-
### Burp Suite 插件
536-
537-
#### Montoya API 版本 (推荐)
538-
- **文件**: sqlmap-webui-burp-montoya-__VERSION__.jar
539-
- **适用**: Burp Suite 2023.1 及以上版本
540-
- **Java 要求**: Java 17+
541-
542-
#### Legacy API 版本
543-
- **文件**: sqlmap-webui-burp-legacy-__VERSION__.jar
544-
- **适用**: Burp Suite 老版本
545-
- **Java 要求**: Java 11+
546-
547-
### 漏洞测试靶场 (vulnTestServer-__VERSION__.zip)
548-
用于测试的漏洞环境,包含多种 SQL 注入场景。
549-
550-
**使用方法:**
551-
```bash
552-
unzip vulnTestServer-__VERSION__.zip
553-
cd vulnTestServer-__VERSION__
554-
./start.sh # 或 Windows 运行 start.bat
555-
```
556-
557-
## ⚠️ 安全提示
558-
本工具仅用于授权的安全测试。请确保在使用前获得适当的授权。
559-
560-
---
561-
*此版本由 GitHub Actions 自动构建发布*
562-
RELEASE_EOF
563-
564-
# 替换占位符
565-
sed -i "s/__VERSION__/${VERSION}/g" release_notes.md
566-
sed -i "s/__DATE__/$(date +'%Y-%m-%d')/g" release_notes.md
567-
568-
# 使用 awk 替换 COMPARE_SECTION(避免内容中的特殊字符干扰 sed 分隔符)
569-
awk -v section="$COMPARE_SECTION" '{gsub(/__COMPARE_SECTION__/, section)}1' release_notes.md > release_notes.tmp && mv release_notes.tmp release_notes.md
570-
571-
# 替换 changelog 内容(使用 awk 处理多行)
572-
awk -v content="$CHANGELOG_CONTENT" '{gsub(/__CHANGELOG_CONTENT__/, content)}1' release_notes.md > release_notes.tmp && mv release_notes.tmp release_notes.md
573-
574-
# 移除每行前面的缩进空格
575-
sed -i 's/^ //' release_notes.md
418+
TOTAL_COMMITS=$(git rev-list --count ${COMPARE_RANGE} 2>/dev/null || echo "0")
419+
CONTRIBUTORS=$(git log ${COMPARE_RANGE} --format='%aN' 2>/dev/null | sort -u | wc -l | tr -d ' ' || echo "0")
420+
echo "DEBUG: TOTAL_COMMITS=${TOTAL_COMMITS}, CONTRIBUTORS=${CONTRIBUTORS}"
421+
422+
# ========== 3. 直接写入 release notes 文件(不使用占位符替换)==========
423+
{
424+
echo "# SQLMap WebUI v${VERSION}"
425+
echo ""
426+
echo "## 📋 版本概述"
427+
echo ""
428+
echo "发布日期: ${TODAY}"
429+
echo ""
430+
if [ -n "$PREV_TAG" ]; then
431+
echo "[📊 查看完整代码变更](https://github.com/${REPO}/compare/${PREV_TAG}...${TAG_NAME}) | 共 ${TOTAL_COMMITS} 个提交,${CONTRIBUTORS} 位贡献者"
432+
else
433+
echo "这是首次发布版本"
434+
fi
435+
echo ""
436+
echo "## 🔄 更新内容"
437+
echo ""
438+
# 写入分类变更
439+
HAS_CHANGES=false
440+
if [ -n "$FEATURES" ]; then
441+
echo "### ✨ 新功能 (Features)"
442+
echo ""
443+
echo "$FEATURES"
444+
HAS_CHANGES=true
445+
fi
446+
if [ -n "$FIXES" ]; then
447+
echo "### 🐛 问题修复 (Bug Fixes)"
448+
echo ""
449+
echo "$FIXES"
450+
HAS_CHANGES=true
451+
fi
452+
if [ -n "$IMPROVEMENTS" ]; then
453+
echo "### ⚡ 性能优化 (Performance)"
454+
echo ""
455+
echo "$IMPROVEMENTS"
456+
HAS_CHANGES=true
457+
fi
458+
if [ -n "$REFACTOR" ]; then
459+
echo "### ♻️ 代码重构 (Refactor)"
460+
echo ""
461+
echo "$REFACTOR"
462+
HAS_CHANGES=true
463+
fi
464+
if [ -n "$DOCS" ]; then
465+
echo "### 📝 文档更新 (Documentation)"
466+
echo ""
467+
echo "$DOCS"
468+
HAS_CHANGES=true
469+
fi
470+
if [ -n "$CHORE" ]; then
471+
echo "### 🔧 其他更新 (Chore)"
472+
echo ""
473+
echo "$CHORE"
474+
HAS_CHANGES=true
475+
fi
476+
if [ -n "$OTHER" ]; then
477+
echo "### 📋 其他变更 (Other Changes)"
478+
echo ""
479+
echo "$OTHER"
480+
HAS_CHANGES=true
481+
fi
482+
if [ "$HAS_CHANGES" = false ]; then
483+
echo "*暂无详细变更记录*"
484+
fi
485+
echo ""
486+
echo "---"
487+
echo ""
488+
echo "## 📦 发布包说明"
489+
echo ""
490+
echo "### 后端应用 (sqlmapwebui-${VERSION}.zip)"
491+
echo "完整的后端服务包,包含:"
492+
echo "- Python 后端 API 服务"
493+
echo "- 前端静态资源(已集成)"
494+
echo "- 启动脚本 (start.sh / start.bat)"
495+
echo ""
496+
echo '**使用方法:**'
497+
echo '```bash'
498+
echo '# Linux/Mac'
499+
echo "unzip sqlmapwebui-${VERSION}.zip"
500+
echo "cd sqlmapwebui-${VERSION}"
501+
echo './start.sh'
502+
echo ''
503+
echo '# Windows'
504+
echo '# 解压后运行 start.bat'
505+
echo '```'
506+
echo ""
507+
echo "### Burp Suite 插件"
508+
echo ""
509+
echo "#### Montoya API 版本 (推荐)"
510+
echo "- **文件**: sqlmap-webui-burp-montoya-${VERSION}.jar"
511+
echo "- **适用**: Burp Suite 2023.1 及以上版本"
512+
echo "- **Java 要求**: Java 17+"
513+
echo ""
514+
echo "#### Legacy API 版本"
515+
echo "- **文件**: sqlmap-webui-burp-legacy-${VERSION}.jar"
516+
echo "- **适用**: Burp Suite 老版本"
517+
echo "- **Java 要求**: Java 11+"
518+
echo ""
519+
echo "### 漏洞测试靶场 (vulnTestServer-${VERSION}.zip)"
520+
echo "用于测试的漏洞环境,包含多种 SQL 注入场景。"
521+
echo ""
522+
echo '**使用方法:**'
523+
echo '```bash'
524+
echo "unzip vulnTestServer-${VERSION}.zip"
525+
echo "cd vulnTestServer-${VERSION}"
526+
echo './start.sh # 或 Windows 运行 start.bat'
527+
echo '```'
528+
echo ""
529+
echo "## ⚠️ 安全提示"
530+
echo "本工具仅用于授权的安全测试。请确保在使用前获得适当的授权。"
531+
echo ""
532+
echo "---"
533+
echo "*此版本由 GitHub Actions 自动构建发布*"
534+
} > release_notes.md
535+
536+
echo "DEBUG: release_notes.md generated successfully"
537+
echo "DEBUG: First 10 lines:"
538+
head -10 release_notes.md
576539
577540
- name: Create Release
578541
uses: softprops/action-gh-release@v2

0 commit comments

Comments
 (0)