Skip to content

Commit c72878f

Browse files
authored
Merge pull request #237 from alley-rs/dev
ci(workflow): 优化夜间构建条件检查逻辑
2 parents 26ddc56 + 36706d1 commit c72878f

File tree

1 file changed

+53
-10
lines changed

1 file changed

+53
-10
lines changed

.github/workflows/nightly.yml

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,39 @@ jobs:
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

Comments
 (0)