@@ -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