Skip to content

Commit 33b62f6

Browse files
committed
ci: harden PR size label step in sync-pr-labels workflow
1 parent abe57df commit 33b62f6

1 file changed

Lines changed: 29 additions & 14 deletions

File tree

.github/workflows/sync-pr-labels.yml

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -199,46 +199,61 @@ jobs:
199199
pull_number: prNumber
200200
});
201201
202-
const additions = pr.data.additions;
203-
const deletions = pr.data.deletions;
202+
const additions = pr.data.additions ?? 0;
203+
const deletions = pr.data.deletions ?? 0;
204204
const totalChanges = additions + deletions;
205205
206206
console.log(`PR has ${additions} additions and ${deletions} deletions (${totalChanges} total changes)`);
207207
208208
// Determine size label based on total changes
209209
let sizeLabel = '';
210-
if (totalChanges <= 10) {
210+
if (Number.isFinite(totalChanges) && totalChanges <= 10) {
211211
sizeLabel = 'size/XS';
212-
} else if (totalChanges <= 50) {
212+
} else if (Number.isFinite(totalChanges) && totalChanges <= 50) {
213213
sizeLabel = 'size/S';
214-
} else if (totalChanges <= 200) {
214+
} else if (Number.isFinite(totalChanges) && totalChanges <= 200) {
215215
sizeLabel = 'size/M';
216-
} else if (totalChanges <= 500) {
216+
} else if (Number.isFinite(totalChanges) && totalChanges <= 500) {
217217
sizeLabel = 'size/L';
218-
} else {
218+
} else if (Number.isFinite(totalChanges)) {
219219
sizeLabel = 'size/XL';
220220
}
221221
222+
if (!sizeLabel) {
223+
console.log('Skipping size label: could not compute change stats');
224+
return;
225+
}
226+
222227
console.log(`Applying size label: ${sizeLabel}`);
223228
224229
// Remove any existing size labels first
225230
const currentLabels = await github.rest.issues.listLabelsOnIssue({
226231
owner: context.repo.owner,
227232
repo: context.repo.repo,
228-
issue_number: prNumber
233+
issue_number: prNumber,
234+
per_page: 100
229235
});
230236
231237
const sizeLabelsToRemove = currentLabels.data
232238
.map(label => label.name)
233239
.filter(name => name.startsWith('size/'));
234240
235241
for (const label of sizeLabelsToRemove) {
236-
await github.rest.issues.removeLabel({
237-
owner: context.repo.owner,
238-
repo: context.repo.repo,
239-
issue_number: prNumber,
240-
name: label
241-
});
242+
try {
243+
await github.rest.issues.removeLabel({
244+
owner: context.repo.owner,
245+
repo: context.repo.repo,
246+
issue_number: prNumber,
247+
name: label
248+
});
249+
} catch (e) {
250+
const status = e.status ?? e.response?.status;
251+
if (status === 404) {
252+
console.log(`Label already absent, skipping remove: ${label}`);
253+
} else {
254+
throw e;
255+
}
256+
}
242257
}
243258
244259
// Apply the new size label

0 commit comments

Comments
 (0)