auto-merge-release-please.yml•1.57 kB
name: auto-merge release-please PRs
on:
pull_request:
types: [labeled, edited, synchronize, reopened, ready_for_review]
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
auto-merge:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- name: Auto-merge when release-please label present
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
PR_NUMBER='${{ github.event.pull_request.number }}'
REPO='${{ github.repository }}'
if [ -z "$PR_NUMBER" ]; then
echo "Not a pull_request event; skipping"
exit 0
fi
echo "Checking labels on PR #$PR_NUMBER"
if ! gh pr view "$PR_NUMBER" --repo "$REPO" --json labels -q '.labels[].name' | grep -Fx "autorelease: pending" >/dev/null; then
echo "Label 'autorelease: pending' not present; skipping"
exit 0
fi
echo "Ensuring checks have reported"
gh pr checks "$PR_NUMBER" --repo "$REPO" || true
echo "Attempting auto-merge (squash)"
state=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json mergeStateStatus -q .mergeStateStatus || echo "UNKNOWN")
echo "mergeStateStatus=$state"
if [ "$state" = "CLEAN" ] || [ "$state" = "HAS_HOOKS" ] || [ "$state" = "UNSTABLE" ]; then
gh pr merge "$PR_NUMBER" --repo "$REPO" --squash --delete-branch || true
else
echo "PR not mergeable yet ($state)"
fi