Skip to content

Commit 8ed383e

Browse files
committed
Add GH workflow to automatically merge dependabot PRs
1 parent 2c7d2e8 commit 8ed383e

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: dependabot-automerge
2+
3+
on:
4+
workflow_run:
5+
workflows: ["build"]
6+
types: [completed]
7+
8+
permissions:
9+
contents: write
10+
pull-requests: write
11+
12+
jobs:
13+
automerge:
14+
if: github.event.workflow_run.conclusion == 'success'
15+
runs-on: ubuntu-latest
16+
17+
steps:
18+
- name: Merge Dependabot PR if eligible
19+
uses: actions/github-script@v7
20+
with:
21+
script: |
22+
const prs = context.payload.workflow_run.pull_requests;
23+
if (!prs || prs.length === 0) {
24+
core.info('No pull requests associated with this workflow_run.');
25+
return;
26+
}
27+
28+
const prNumber = prs[0].number;
29+
const { owner, repo } = context.repo;
30+
const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: prNumber });
31+
32+
const author = pr.user?.login || '';
33+
if (author !== 'dependabot[bot]' && author !== 'dependabot') {
34+
core.info(`PR #${prNumber} is not from Dependabot (${author}).`);
35+
return;
36+
}
37+
38+
if (pr.mergeable_state !== 'clean') {
39+
core.info(`PR #${prNumber} is not mergeable yet (state: ${pr.mergeable_state}).`);
40+
return;
41+
}
42+
43+
await github.rest.pulls.merge({
44+
owner,
45+
repo,
46+
pull_number: prNumber,
47+
merge_method: 'merge'
48+
});
49+
50+
core.info(`Merged Dependabot PR #${prNumber}.`);

0 commit comments

Comments
 (0)