Skip to content

Commit b1a6b87

Browse files
committed
[action/ci] 定时发布release版本
1 parent 45eea78 commit b1a6b87

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#
2+
# Copyright (c) 2025, RT-Thread Development Team
3+
#
4+
# SPDX-License-Identifier: Apache-2.0
5+
#
6+
# Change Logs:
7+
# Date Author Notes
8+
# 2025-04-01 Hydevcode 定时自动发送Release版本
9+
#
10+
name: Auto Release with PR Notes
11+
12+
on:
13+
schedule:
14+
- cron: '0 16 * 3,6,9,12 *'
15+
workflow_dispatch:
16+
17+
jobs:
18+
release:
19+
runs-on: ubuntu-latest
20+
if: github.repository_owner == 'RT-Thread'
21+
steps:
22+
- name: Checkout Code
23+
uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 0 # 获取完整提交历史
26+
27+
- name: Get Previous Tag
28+
id: prev_tag
29+
run: |
30+
# 获取上一个发布的标签(排除预发布标签)
31+
PREV_TAG=$(git describe --tags --abbrev=0 --match "v*" 2>/dev/null || echo "")
32+
echo "prev_tag=${PREV_TAG}" >> $GITHUB_OUTPUT
33+
echo "${PREV_TAG}"
34+
# 获取上一个版本的时间,如果有的话,没有就用基准时间
35+
PREV_TIME=$(gh release list -L 1 --json publishedAt | jq '.[].publishedAt')
36+
37+
echo "${PREV_TIME}"
38+
if [[ -z "$PREV_TIME" ]]; then
39+
# 基准时间
40+
PREV_TIME="2025-04-01"
41+
echo "${PREV_TIME}"
42+
fi
43+
echo "prev_time=${PREV_TIME}" >> $GITHUB_OUTPUT
44+
45+
echo "--------------------------------"
46+
if [[ -n "$PREV_TAG" ]]; then
47+
last_digit=$(echo "${PREV_TAG}" | grep -oE '[0-9]+$')
48+
new_last_digit=$((last_digit + 1))
49+
echo "$new_last_digit"
50+
new_version=$(echo "$PREV_TAG" | sed "s/[0-9]\+$/$new_last_digit/")
51+
52+
echo "$new_version"
53+
else
54+
echo "没有找到上一个版本"
55+
#默认第一个版本
56+
new_version=v1.0.0
57+
fi
58+
echo "new_version=${new_version}" >> $GITHUB_OUTPUT
59+
env:
60+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
61+
- name: Generate PR List
62+
id: pr_list
63+
run: |
64+
# 获取两个标签之间的 PR 列表(使用 GitHub CLI)
65+
# 依靠的是上一个版本的时间
66+
gh pr list \
67+
--base master \
68+
--state merged \
69+
--search "merged:>=${{steps.prev_tag.outputs.prev_time}}" \
70+
--json number,title,url \
71+
--jq 'map("- [#\(.number)](\(.url)) \(.title)") | join("\n")' \
72+
> pr_list.txt
73+
74+
# 将 PR 列表保存为变量
75+
PR_NOTES=$(cat pr_list.txt)
76+
77+
# 统计当前到上一个版本的pr做成描述
78+
RELEASE_NOTES="## ${{ steps.prev_tag.outputs.new_version }} ($(date -I))\n\n"
79+
if [ -n "$PR_NOTES" ]; then
80+
RELEASE_NOTES+="### Merged PRs since ${{ steps.prev_tag.outputs.prev_tag }}:\n"
81+
RELEASE_NOTES+="$PR_NOTES\n"
82+
else
83+
RELEASE_NOTES+="No new PRs since last release.\n"
84+
fi
85+
86+
echo -e "$RELEASE_NOTES" > release_notes.md
87+
echo "$RELEASE_NOTES"
88+
env:
89+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
90+
- name: Publish Release
91+
uses: softprops/action-gh-release@v2
92+
with:
93+
body_path: release_notes.md
94+
tag_name: ${{ steps.prev_tag.outputs.new_version }}
95+
name: RT-Thread ${{ steps.prev_tag.outputs.new_version }} released
96+
env:
97+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)