Skip to content

Commit 531371e

Browse files
authored
Update monitor-prs.yml
Signed-off-by: Kay-Tian <[email protected]>
1 parent e34ff64 commit 531371e

File tree

1 file changed

+49
-10
lines changed

1 file changed

+49
-10
lines changed

.github/workflows/monitor-prs.yml

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,56 @@ jobs:
101101
echo "当前已处理PR列表: $PROCESSED_PRS"
102102
103103
# 获取开放PR列表
104-
PR_API_URL="https://api.github.com/repos/$TARGET_REPO/pulls?state=open&per_page=100"
105-
PR_RESPONSE=$(curl -s -w "\n%{http_code}" -H "Authorization: token $GITHUB_TOKEN" "$PR_API_URL")
106-
PR_HTTP_CODE=$(echo "$PR_RESPONSE" | tail -n1)
107-
PR_BODY=$(echo "$PR_RESPONSE" | head -n -1)
108-
if [ "$PR_HTTP_CODE" -ne 200 ]; then
109-
echo "❌ 获取PR列表失败,状态码: $PR_HTTP_CODE"
110-
exit 1
111-
fi
112-
PR_LIST=$(echo "$PR_BODY" | jq -r '.[]?.number | select(. != null)')
113-
echo "获取到的PR列表: $PR_LIST"
104+
# PR_API_URL="https://api.github.com/repos/$TARGET_REPO/pulls?state=open&per_page=100"
105+
# PR_RESPONSE=$(curl -s -w "\n%{http_code}" -H "Authorization: token $GITHUB_TOKEN" "$PR_API_URL")
106+
# PR_HTTP_CODE=$(echo "$PR_RESPONSE" | tail -n1)
107+
# PR_BODY=$(echo "$PR_RESPONSE" | head -n -1)
108+
# if [ "$PR_HTTP_CODE" -ne 200 ]; then
109+
# echo "❌ 获取PR列表失败,状态码: $PR_HTTP_CODE"
110+
# exit 1
111+
# fi
112+
# PR_LIST=$(echo "$PR_BODY" | jq -r '.[]?.number | select(. != null)')
113+
# echo "获取到的PR列表: $PR_LIST"
114+
115+
# 1. 获取最近7天合并的PR(核心修改:state=closed + 按合并时间排序)
116+
# API参数说明:
117+
# - state=closed:筛选状态为"已关闭"的PR(合并后的PR状态是closed)
118+
# - sort=merged:按合并时间排序
119+
# - direction=desc:降序(最近合并的在前)
120+
SINCE_DATE=$(date -u -d '7 days ago' +'%Y-%m-%dT%H:%M:%SZ')
121+
CURRENT_PAGE_URL="https://api.github.com/repos/$TARGET_REPO/pulls?state=closed&sort=merged&direction=desc&per_page=100&since=$SINCE_DATE"
122+
ALL_MERGED_PR_NUMBERS=""
123+
124+
# 分页获取所有最近合并的PR
125+
while [ -n "$CURRENT_PAGE_URL" ]; do
126+
# 检查API速率限制
127+
RATE_LIMIT=$(curl -s -I -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/rate_limit" | grep -i "x-ratelimit-remaining" | awk '{print $2}')
128+
[ "$RATE_LIMIT" -lt 50 ] && echo "速率限制不足,暂停10分钟" && sleep 600
129+
130+
# 请求当前页PR
131+
echo "请求合并PR列表: $CURRENT_PAGE_URL"
132+
RESPONSE=$(curl -s -w "\n%{http_code}\n%{header_Link}" -H "Authorization: token $GITHUB_TOKEN" "$CURRENT_PAGE_URL")
133+
HTTP_CODE=$(echo "$RESPONSE" | tail -n2 | head -n1)
134+
LINK_HEADER=$(echo "$RESPONSE" | tail -n1)
135+
PR_BODY=$(echo "$RESPONSE" | head -n -2)
114136
137+
[ "$HTTP_CODE" -ne 200 ] && echo "获取PR列表失败,状态码: $HTTP_CODE" && exit 1
138+
139+
# 提取当前页中"已合并"的PR编号(过滤未合并的closed PR)
140+
# 通过 jq 筛选 merged_at 不为null的PR(即真正合并的)
141+
CURRENT_PAGE_MERGED_PR=$(echo "$PR_BODY" | jq -r '.[]? | select(.merged_at != null) | .number')
142+
ALL_MERGED_PR_NUMBERS="$ALL_MERGED_PR_NUMBERS $CURRENT_PAGE_MERGED_PR"
143+
echo "当前页合并PR数量: $(echo "$CURRENT_PAGE_MERGED_PR" | wc -w), 累计: $(echo "$ALL_MERGED_PR_NUMBERS" | wc -w)"
144+
145+
# 获取下一页URL
146+
CURRENT_PAGE_URL=$(echo "$LINK_HEADER" | grep -oP '<[^>]+>; rel="next"' | sed -E 's/<([^>]+)>; rel="next"/\1/')
147+
sleep 1 # 控制请求频率
148+
done
149+
150+
# 去重并排序PR编号
151+
PR_LIST=$(echo "$ALL_MERGED_PR_NUMBERS" | tr ' ' '\n' | sort -nr | uniq) # 按编号降序(最近合并的在前)
152+
echo "去重后合并PR总数: $(echo "$PR_LIST" | wc -w)"
153+
115154
for pr in $PR_LIST; do
116155
echo "=== 处理 PR #$pr ==="
117156

0 commit comments

Comments
 (0)