From de0e7456e9ba5f6fec4f02d666ee35f839c98f96 Mon Sep 17 00:00:00 2001 From: Adam Moussa <166072409+amoussa1229@users.noreply.github.com> Date: Fri, 21 Aug 2026 23:32:53 +0000 Subject: [PATCH] ci: enable squash auto-merge on ready PRs (PLAT-108) (#115) * ci: enable squash auto-merge on ready PRs * fix(ci): grant contents read so auto-merge can query the PR * fix(ci): restore contents write for enablePullRequestAutoMerge * fix(ci): serialize auto-merge enable and ignore already-enabled * fix(ci): request squash auto-merge so PRs enter the merge queue --- .github/workflows/auto-merge.yaml | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/auto-merge.yaml diff --git a/.github/workflows/auto-merge.yaml b/.github/workflows/auto-merge.yaml new file mode 100644 index 0000000..570ef8e --- /dev/null +++ b/.github/workflows/auto-merge.yaml @@ -0,0 +1,46 @@ +name: Enable auto-merge + +on: + pull_request: + types: [opened, ready_for_review, reopened, synchronize] + branches: [main] + +concurrency: + group: enable-auto-merge-${{ github.event.pull_request.number }} + cancel-in-progress: true + +permissions: + contents: write + pull-requests: write + +jobs: + enable: + if: >- + github.event.pull_request.draft == false + && github.event.pull_request.head.repo.full_name == github.repository + && github.event.pull_request.user.login != 'dependabot[bot]' + && github.event.pull_request.user.login != 'renovate[bot]' + runs-on: ubuntu-latest + steps: + - name: Enable squash auto-merge + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR: ${{ github.event.pull_request.number }} + REPO: ${{ github.repository }} + run: | + set -euo pipefail + method="$(gh pr view "$PR" --repo "$REPO" --json autoMergeRequest --jq '.autoMergeRequest.mergeMethod // empty')" + # Merge queue requires squash. `gh pr merge --auto` with no method + # records MERGE and never enqueues. + if [ "$method" = "MERGE" ] || [ "$method" = "REBASE" ]; then + gh pr merge "$PR" --repo "$REPO" --disable-auto + fi + if ! out=$(gh pr merge "$PR" --repo "$REPO" --squash --auto 2>&1); then + echo "$out" + if [ "$(gh pr view "$PR" --repo "$REPO" --json autoMergeRequest --jq '.autoMergeRequest.mergeMethod // empty')" = "SQUASH" ]; then + echo "squash auto-merge already enabled" + exit 0 + fi + exit 1 + fi + printf '%s\n' "$out"