Skip to content

Commit 7529c90

Browse files
authored
Merge pull request #1150 from dnum-mi/tech/allow-merge-only-if-linked-to-issue
ci: 🔗 ajoute vérification PR liée à une issue
2 parents 7b000bf + 99646ec commit 7529c90

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Check PR linked to issue
2+
3+
on:
4+
pull_request:
5+
types: [opened, edited, synchronize]
6+
7+
jobs:
8+
check-linked-issue:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Check if PR is linked to an issue
12+
uses: actions/github-script@v7
13+
with:
14+
script: |
15+
const { data: pullRequest } = await github.rest.pulls.get({
16+
owner: context.repo.owner,
17+
repo: context.repo.repo,
18+
pull_number: context.issue.number,
19+
});
20+
21+
// Vérifier dans le corps de la PR (mots-clés comme "closes #123", "fixes #456")
22+
const prBody = pullRequest.body || '';
23+
const prTitle = pullRequest.title || '';
24+
25+
// Pattern pour détecter les références aux issues
26+
const issueKeywords = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?|ref(?:erences?)?|see|relate[sd]?(?:\s+to)?)\s*(?:#(\d+)|https?:\/\/github\.com\/[^\/]+\/[^\/]+\/issues\/(\d+))/gi;
27+
28+
const bodyMatches = prBody.match(issueKeywords);
29+
const titleMatches = prTitle.match(issueKeywords);
30+
31+
// Vérifier aussi les numéros d'issues simples dans le titre (ex: "feat: #123 - nouvelle fonctionnalité")
32+
const simpleIssueRef = /(?:^|\s)#(\d+)(?:\s|$|-)/g;
33+
const titleIssueRefs = prTitle.match(simpleIssueRef);
34+
35+
const hasLinkedIssues = bodyMatches || titleMatches || titleIssueRefs;
36+
37+
if (!hasLinkedIssues) {
38+
core.setFailed('❌ Cette PR doit être liée à une issue. Utilisez des mots-clés comme "closes #123" ou "fixes #456" dans la description, ou référencez une issue dans le titre avec "#123".');
39+
} else {
40+
console.log('✅ PR correctement liée à une ou plusieurs issues');
41+
if (bodyMatches) console.log('Issues trouvées dans le body:', bodyMatches);
42+
if (titleMatches) console.log('Issues trouvées dans le titre:', titleMatches);
43+
if (titleIssueRefs) console.log('Références d\'issues dans le titre:', titleIssueRefs);
44+
}

0 commit comments

Comments
 (0)