@@ -2,6 +2,9 @@ name: Auto-merge PRs
22description : Automatically merge pull requests that meet specified criteria
33
44inputs :
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