Skip to content

Commit 368f45b

Browse files
committed
fix: track issue type + locked state in backfill summary
- Add 'Issue Type set' column to processed issues summary table - Track issueTypeSet per issue (null when already correct/unchanged) - Skip REST label mutations for locked issues (they return 403) with a console note; Issue Type GraphQL sync still runs for locked issues - Show lock emoji in issue number column when issue is locked - Track actual applied add/remove counts (not desired counts)
1 parent 383de6c commit 368f45b

1 file changed

Lines changed: 49 additions & 29 deletions

File tree

.github/workflows/labeler.yml

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,8 @@ jobs:
10901090
const existingLabels = new Set((issue.labels || []).map((l) => l.name).filter(Boolean));
10911091
const labelsToAdd = new Set();
10921092
const labelsToRemove = new Set();
1093+
const isLocked = issue.locked === true;
1094+
let issueTypeSet = null;
10931095
10941096
// Type reconciliation
10951097
const desiredType = inferDesiredType(title, existingLabels);
@@ -1127,6 +1129,7 @@ jobs:
11271129
}`,
11281130
{ id: issueNode.id, issueTypeId: desiredIssueType.id }
11291131
);
1132+
issueTypeSet = desiredIssueTypeName;
11301133
console.log(`#${rawIssue.number}: set Issue Type to ${desiredIssueTypeName}`);
11311134
}
11321135
} catch (err) {
@@ -1203,47 +1206,62 @@ jobs:
12031206
}
12041207
}
12051208
1206-
// Apply changes
1209+
// Apply changes (locked issues reject REST label mutations)
12071210
const finalAdds = [...labelsToAdd].filter((label) => !existingLabels.has(label));
12081211
const finalRemoves = [...labelsToRemove].filter((label) => existingLabels.has(label));
12091212
1210-
for (const label of finalRemoves) {
1211-
try {
1212-
await github.rest.issues.removeLabel({
1213-
owner,
1214-
repo,
1215-
issue_number: rawIssue.number,
1216-
name: label,
1217-
});
1218-
console.log(`#${rawIssue.number}: removed "${label}"`);
1219-
} catch (err) {
1220-
console.log(`#${rawIssue.number}: could not remove "${label}": ${err.message}`);
1213+
let labelAdded = 0;
1214+
let labelRemoved = 0;
1215+
1216+
if (isLocked && (finalAdds.length > 0 || finalRemoves.length > 0)) {
1217+
console.log(
1218+
`#${rawIssue.number}: issue is locked — skipping ${finalAdds.length} add(s) and ${finalRemoves.length} remove(s)`
1219+
);
1220+
} else {
1221+
for (const label of finalRemoves) {
1222+
try {
1223+
await github.rest.issues.removeLabel({
1224+
owner,
1225+
repo,
1226+
issue_number: rawIssue.number,
1227+
name: label,
1228+
});
1229+
labelRemoved += 1;
1230+
console.log(`#${rawIssue.number}: removed "${label}"`);
1231+
} catch (err) {
1232+
console.log(`#${rawIssue.number}: could not remove "${label}": ${err.message}`);
1233+
}
12211234
}
1222-
}
12231235
1224-
for (const label of finalAdds) {
1225-
try {
1226-
await github.rest.issues.addLabels({
1227-
owner,
1228-
repo,
1229-
issue_number: rawIssue.number,
1230-
labels: [label],
1231-
});
1232-
console.log(`#${rawIssue.number}: added "${label}"`);
1233-
} catch (err) {
1234-
console.log(`#${rawIssue.number}: could not add "${label}": ${err.message}`);
1236+
for (const label of finalAdds) {
1237+
try {
1238+
await github.rest.issues.addLabels({
1239+
owner,
1240+
repo,
1241+
issue_number: rawIssue.number,
1242+
labels: [label],
1243+
});
1244+
labelAdded += 1;
1245+
console.log(`#${rawIssue.number}: added "${label}"`);
1246+
} catch (err) {
1247+
console.log(`#${rawIssue.number}: could not add "${label}": ${err.message}`);
1248+
}
12351249
}
12361250
}
12371251
12381252
processed += 1;
12391253
processedIssues.push({
12401254
number: rawIssue.number,
12411255
title: rawIssue.title,
1242-
adds: finalAdds.length,
1243-
removes: finalRemoves.length,
1256+
adds: labelAdded,
1257+
removes: labelRemoved,
1258+
issueTypeSet,
1259+
locked: isLocked,
12441260
});
12451261
console.log(
1246-
`#${rawIssue.number}: done (+${finalAdds.length} added, -${finalRemoves.length} removed)`
1262+
`#${rawIssue.number}: done (+${labelAdded} added, -${labelRemoved} removed${
1263+
issueTypeSet ? `, type→${issueTypeSet}` : ''
1264+
}${isLocked ? ', locked' : ''})`
12471265
);
12481266
} catch (err) {
12491267
console.log(`Error processing #${rawIssue.number}: ${err.message}`);
@@ -1280,9 +1298,10 @@ jobs:
12801298
12811299
if (processedIssues.length > 0) {
12821300
const processedRows = processedIssues.slice(0, 50).map((issue) => [
1283-
`#${issue.number}`,
1301+
`#${issue.number}${issue.locked ? ' 🔒' : ''}`,
12841302
`[${issue.title}](https://github.com/${owner}/${repo}/issues/${issue.number})`,
12851303
`+${issue.adds} / -${issue.removes}`,
1304+
issue.issueTypeSet || '—',
12861305
]);
12871306
12881307
await core.summary
@@ -1291,7 +1310,8 @@ jobs:
12911310
[
12921311
{ data: 'Issue', header: true },
12931312
{ data: 'Title', header: true },
1294-
{ data: 'Changes', header: true },
1313+
{ data: 'Label changes', header: true },
1314+
{ data: 'Issue Type set', header: true },
12951315
],
12961316
...processedRows,
12971317
])

0 commit comments

Comments
 (0)