From 1b52b76bdb1128ad769198007b7874c130d845f9 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 17 Jul 2026 12:14:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20auto-approve=20review=E9=9C=80?= =?UTF-8?q?=E4=B8=A4=E6=AD=A5=E6=8F=90=E4=BA=A4=20-=20Gitea=20API=E8=A6=81?= =?UTF-8?q?=E5=85=88=E5=88=9B=E5=BB=BAPENDING=E5=86=8Dsubmit=E4=B8=BAAPPRO?= =?UTF-8?q?VED?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/auto-approve.yml | 50 +++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/.gitea/workflows/auto-approve.yml b/.gitea/workflows/auto-approve.yml index a00eb98c9..96d14a076 100644 --- a/.gitea/workflows/auto-approve.yml +++ b/.gitea/workflows/auto-approve.yml @@ -82,33 +82,59 @@ jobs: echo echo "✅ 所有CI检查通过,自动审批 PR #${PR_NUMBER}" - # 检查是否已有审批 + # 检查是否已有审批(任何用户的APPROVED都算,避免重复审批) EXISTING=$(curl -s -H "Authorization: token ${REVIEW_TOKEN}" \ "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/reviews" \ - | python3 -c "import sys,json; reviews=json.load(sys.stdin); print('yes' if any(r.get('state')=='APPROVED' and r.get('user',{}).get('login')=='xiaoxia' for r in reviews) else 'no')") + | python3 -c "import sys,json; reviews=json.load(sys.stdin); print('yes' if any(r.get('state')=='APPROVED' for r in reviews) else 'no')") if [ "$EXISTING" = "yes" ]; then echo "ℹ️ PR #${PR_NUMBER} 已有审批,跳过" exit 0 fi - # 提交审批 - HTTP_CODE=$(curl -s -o /tmp/approve_resp.json -w "%{http_code}" \ + # 第一步:创建PENDING review(Gitea API需要先创建再提交) + echo "创建review..." + REVIEW_CREATE=$(curl -s -X POST \ + -H "Authorization: token ${REVIEW_TOKEN}" \ + -H "Content-Type: application/json" \ + -d '{"event": "PENDING", "body": "CI全绿,自动审批通过。"}' \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/reviews") + + REVIEW_ID=$(echo "$REVIEW_CREATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('id',''))") + REVIEW_STATE=$(echo "$REVIEW_CREATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('state',''))") + echo "创建结果: id=$REVIEW_ID state=$REVIEW_STATE" + + if [ -z "$REVIEW_ID" ]; then + echo "❌ 创建review失败" + echo "$REVIEW_CREATE" + exit 1 + fi + + # 如果已经是APPROVED就不用再submit了(兼容不同Gitea版本) + if [ "$REVIEW_STATE" = "APPROVED" ]; then + echo "✅ 自动审批成功(直接创建为APPROVED)" + exit 0 + fi + + # 第二步:submit review为APPROVED + echo "提交review审批..." + SUBMIT_CODE=$(curl -s -o /tmp/submit_resp.json -w "%{http_code}" \ -X POST \ -H "Authorization: token ${REVIEW_TOKEN}" \ -H "Content-Type: application/json" \ - -d '{"event": "APPROVE", "body": "CI全绿,自动审批通过。"}' \ - "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/reviews") - - echo "审批API HTTP状态: $HTTP_CODE" - cat /tmp/approve_resp.json 2>/dev/null || true + -d '{"event": "APPROVED", "body": "CI全绿,自动审批通过。"}' \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/reviews/${REVIEW_ID}") + + echo "提交API HTTP状态: $SUBMIT_CODE" + cat /tmp/submit_resp.json 2>/dev/null || true echo - if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ]; then - echo "✅ 自动审批成功" + if [ "$SUBMIT_CODE" = "200" ] || [ "$SUBMIT_CODE" = "201" ]; then + FINAL_STATE=$(python3 -c "import json; print(json.load(open('/tmp/submit_resp.json')).get('state',''))" 2>/dev/null || echo "?") + echo "✅ 自动审批成功 (state: $FINAL_STATE)" exit 0 else - echo "❌ 自动审批失败" + echo "❌ 提交审批失败" exit 1 fi fi -- 2.54.0