1- # Verifies if the current issue has at least one real `[scope]` label and one
2- # real `[priority]` label. If either is missing, the workflow adds a reminder
3- # label with a warning emoji.
1+ # Verifies if the current issue has at least one `[scope]` label and one
2+ # `[priority]` label. If either is missing, the workflow adds a reminder label.
43
54name : Issue labels check
65
@@ -20,130 +19,22 @@ jobs:
2019 cancel-in-progress : true
2120
2221 steps :
23- - name : Checkout repository
24- uses : actions/checkout@v6
25-
26- - name : Sync missing-label reminders
27- uses : ./.github/actions/github-script
22+ - name : Ensure [scope] label
23+ uses : Rindrics/expect-label-prefix@v1.2.1
2824 with :
29- script : |
30- const fs = require('fs');
31-
32- const issueNumber = context.issue.number;
33- const action = context.payload.action;
34- const changedLabel = context.payload.label?.name ?? null;
35- const labels = context.payload.issue.labels.map(({ name }) => name);
36- const requirements = [
37- {
38- prefix: '[scope] ',
39- reminder: '[scope] ⚠️ label needed',
40- },
41- {
42- prefix: '[priority] ',
43- reminder: '[priority] ⚠️ label needed',
44- },
45- ];
46-
47- const labelsToAdd = [];
48- const labelsToRemove = [];
49- const evaluations = [];
50-
51- console.log(`::group::Issue label check for #${issueNumber}`);
52- console.log(`Event action: ${action}`);
53- if (changedLabel) {
54- console.log(`Event label: ${changedLabel}`);
55- }
56- console.log(
57- `Current labels: ${labels.length > 0 ? labels.join(', ') : '(none)'}`,
58- );
59-
60- for (const { prefix, reminder } of requirements) {
61- const matchingRealLabels = labels.filter(
62- (name) => name.startsWith(prefix) && name !== reminder,
63- );
64- const hasRealLabel = matchingRealLabels.length > 0;
65- const hasReminderLabel = labels.includes(reminder);
66-
67- evaluations.push({
68- prefix,
69- reminder,
70- matchingRealLabels,
71- hasReminderLabel,
72- });
73-
74- if (hasRealLabel && hasReminderLabel) {
75- labelsToRemove.push(reminder);
76- } else if (!hasRealLabel && !hasReminderLabel) {
77- labelsToAdd.push(reminder);
78- }
79- }
80-
81- for (const evaluation of evaluations) {
82- if (evaluation.matchingRealLabels.length > 0) {
83- console.log(
84- `Found required ${evaluation.prefix}label(s): ${evaluation.matchingRealLabels.join(', ')}`,
85- );
86- } else {
87- console.log(`Missing required ${evaluation.prefix}label.`);
88- }
89-
90- if (evaluation.hasReminderLabel) {
91- console.log(`Reminder label already present: ${evaluation.reminder}`);
92- }
93- }
94-
95- if (labelsToAdd.length > 0) {
96- console.log(`Adding reminder labels: ${labelsToAdd.join(', ')}`);
97- await github.rest.issues.addLabels({
98- owner: context.repo.owner,
99- repo: context.repo.repo,
100- issue_number: context.issue.number,
101- labels: labelsToAdd,
102- });
103- }
104-
105- for (const name of labelsToRemove) {
106- console.log(`Removing reminder label: ${name}`);
107- await github.rest.issues.removeLabel({
108- owner: context.repo.owner,
109- repo: context.repo.repo,
110- issue_number: context.issue.number,
111- name,
112- });
113- }
114-
115- if (labelsToAdd.length === 0 && labelsToRemove.length === 0) {
116- console.log('No label changes required.');
117- }
118-
119- console.log('::endgroup::');
120-
121- if (process.env.GITHUB_STEP_SUMMARY) {
122- const summaryLines = [
123- '### Issue Label Check',
124- `- Issue: #${issueNumber}`,
125- `- Event: ${action}`,
126- `- Trigger label: ${changedLabel ?? '(none)'}`,
127- `- Current labels: ${labels.length > 0 ? labels.join(', ') : '(none)'}`,
128- '',
129- '#### Requirement status',
130- ...evaluations.map((evaluation) => {
131- const status =
132- evaluation.matchingRealLabels.length > 0
133- ? `found ${evaluation.matchingRealLabels.join(', ')}`
134- : 'missing';
135- const reminder = evaluation.hasReminderLabel
136- ? `reminder present: ${evaluation.reminder}`
137- : `reminder absent: ${evaluation.reminder}`;
138- return `- ${evaluation.prefix}: ${status}; ${reminder}`;
139- }),
140- '',
141- `- Labels to add: ${labelsToAdd.length > 0 ? labelsToAdd.join(', ') : '(none)'}`,
142- `- Labels to remove: ${labelsToRemove.length > 0 ? labelsToRemove.join(', ') : '(none)'}`,
143- ];
144-
145- fs.appendFileSync(
146- process.env.GITHUB_STEP_SUMMARY,
147- `${summaryLines.join('\n')}\n`,
148- );
149- }
25+ repository_full_name : ${{ github.repository }}
26+ token : ${{ github.token }}
27+ label_prefix : ' [scope]'
28+ label_separator : ' '
29+ add_label : ' true'
30+ default_label : ' [scope] ⚠️ label needed'
31+
32+ - name : Ensure [priority] label
33+ uses : Rindrics/expect-label-prefix@v1.2.1
34+ with :
35+ repository_full_name : ${{ github.repository }}
36+ token : ${{ github.token }}
37+ label_prefix : ' [priority]'
38+ label_separator : ' '
39+ add_label : ' true'
40+ default_label : ' [priority] ⚠️ label needed'
0 commit comments