Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 18 additions & 26 deletions actions/setup/js/add_labels.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

const { processSafeOutput } = require("./safe_output_processor.cjs");
const { validateLabels } = require("./safe_output_validator.cjs");
const { getErrorMessage } = require("./error_helpers.cjs");

async function main() {
// Use shared processor for common steps
Expand Down Expand Up @@ -43,7 +42,6 @@ async function main() {
return;
}

// @ts-ignore - TypeScript doesn't narrow properly after success check
const { item: labelsItem, config, targetResult } = result;
if (!config || !targetResult || targetResult.number === undefined) {
core.setFailed("Internal error: config, targetResult, or targetResult.number is undefined");
Expand All @@ -53,14 +51,14 @@ async function main() {
const itemNumber = targetResult.number;
const { contextType } = targetResult;

const requestedLabels = labelsItem.labels || [];
const requestedLabels = labelsItem.labels ?? [];
core.info(`Requested labels: ${JSON.stringify(requestedLabels)}`);

// Use validation helper to sanitize and validate labels
const labelsResult = validateLabels(requestedLabels, allowedLabels, maxCount);
if (!labelsResult.valid) {
// If no valid labels, log info and return gracefully instead of failing
if (labelsResult.error && labelsResult.error.includes("No valid labels")) {
if (labelsResult.error?.includes("No valid labels")) {
core.info("No labels to add");
core.setOutput("labels_added", "");
await core.summary
Expand All @@ -75,11 +73,11 @@ No labels were added (no valid labels found in agent output).
return;
}
// For other validation errors, fail the workflow
core.setFailed(labelsResult.error || "Invalid labels");
core.setFailed(labelsResult.error ?? "Invalid labels");
return;
}

const uniqueLabels = labelsResult.value || [];
const uniqueLabels = labelsResult.value ?? [];

if (uniqueLabels.length === 0) {
core.info("No labels to add");
Expand All @@ -96,32 +94,26 @@ No labels were added (no valid labels found in agent output).
return;
}
core.info(`Adding ${uniqueLabels.length} labels to ${contextType} #${itemNumber}: ${JSON.stringify(uniqueLabels)}`);
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: itemNumber,
labels: uniqueLabels,
});
core.info(`Successfully added ${uniqueLabels.length} labels to ${contextType} #${itemNumber}`);
core.setOutput("labels_added", uniqueLabels.join("\n"));
const labelsListMarkdown = uniqueLabels.map(label => `- \`${label}\``).join("\n");
await core.summary
.addRaw(
`
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: itemNumber,
labels: uniqueLabels,
});
core.info(`Successfully added ${uniqueLabels.length} labels to ${contextType} #${itemNumber}`);
core.setOutput("labels_added", uniqueLabels.join("\n"));
const labelsListMarkdown = uniqueLabels.map(label => `- \`${label}\``).join("\n");
await core.summary
.addRaw(
`
## Label Addition

Successfully added ${uniqueLabels.length} label(s) to ${contextType} #${itemNumber}:

${labelsListMarkdown}
`
)
.write();
} catch (error) {
const errorMessage = getErrorMessage(error);
core.error(`Failed to add labels: ${errorMessage}`);
core.setFailed(`Failed to add labels: ${errorMessage}`);
}
)
.write();
}

module.exports = { main };