Skip to content

Commit 16b5fbb

Browse files
committed
Tighten Dependabot auto-merge workflow
1 parent cbeee6e commit 16b5fbb

1 file changed

Lines changed: 48 additions & 3 deletions

File tree

.github/workflows/dependabot-auto-merge.yml

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ concurrency:
1818

1919
jobs:
2020
dependabot:
21-
name: approve and auto-merge
21+
name: approve and merge
2222
runs-on: ubuntu-latest
2323
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.event.pull_request.draft == false
2424
steps:
@@ -69,8 +69,53 @@ jobs:
6969
gh pr review --approve "$PR_URL"
7070
fi
7171
72-
- name: Enable auto-merge
72+
- name: Wait for checks
7373
env:
7474
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7575
PR_URL: ${{ github.event.pull_request.html_url }}
76-
run: gh pr merge --auto --squash --delete-branch "$PR_URL"
76+
run: |
77+
set -euo pipefail
78+
79+
deadline=$((SECONDS + 1800))
80+
empty_since=""
81+
82+
while [ "$SECONDS" -lt "$deadline" ]; do
83+
checks_json="$(gh pr checks "$PR_URL" --json name,bucket,workflow 2>/dev/null || true)"
84+
relevant_checks="$(jq '[.[] | select(.workflow != "Dependabot auto-merge" and .name != "approve and merge")]' <<<"${checks_json:-[]}")"
85+
check_count="$(jq 'length' <<<"$relevant_checks")"
86+
failing_count="$(jq '[.[] | select(.bucket == "fail" or .bucket == "cancel")] | length' <<<"$relevant_checks")"
87+
pending_count="$(jq '[.[] | select(.bucket == "pending")] | length' <<<"$relevant_checks")"
88+
89+
if [ "$failing_count" -gt 0 ]; then
90+
echo "$relevant_checks"
91+
echo "::error::At least one check failed or was cancelled."
92+
exit 1
93+
fi
94+
95+
if [ "$check_count" -eq 0 ]; then
96+
if [ -z "$empty_since" ]; then
97+
empty_since="$SECONDS"
98+
fi
99+
100+
if [ $((SECONDS - empty_since)) -ge 90 ]; then
101+
echo "No non-auto-merge checks were reported after 90 seconds."
102+
exit 0
103+
fi
104+
elif [ "$pending_count" -eq 0 ]; then
105+
echo "All reported non-auto-merge checks passed or were skipped."
106+
exit 0
107+
else
108+
empty_since=""
109+
fi
110+
111+
sleep 15
112+
done
113+
114+
echo "::error::Timed out waiting for checks to finish."
115+
exit 1
116+
117+
- name: Merge Dependabot PR
118+
env:
119+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
120+
PR_URL: ${{ github.event.pull_request.html_url }}
121+
run: gh pr merge --squash --delete-branch "$PR_URL"

0 commit comments

Comments
 (0)