-
Notifications
You must be signed in to change notification settings - Fork 35
37 lines (34 loc) · 1.52 KB
/
require-assigned-issue.yml
File metadata and controls
37 lines (34 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Here if the issue is not referenced in PR an alert pops up
name: Require referenced assigned issue
on:
pull_request:
types: [opened, edited, reopened, synchronize]
permissions:
issues: read
pull-requests: write
contents: read
jobs:
check-issue:
runs-on: ubuntu-latest
outputs:
result: ${{ steps.check.outputs.result }}
steps:
- name: Check referenced issue and assignee
id: check
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const pr = context.payload.pull_request;
const body = pr.body || '';
const issueRefMatch = body.match(/#(\d+)/);
if (!issueRefMatch) {
core.setOutput('result', 'no-issue');
core.setFailed('PR must reference an issue (e.g., "Closes #12").');
return;
}
const issueNumber = Number(issueRefMatch[1]);
const { data: issue } = await github.rest.issues.get({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issueNumber });
if (!issue) { core.setOutput('result','issue-not-found'); core.setFailed(`Referenced issue #${issueNumber} not found.`); return; }
if (!issue.assignee && (!issue.assignees || issue.assignees.length === 0)) { core.setOutput('result','unassigned'); core.setFailed(`Referenced issue #${issueNumber} is not assigned. Please assign the issue before opening a PR.`); return; }
core.setOutput('result','ok');