diff --git a/.github/workflows/pr-auto-approve.yml b/.github/workflows/pr-auto-approve.yml index aac2146..88f6089 100644 --- a/.github/workflows/pr-auto-approve.yml +++ b/.github/workflows/pr-auto-approve.yml @@ -44,9 +44,32 @@ jobs: GH_TOKEN: ${{secrets.EPLUS_BOT_TOKEN}} - name: Wait for pull request checks - run: gh pr checks "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --watch --interval 10 + run: | + for attempt in {1..60}; do + CHECKS="$(gh pr checks "$PR_NUMBER" \ + --repo "$GITHUB_REPOSITORY" \ + --json bucket,name,workflow)" + + FAILING_COUNT="$(jq '[.[] | select(.workflow != env.APPROVAL_WORKFLOW and (.bucket == "fail" or .bucket == "cancel"))] | length' <<<"$CHECKS")" + if [ "$FAILING_COUNT" -gt 0 ]; then + jq -r '.[] | select(.workflow != env.APPROVAL_WORKFLOW and (.bucket == "fail" or .bucket == "cancel")) | "::error::\(.workflow): \(.name) failed"' <<<"$CHECKS" + exit 1 + fi + + PENDING_COUNT="$(jq '[.[] | select(.workflow != env.APPROVAL_WORKFLOW and .bucket == "pending")] | length' <<<"$CHECKS")" + if [ "$PENDING_COUNT" -eq 0 ]; then + exit 0 + fi + + echo "Waiting for $PENDING_COUNT pull request check(s) before approving (attempt $attempt/60)." + sleep 10 + done + + echo "::error::Timed out waiting for pull request checks to finish." + exit 1 env: PR_NUMBER: ${{steps.pr.outputs.number}} + APPROVAL_WORKFLOW: ${{github.workflow}} GH_TOKEN: ${{secrets.EPLUS_BOT_TOKEN}} - name: Approve pull request @@ -89,22 +112,19 @@ jobs: fi fi - APPROVAL_COMMENT="$(cat <