From 6b2bb87f4f05631f253dce9adc84ac359558951a Mon Sep 17 00:00:00 2001 From: OGR-67 Date: Tue, 17 Mar 2026 22:10:19 +0100 Subject: [PATCH] Add GitHub workflows for PR validation and issue closure --- .github/pull_request_template.md | 5 ++++ .github/workflows/close-issues-on-dev.yml | 30 ++++++++++++++++++++++ .github/workflows/restrict-main-source.yml | 18 +++++++++++++ .github/workflows/validate-pr.yml | 19 ++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/close-issues-on-dev.yml create mode 100644 .github/workflows/restrict-main-source.yml create mode 100644 .github/workflows/validate-pr.yml diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..88de386 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,5 @@ +## Description + +## Closes + +closes # diff --git a/.github/workflows/close-issues-on-dev.yml b/.github/workflows/close-issues-on-dev.yml new file mode 100644 index 0000000..ea85e51 --- /dev/null +++ b/.github/workflows/close-issues-on-dev.yml @@ -0,0 +1,30 @@ +name: Close issues on dev merge + +on: + pull_request: + types: [closed] + branches: [dev] + +jobs: + close-issues: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + const body = context.payload.pull_request.body || ''; + const matches = [...body.matchAll(/(?:closes|fixes|resolves)\s+#(\d+)/gi)]; + + if (matches.length === 0) return; + + for (const match of matches) { + const issueNumber = parseInt(match[1]); + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + state: 'closed' + }); + console.log(`Closed issue #${issueNumber}`); + } diff --git a/.github/workflows/restrict-main-source.yml b/.github/workflows/restrict-main-source.yml new file mode 100644 index 0000000..c591352 --- /dev/null +++ b/.github/workflows/restrict-main-source.yml @@ -0,0 +1,18 @@ +name: Restrict merges to main + +on: + pull_request: + types: [opened, synchronize, reopened] + branches: [main] + +jobs: + check-source-branch: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + const source = context.payload.pull_request.head.ref; + if (source !== 'dev') { + core.setFailed(`❌ Les merges vers main sont uniquement autorisés depuis dev (branche source : ${source}).`); + } diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml new file mode 100644 index 0000000..e902ada --- /dev/null +++ b/.github/workflows/validate-pr.yml @@ -0,0 +1,19 @@ +name: Validate PR + +on: + pull_request: + types: [opened, edited, synchronize] + branches: [dev, main] + +jobs: + check-closes: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + const body = context.payload.pull_request.body || ''; + const hasCloses = /(?:closes|fixes|resolves)\s+#\d+/i.test(body); + if (!hasCloses) { + core.setFailed('❌ Le body du PR doit contenir une référence "closes #XX".'); + }