diff --git a/.gitea/workflows/auto-pr.yml b/.gitea/workflows/auto-pr.yml index 99ac8f7..38afd5d 100644 --- a/.gitea/workflows/auto-pr.yml +++ b/.gitea/workflows/auto-pr.yml @@ -36,11 +36,24 @@ jobs: PR_NUMBER=$(cat /tmp/pr_resp.json | sed -n 's/.*"number":\([0-9]*\).*/\1/p' | head -n1) else echo "PR not created (possibly exists). Response:"; cat /tmp/pr_resp.json || true - # Find existing open PR for this branch + fi + + # Retry to resolve PR number by listing open PRs and matching head/base + i=0 + while [ -z "${PR_NUMBER:-}" ] && [ $i -lt 10 ]; do + i=$((i+1)) + echo "[retry $i] Resolving PR number for $HEAD_BRANCH -> $BASE_BRANCH" curl -sS -o /tmp/pr_list.json -H "Authorization: token ${CI_TOKEN}" \ "${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${NAME}/pulls?state=open" || true - PR_NUMBER=$(cat /tmp/pr_list.json | awk -v b="$HEAD_BRANCH" 'BEGIN{RS="},"} {if($0~"\"head\":\{[^}]*\"ref\":\""b"\""){match($0,/\"number\":([0-9]+)/,m); if(m[1]!=""){print m[1]; exit}}}') - fi + # Extract PR number matching head.ref==HEAD_BRANCH and base.ref==BASE_BRANCH + PR_NUMBER=$(awk -v hb="$HEAD_BRANCH" -v bb="$BASE_BRANCH" 'BEGIN{RS="},"; pr=""} { + if($0 ~ /\"head\":\{[^}]*\"ref\":\"" hb "\"/ && $0 ~ /\"base\":\{[^}]*\"ref\":\"" bb "\"/){ + if (match($0, /\"number\":([0-9]+)/, m)) { print m[1]; exit } + } + }' /tmp/pr_list.json) + if [ -z "${PR_NUMBER:-}" ]; then sleep 2; fi + done + if [ -n "${PR_NUMBER:-}" ]; then echo "Adding 'automerge' label to PR #$PR_NUMBER" curl -sS -X POST \ @@ -49,5 +62,5 @@ jobs: "${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${NAME}/issues/${PR_NUMBER}/labels" \ -d '["automerge"]' || true else - echo "PR number could not be determined; skipping label add" + echo "PR number could not be determined after retries; skipping label add" fi