Skip to content

Commit b087df1

Browse files
MattIPv4Copilot
andauthored
Support merge queues for auto-merge (#109)
* Support merge queues for auto-merge * Copilot: Include selection set in mutation Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent ce280bb commit b087df1

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

.github/workflows/auto-merge.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ jobs:
2222

2323
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2424
- uses: ./actions/auto-merge-prs
25+
with:
26+
merge-method: queue

actions/auto-merge-prs/action.yml

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ name: Auto-merge PRs
22
description: Automatically merge pull requests that meet specified criteria
33

44
inputs:
5+
merge-method:
6+
description: 'Merge method to use (merge, squash, rebase, or queue).'
7+
required: true
58
label-name:
69
description: 'The label name that PRs must have to be eligible for auto-merge'
710
required: false
@@ -10,10 +13,6 @@ inputs:
1013
description: 'Number of hours a PR must be open before it can be auto-merged'
1114
required: false
1215
default: '48'
13-
merge-method:
14-
description: 'Merge method to use (merge, squash, or rebase)'
15-
required: false
16-
default: 'squash'
1716
github-token:
1817
description: 'GitHub token for authentication'
1918
required: false
@@ -25,16 +24,16 @@ runs:
2524
- name: Check and merge eligible PRs
2625
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
2726
env:
27+
INPUT_MERGE_METHOD: ${{ inputs.merge-method }}
2828
INPUT_LABEL_NAME: ${{ inputs.label-name }}
2929
INPUT_HOURS_OPEN: ${{ inputs.hours-open }}
30-
INPUT_MERGE_METHOD: ${{ inputs.merge-method }}
3130
with:
3231
github-token: ${{ inputs.github-token }}
3332
script: |
3433
const { owner, repo } = context.repo;
34+
const mergeMethod = process.env.INPUT_MERGE_METHOD;
3535
const labelName = process.env.INPUT_LABEL_NAME;
3636
const hoursOpen = parseFloat(process.env.INPUT_HOURS_OPEN);
37-
const mergeMethod = process.env.INPUT_MERGE_METHOD;
3837
3938
// Get all open PRs (with pagination)
4039
const pullRequests = await github.paginate(github.rest.pulls.list, {
@@ -106,15 +105,27 @@ runs:
106105
107106
// All conditions met - merge the PR
108107
try {
109-
await github.rest.pulls.merge({
110-
owner,
111-
repo,
112-
pull_number: pr.number,
113-
merge_method: mergeMethod
114-
});
115-
core.notice(`🚀 Successfully merged PR #${pr.number} (${pr.html_url}): ${pr.title}`);
108+
if (mergeMethod === 'queue') {
109+
await github.graphql(`
110+
mutation($id: ID!) {
111+
enqueuePullRequest(input: { pullRequestId: $id }) {
112+
mergeQueueEntry {
113+
id
114+
}
115+
}
116+
}
117+
`, { id: pr.node_id });
118+
} else {
119+
await github.rest.pulls.merge({
120+
owner,
121+
repo,
122+
pull_number: pr.number,
123+
merge_method: mergeMethod,
124+
});
125+
}
126+
core.notice(`🚀 Successfully ${mergeMethod === 'queue' ? 'queued' : 'merged'} PR #${pr.number} (${pr.html_url}): ${pr.title}`);
116127
} catch (error) {
117-
core.error(`❌ Failed to merge PR #${pr.number} (${pr.html_url}): ${error.message}`);
128+
core.error(`❌ Failed to ${mergeMethod === 'queue' ? 'queue' : 'merge'} PR #${pr.number} (${pr.html_url}): ${error.message}`);
118129
}
119130
} finally {
120131
core.endGroup();

0 commit comments

Comments
 (0)