2727 run : |
2828 echo "Checking nightly build conditions..."
2929
30+ # 函数:检查commit是否有labels
31+ has_labels() {
32+ local commit_sha=$1
33+ # 获取commit的PR信息,检查是否有labels
34+ local pr_number=$(gh pr list --state merged --search "$commit_sha" --json number --jq '.[0].number' 2>/dev/null || echo "")
35+ if [ -n "$pr_number" ]; then
36+ local labels=$(gh pr view "$pr_number" --json labels --jq '.labels | length' 2>/dev/null || echo "0")
37+ [ "$labels" -gt 0 ]
38+ else
39+ # 如果不是PR commit,检查commit message是否包含标签格式
40+ git log --format=%B -n 1 "$commit_sha" | grep -E '\[(feat|fix|style|refactor|perf|test)\]' >/dev/null 2>&1
41+ fi
42+ }
43+
44+ # 获取有labels的commits
45+ get_labeled_commits_since() {
46+ local since_commit=$1
47+ local commits=$(git rev-list --reverse "$since_commit"..HEAD 2>/dev/null || git rev-list --reverse HEAD)
48+ local labeled_commits=""
49+
50+ for commit in $commits; do
51+ if has_labels "$commit"; then
52+ if [ -z "$labeled_commits" ]; then
53+ labeled_commits="$commit"
54+ else
55+ labeled_commits="$labeled_commits $commit"
56+ fi
57+ fi
58+ done
59+
60+ echo "$labeled_commits"
61+ }
62+
3063 # 检查是否存在nightly prerelease
3164 if gh release view nightly >/dev/null 2>&1; then
3265 echo "has_nightly=true" >> $GITHUB_OUTPUT
@@ -35,15 +68,16 @@ jobs:
3568 # 获取nightly标签的commit
3669 nightly_commit=$(git rev-list -n 1 nightly 2>/dev/null || echo "")
3770 if [ -n "$nightly_commit" ]; then
38- # 检查nightly标签之后是否有新的commit
71+ # 检查nightly标签之后是否有带labels的新commit
72+ labeled_commits=$(get_labeled_commits_since "$nightly_commit")
3973 latest_commit=$(git rev-parse HEAD)
4074 echo "latest_commit=$latest_commit" >> $GITHUB_OUTPUT
4175
42- if [ "$nightly_commit" != "$latest_commit " ]; then
43- echo "New commits found after nightly tag"
76+ if [ -n "$labeled_commits " ]; then
77+ echo "New labeled commits found after nightly tag: $labeled_commits "
4478 echo "should_build=true" >> $GITHUB_OUTPUT
4579 else
46- echo "No new commits after nightly tag"
80+ echo "No new labeled commits after nightly tag"
4781 echo "should_build=false" >> $GITHUB_OUTPUT
4882 fi
4983 else
@@ -58,23 +92,32 @@ jobs:
5892 latest_release=$(gh release list --exclude-pre-releases --limit 1 --json tagName --jq '.[0].tagName' 2>/dev/null || echo "")
5993
6094 if [ -n "$latest_release" ]; then
61- # 检查最新release之后是否有新的commit
95+ # 检查最新release之后是否有带labels的新commit
6296 release_commit=$(git rev-list -n 1 "$latest_release" 2>/dev/null || echo "")
97+ labeled_commits=$(get_labeled_commits_since "$release_commit")
6398 latest_commit=$(git rev-parse HEAD)
6499 echo "latest_commit=$latest_commit" >> $GITHUB_OUTPUT
65100
66- if [ "$release_commit" != "$latest_commit " ]; then
67- echo "New commits found after latest release $latest_release"
101+ if [ -n "$labeled_commits " ]; then
102+ echo "New labeled commits found after latest release $latest_release: $labeled_commits "
68103 echo "should_build=true" >> $GITHUB_OUTPUT
69104 else
70- echo "No new commits after latest release"
105+ echo "No new labeled commits after latest release"
71106 echo "should_build=false" >> $GITHUB_OUTPUT
72107 fi
73108 else
74- echo "No previous releases found, will build nightly"
109+ echo "No previous releases found, checking for any labeled commits"
110+ labeled_commits=$(get_labeled_commits_since "")
75111 latest_commit=$(git rev-parse HEAD)
76112 echo "latest_commit=$latest_commit" >> $GITHUB_OUTPUT
77- echo "should_build=true" >> $GITHUB_OUTPUT
113+
114+ if [ -n "$labeled_commits" ]; then
115+ echo "Found labeled commits, will build nightly: $labeled_commits"
116+ echo "should_build=true" >> $GITHUB_OUTPUT
117+ else
118+ echo "No labeled commits found, skipping nightly build"
119+ echo "should_build=false" >> $GITHUB_OUTPUT
120+ fi
78121 fi
79122 fi
80123 env :
0 commit comments