From 5063428acbdec0752510e631397baadafb528a0a Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Fri, 3 Jul 2026 18:06:22 +0700 Subject: [PATCH 1/2] fix: prevent auto-approve workflow self-blocking --- .github/workflows/pr-auto-approve.yml | 54 ++++++++++++++++++--------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/.github/workflows/pr-auto-approve.yml b/.github/workflows/pr-auto-approve.yml index afb866b..21bfdf0 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 @@ -85,22 +108,19 @@ jobs: fi fi - APPROVAL_COMMENT="$(cat < Date: Fri, 3 Jul 2026 18:17:58 +0700 Subject: [PATCH 2/2] fix: prevent auto-approve workflow self-blocking --- .github/workflows/pr-auto-approve.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-auto-approve.yml b/.github/workflows/pr-auto-approve.yml index 21bfdf0..88f6089 100644 --- a/.github/workflows/pr-auto-approve.yml +++ b/.github/workflows/pr-auto-approve.yml @@ -80,11 +80,15 @@ jobs: | tail -n 1)" if [ -z "$APPROVED_FOR_HEAD" ]; then - gh pr review --approve "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" + gh pr review --approve "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --body "$APPROVAL_REVIEW_BODY" fi env: PR_NUMBER: ${{steps.pr.outputs.number}} HEAD_SHA: ${{ github.event.workflow_run.head_sha }} + APPROVAL_REVIEW_BODY: | + Approved by @eplus-bot after all pull request checks passed. + + CI run: ${{ github.event.workflow_run.html_url }} GH_TOKEN: ${{secrets.EPLUS_BOT_TOKEN}} - name: Upsert CI approval comment