123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- name: Create Release Tag
- on:
- push:
- tags:
- - 'v*' # 推送标签,比如 v1.0, v20.15.10
- jobs:
- build:
- name: 创建发布
- runs-on: ubuntu-latest
- steps:
- - name: 检出代码
- uses: actions/checkout@v2
- - name: 获取当前和上一个标签
- id: get_tags
- run: |
- git fetch --prune --unshallow
- tags=($(git tag -l --sort=-version:refname))
- current_tag=${tags[0]}
- previous_tag=${tags[1]}
- echo "::set-output name=current_tag::$current_tag"
- echo "::set-output name=previous_tag::$previous_tag"
- - name: 提取并分类提交消息
- id: extract_commit_messages
- run: |
- set -e
- current_tag="${{ steps.get_tags.outputs.current_tag }}"
- previous_tag="${{ steps.get_tags.outputs.previous_tag }}"
- commit_messages=$(git log --pretty=format:"%s %h" "$previous_tag".."$current_tag" | grep -E 'feat|fix|docs|perf')
- feat_messages=$(echo "$commit_messages" | grep 'feat' || true)
- fix_messages=$(echo "$commit_messages" | grep 'fix' || true)
- docs_messages=$(echo "$commit_messages" | grep 'docs' || true)
- perf_messages=$(echo "$commit_messages" | grep 'perf' || true)
- echo "::set-output name=feat_messages::${feat_messages[@]}"
- echo "::set-output name=fix_messages::${fix_messages[@]}"
- echo "::set-output name=docs_messages::${docs_messages[@]}"
- echo "::set-output name=perf_messages::${perf_messages[@]}"
- - name: 获取当前分支名
- id: get_branch_name
- run: |
- branch_name=$(git rev-parse --abbrev-ref HEAD)
- echo "::set-output name=branch_name::$branch_name"
- - name: 发布说明
- id: generate_release_notes
- run: |
- # 提取提交消息分类
- feat_messages=("${{ steps.extract_commit_messages.outputs.feat_messages }}")
- fix_messages=("${{ steps.extract_commit_messages.outputs.fix_messages }}")
- docs_messages=("${{ steps.extract_commit_messages.outputs.docs_messages }}")
- perf_messages=("${{ steps.extract_commit_messages.outputs.perf_messages }}")
-
- # 生成发布说明的Markdown字符串
- release_notes="> 请查看 [更新日志](./CHANGELOG.md) 获取所有变更详情。 \n## 更新内容: \n"
-
- if [[ -n "$feat_messages" ]]; then
- release_notes="$release_notes\n### ✨ Features | 新功能: \n"
- for message in "${feat_messages[@]}"; do
- release_notes="$release_notes\n- $message"
- done
- fi
-
- if [[ -n "$fix_messages" ]]; then
- release_notes="$release_notes\n### 🐛 Bug Fixes | Bug 修复: \n"
- for message in "${fix_messages[@]}"; do
- release_notes="$release_notes\n- $message"
- done
- fi
-
- if [[ -n "$docs_messages" ]]; then
- release_notes="$release_notes\n### ✏️ Documentation | 文档: \n"
- for message in "${docs_messages[@]}"; do
- release_notes="$release_notes\n- $message"
- done
- fi
-
- if [[ -n "$perf_messages" ]]; then
- release_notes="$release_notes\n### ⚡ Performance Improvements | 性能优化: \n"
- for message in "${perf_messages[@]}"; do
- release_notes="$release_notes\n- $message"
- done
- fi
- echo "::set-output name=release_notes::$release_notes"
-
- - name: 写入生成的发布说明到 changelog.md
- run: |
- echo -e "${{ steps.generate_release_notes.outputs.release_notes }}" > changelog.md
- cat changelog.md
- - name: 创建标签的发布
- id: release_tag
- uses: ncipollo/release-action@v1
- with:
- generateReleaseNotes: "false" # 禁用自动生成发布说明
- bodyfile: changelog.md
|