Skip to content

Commit 028224f

Browse files
Workflows Added
1 parent 8217794 commit 028224f

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: Require referenced assigned issue
2+
3+
on:
4+
pull_request:
5+
types: [opened, edited, reopened, synchronize]
6+
7+
permissions:
8+
issues: read
9+
pull-requests: write
10+
contents: read
11+
12+
jobs:
13+
check-issue:
14+
runs-on: ubuntu-latest
15+
outputs:
16+
result: ${{ steps.check.outputs.result }}
17+
steps:
18+
- name: Check referenced issue and assignee
19+
id: check
20+
uses: actions/github-script@v7
21+
with:
22+
github-token: ${{ secrets.GITHUB_TOKEN }}
23+
script: |
24+
const pr = context.payload.pull_request;
25+
const body = pr.body || '';
26+
const issueRefMatch = body.match(/#(\d+)/);
27+
if (!issueRefMatch) {
28+
core.setOutput('result', 'no-issue');
29+
core.setFailed('PR must reference an issue (e.g., "Closes #12").');
30+
return;
31+
}
32+
const issueNumber = Number(issueRefMatch[1]);
33+
const { data: issue } = await github.rest.issues.get({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issueNumber });
34+
if (!issue) { core.setOutput('result','issue-not-found'); core.setFailed(`Referenced issue #${issueNumber} not found.`); return; }
35+
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; }
36+
core.setOutput('result','ok');

0 commit comments

Comments
 (0)