From 56f88e3babadeb16b290bac5d87bb4cc50ec0d16 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Tue, 7 Jan 2025 02:34:05 -0500 Subject: [PATCH] New GitHub workflow to prohibit autosquash commits This prohibits commits whose commit message starts with "squash!", "fixup!", or "amend!" unless the PR has the 'pr-permit-autosquash' label. Such commits are created via the `--fixup` or `--squash` options to `git commit`, and cause `git rebase --autosquash` to automatically adjust the todo list appropriately before performing the rebase. Their existence implies that the PR should be rebased with `--autosquash` before merging. --- .github/workflows/pr.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b36bfa6..b4a7729 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -29,3 +29,21 @@ jobs: git show "${out}" >&2 exit 1 } + no-autosquash: + if: ${{ !contains(github.event.pull_request.labels.*.name, 'pr-permit-autosquash') }} + name: No --autosquash commits + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: 'No commits with messages starting with "fixup!", "squash!", or "amend!"' + run: | + log() { printf %s\\n "$*" >&2; } + error() { log "ERROR: $@"; } + fatal() { error "$@"; exit 1; } + try() { log "Running command $@"; "$@" || fatal "'$@' failed"; } + out=$(try git log --oneline '${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}') || exit 1 + ! grep -E '^[^ ]* (fixup|squash|amend)!' <