From 1f85d5b9cb10423d6e9d45f689ab8e2f626c817d Mon Sep 17 00:00:00 2001 From: Pier-Jean Malandrino Date: Wed, 8 Apr 2026 10:12:57 +0200 Subject: [PATCH] ci: auto-close issues on merge into release/* branches GitHub only auto-closes issues when PRs target the default branch. This workflow scans commit messages for Closes/Fixes patterns on push to release/** and closes the referenced issues via gh CLI. Closes #115 --- .github/workflows/auto-close-issues.yml | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/auto-close-issues.yml diff --git a/.github/workflows/auto-close-issues.yml b/.github/workflows/auto-close-issues.yml new file mode 100644 index 0000000..38c6f7d --- /dev/null +++ b/.github/workflows/auto-close-issues.yml @@ -0,0 +1,43 @@ +name: Auto-close issues on release branch merge + +on: + push: + branches: + - 'release/**' + +permissions: + issues: write + +jobs: + close-issues: + name: Close referenced issues + runs-on: ubuntu-latest + steps: + - name: Scan commits and close issues + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + SHA: ${{ github.sha }} + run: | + # Collect all commit messages from the push event + commits='${{ toJSON(github.event.commits) }}' + + # Extract issue numbers from Closes/Fixes patterns (case-insensitive) + issues=$(echo "$commits" \ + | grep -ioE '(closes|fixes|close|fix|resolved|resolves)\s+#[0-9]+' \ + | grep -oE '[0-9]+' \ + | sort -u) + + if [ -z "$issues" ]; then + echo "No issue references found in commit messages." + exit 0 + fi + + branch="${GITHUB_REF#refs/heads/}" + for issue in $issues; do + echo "Closing issue #$issue (referenced in $branch @ ${SHA:0:7})" + gh issue close "$issue" \ + --repo "$REPO" \ + --comment "Closed automatically — merged into \`$branch\` via ${SHA:0:7}." \ + || echo "Warning: could not close #$issue (may already be closed)" + done