Skip to content

Commit d6e84d0

Browse files
authored
chore(actions): add eval
Signed-off-by: Lala Sabathil <lala@pycord.dev>
1 parent 86a34d2 commit d6e84d0

File tree

1 file changed

+58
-19
lines changed

1 file changed

+58
-19
lines changed

.github/workflows/enforce-pr-template.yml

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ name: Enforce PR Template
33
on:
44
pull_request_target:
55
types: [opened, edited, synchronize, reopened]
6-
workflow_dispatch:
6+
workflow_dispatch:
7+
inputs:
8+
pr_number:
9+
description: 'Pull request number to validate'
10+
required: true
11+
type: number
712

813
permissions:
914
pull-requests: write
@@ -15,17 +20,43 @@ jobs:
1520
runs-on: ubuntu-latest
1621

1722
steps:
23+
- name: Determine PR number
24+
id: pr
25+
run: |
26+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
27+
echo "number=${{ inputs.pr_number }}" >> "$GITHUB_OUTPUT"
28+
else
29+
echo "number=${{ github.event.pull_request.number }}" >> "$GITHUB_OUTPUT"
30+
fi
31+
32+
- name: Load PR details
33+
id: load_pr
34+
uses: actions/github-script@v8
35+
with:
36+
github-token: ${{ secrets.GITHUB_TOKEN }}
37+
script: |
38+
const prNumber = Number('${{ steps.pr.outputs.number }}');
39+
const { data: pr } = await github.rest.pulls.get({
40+
owner: context.repo.owner,
41+
repo: context.repo.repo,
42+
pull_number: prNumber,
43+
});
44+
45+
core.setOutput('author', pr.user.login);
46+
core.setOutput('body', pr.body || '');
47+
core.setOutput('state', pr.state);
48+
core.setOutput('number', pr.number.toString());
49+
1850
- name: Check if author is org member
1951
id: org_check
20-
uses: actions/github-script@v8
52+
uses: actions/github-script@v7
2153
with:
2254
github-token: ${{ secrets.GITHUB_TOKEN }}
2355
script: |
2456
const org = 'Pycord-Development';
25-
const username = context.payload.pull_request.user.login;
57+
const username = '${{ steps.load_pr.outputs.author }}';
2658
2759
try {
28-
// Succeeds if user is a member; throws 404 if not
2960
await github.rest.orgs.checkMembershipForUser({
3061
org,
3162
username,
@@ -50,12 +81,11 @@ jobs:
5081
with:
5182
github-token: ${{ secrets.GITHUB_TOKEN }}
5283
script: |
53-
const pr = context.payload.pull_request;
54-
const body = (pr.body || '').trim();
84+
const body = (`${{ steps.load_pr.outputs.body }}` || '').trim();
5585
5686
const problems = [];
5787
58-
// Basic length check – tune as you like
88+
// Basic length check – adjust as desired
5989
if (body.length < 150) {
6090
problems.push('PR description is too short (expected more content based on the template).');
6191
}
@@ -91,18 +121,25 @@ jobs:
91121
with:
92122
github-token: ${{ secrets.GITHUB_TOKEN }}
93123
script: |
94-
const pr = context.payload.pull_request;
95-
const problems = core.getInput('problems');
124+
const prNumber = Number('${{ steps.load_pr.outputs.number }}');
125+
const problems = `${{ steps.validate.outputs.problems }}`;
126+
const prState = '${{ steps.load_pr.outputs.state }}';
96127
97128
const INVALID_LABEL = 'invalid';
98129
99130
// 1) Add 'invalid' label if not present
131+
const { data: pr } = await github.rest.pulls.get({
132+
owner: context.repo.owner,
133+
repo: context.repo.repo,
134+
pull_number: prNumber,
135+
});
136+
100137
const existingLabels = (pr.labels || []).map(l => l.name);
101138
if (!existingLabels.includes(INVALID_LABEL)) {
102139
await github.rest.issues.addLabels({
103140
owner: context.repo.owner,
104141
repo: context.repo.repo,
105-
issue_number: pr.number,
142+
issue_number: prNumber,
106143
labels: [INVALID_LABEL],
107144
});
108145
}
@@ -111,7 +148,7 @@ jobs:
111148
await github.rest.issues.createComment({
112149
owner: context.repo.owner,
113150
repo: context.repo.repo,
114-
issue_number: pr.number,
151+
issue_number: prNumber,
115152
body: [
116153
'This pull request does not follow the required pull request template.',
117154
'',
@@ -125,15 +162,17 @@ jobs:
125162
].join('\n'),
126163
});
127164
128-
// 3) Close PR
129-
await github.rest.pulls.update({
130-
owner: context.repo.owner,
131-
repo: context.repo.repo,
132-
pull_number: pr.number,
133-
state: 'closed',
134-
});
165+
// 3) Close PR if it is still open
166+
if (prState === 'open') {
167+
await github.rest.pulls.update({
168+
owner: context.repo.owner,
169+
repo: context.repo.repo,
170+
pull_number: prNumber,
171+
state: 'closed',
172+
});
173+
}
135174
136-
core.setFailed('PR does not follow the required template and has been closed.');
175+
core.setFailed('PR does not follow the required template.');
137176
138177
- name: Validation passed
139178
if: steps.org_check.outputs.is_member == 'false' && steps.validate.outputs.valid == 'true'

0 commit comments

Comments
 (0)