Skip to content

Commit 1cb8b35

Browse files
raman325claude
andcommitted
Add auto-merge label support
PRs with the "auto-merge" label will automatically merge once all CI checks pass. This allows manually triggering auto-merge for any PR by adding the label. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 080d650 commit 1cb8b35

File tree

1 file changed

+40
-30
lines changed

1 file changed

+40
-30
lines changed

.github/workflows/auto-merge.yaml

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,67 @@ name: auto-merge
33

44
"on":
55
pull_request:
6+
types: [opened, synchronize, reopened, labeled, unlabeled]
67

78
permissions:
89
contents: write
910
pull-requests: write
1011

12+
# Cancel in-progress runs for the same PR (only latest should merge)
13+
concurrency:
14+
group: auto-merge-${{ github.event.pull_request.number }}
15+
cancel-in-progress: true
16+
1117
jobs:
12-
dependabot:
18+
auto-merge:
1319
runs-on: ubuntu-latest
14-
# Only run on Dependabot PRs
15-
if: github.event.pull_request.user.login == 'dependabot[bot]'
20+
# Run for dependabot, pre-commit-ci, or PRs with auto-merge label
21+
if: >-
22+
github.event.pull_request.user.login == 'dependabot[bot]' ||
23+
github.event.pull_request.user.login == 'pre-commit-ci[bot]' ||
24+
contains(github.event.pull_request.labels.*.name, 'auto-merge')
1625
steps:
26+
# Fetch Dependabot metadata (only runs for dependabot PRs)
1727
- name: Fetch Dependabot metadata
1828
id: metadata
29+
if: github.event.pull_request.user.login == 'dependabot[bot]'
1930
uses: dependabot/fetch-metadata@v2
2031
with:
2132
github-token: "${{ secrets.GITHUB_TOKEN }}"
2233

23-
# Wait for all CI checks to pass before merging
24-
- name: Wait for CI checks to pass
25-
if: >-
26-
steps.metadata.outputs.update-type == 'version-update:semver-patch' ||
27-
steps.metadata.outputs.update-type == 'version-update:semver-minor'
28-
run: gh pr checks "$PR_URL" --watch --fail-fast
34+
# Determine if PR is eligible for auto-merge
35+
- name: Check eligibility
36+
id: eligible
37+
run: |
38+
if [[ "$ACTOR" == "dependabot[bot]" ]]; then
39+
# Dependabot: only auto-merge patch and minor updates
40+
if [[ "$UPDATE_TYPE" == "version-update:semver-patch" ]] ||
41+
[[ "$UPDATE_TYPE" == "version-update:semver-minor" ]]; then
42+
echo "result=true" >> "$GITHUB_OUTPUT"
43+
else
44+
echo "result=false" >> "$GITHUB_OUTPUT"
45+
echo "Skipping: Dependabot major update requires manual review"
46+
fi
47+
else
48+
# pre-commit-ci and auto-merge labeled PRs are always eligible
49+
echo "result=true" >> "$GITHUB_OUTPUT"
50+
fi
2951
env:
30-
PR_URL: ${{ github.event.pull_request.html_url }}
31-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52+
ACTOR: ${{ github.event.pull_request.user.login }}
53+
UPDATE_TYPE: ${{ steps.metadata.outputs.update-type }}
3254

33-
# Merge after CI passes
34-
- name: Merge Dependabot PR
35-
if: >-
36-
steps.metadata.outputs.update-type == 'version-update:semver-patch' ||
37-
steps.metadata.outputs.update-type == 'version-update:semver-minor'
38-
run: gh pr merge --squash "$PR_URL"
39-
env:
40-
PR_URL: ${{ github.event.pull_request.html_url }}
41-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42-
43-
pre-commit-ci:
44-
runs-on: ubuntu-latest
45-
# Only run on pre-commit-ci PRs
46-
if: github.event.pull_request.user.login == 'pre-commit-ci[bot]'
47-
steps:
48-
# Wait for all CI checks to pass before merging
49-
- name: Wait for CI checks to pass
50-
run: gh pr checks "$PR_URL" --watch --fail-fast
55+
# Wait for required CI checks (--required avoids deadlock with this workflow)
56+
- name: Wait for CI checks
57+
if: steps.eligible.outputs.result == 'true'
58+
timeout-minutes: 30
59+
run: gh pr checks "$PR_URL" --watch --fail-fast --required
5160
env:
5261
PR_URL: ${{ github.event.pull_request.html_url }}
5362
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5463

5564
# Merge after CI passes
56-
- name: Merge pre-commit-ci PR
65+
- name: Merge PR
66+
if: steps.eligible.outputs.result == 'true'
5767
run: gh pr merge --squash "$PR_URL"
5868
env:
5969
PR_URL: ${{ github.event.pull_request.html_url }}

0 commit comments

Comments
 (0)