Skip to content

Commit 6731701

Browse files
jsweep: Clean assign_issue, assign_milestone, and assign_to_agent (#7873)
1 parent 2b8d619 commit 6731701

File tree

4 files changed

+464
-39
lines changed

4 files changed

+464
-39
lines changed

actions/setup/js/assign_issue.cjs

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ async function main() {
1515
const issueNumber = process.env.ISSUE_NUMBER;
1616

1717
// Check if GH_TOKEN is present
18-
if (!ghToken || ghToken.trim() === "") {
18+
if (!ghToken?.trim()) {
1919
const docsUrl = "https://githubnext.github.io/gh-aw/reference/safe-outputs/#assigning-issues-to-copilot";
20-
core.setFailed(`GH_TOKEN environment variable is required but not set. ` + `This token is needed to assign issues. ` + `For more information on configuring Copilot tokens, see: ${docsUrl}`);
20+
core.setFailed(`GH_TOKEN environment variable is required but not set. This token is needed to assign issues. For more information on configuring Copilot tokens, see: ${docsUrl}`);
2121
return;
2222
}
2323

2424
// Validate assignee
25-
if (!assignee || assignee.trim() === "") {
25+
if (!assignee?.trim()) {
2626
core.setFailed("ASSIGNEE environment variable is required but not set");
2727
return;
2828
}
2929

3030
// Validate issue number
31-
if (!issueNumber || issueNumber.trim() === "") {
31+
if (!issueNumber?.trim()) {
3232
core.setFailed("ISSUE_NUMBER environment variable is required but not set");
3333
return;
3434
}
@@ -39,18 +39,17 @@ async function main() {
3939

4040
core.info(`Assigning issue #${trimmedIssueNumber} to ${trimmedAssignee}`);
4141

42-
try {
43-
// Check if the assignee is a known coding agent (e.g., copilot, @copilot)
44-
const agentName = getAgentName(trimmedAssignee);
42+
// Check if the assignee is a known coding agent (e.g., copilot, @copilot)
43+
const agentName = getAgentName(trimmedAssignee);
4544

45+
try {
4646
if (agentName) {
4747
// Use GraphQL API for agent assignment
4848
// The token is set at the step level via github-token parameter
4949
core.info(`Detected coding agent: ${agentName}. Using GraphQL API for assignment.`);
5050

5151
// Get repository owner and repo from context
52-
const owner = context.repo.owner;
53-
const repo = context.repo.repo;
52+
const { owner, repo } = context.repo;
5453

5554
// Find the agent in the repository
5655
const agentId = await findAgent(owner, repo, agentName);
@@ -86,17 +85,13 @@ async function main() {
8685
core.info(`✅ Successfully assigned issue #${trimmedIssueNumber} to ${trimmedAssignee}`);
8786

8887
// Write summary
89-
await core.summary
90-
.addRaw(
91-
`
88+
await core.summary.addRaw(`
9289
## Issue Assignment
9390
9491
Successfully assigned issue #${trimmedIssueNumber} to \`${trimmedAssignee}\`.
95-
`
96-
)
97-
.write();
92+
`).write();
9893
} catch (error) {
99-
const errorMessage = error instanceof Error ? error.message : String(error);
94+
const errorMessage = error?.message ?? String(error);
10095
core.error(`Failed to assign issue: ${errorMessage}`);
10196
core.setFailed(`Failed to assign issue #${trimmedIssueNumber} to ${trimmedAssignee}: ${errorMessage}`);
10297
}

actions/setup/js/assign_milestone.cjs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ async function main() {
6262
allMilestones = milestonesResponse.data;
6363
core.info(`Fetched ${allMilestones.length} milestones from repository`);
6464
} catch (error) {
65-
const errorMessage = error instanceof Error ? error.message : String(error);
65+
const errorMessage = error?.message ?? String(error);
6666
core.error(`Failed to fetch milestones: ${errorMessage}`);
6767
core.setFailed(`Failed to fetch milestones for validation: ${errorMessage}`);
6868
return;
@@ -86,7 +86,7 @@ async function main() {
8686
}
8787

8888
// Validate against allowed list if configured
89-
if (allowedMilestones && allowedMilestones.length > 0) {
89+
if (allowedMilestones?.length > 0) {
9090
const milestone = allMilestones.find(m => m.number === milestoneNumber);
9191

9292
if (!milestone) {
@@ -119,7 +119,7 @@ async function main() {
119119
success: true,
120120
});
121121
} catch (error) {
122-
const errorMessage = error instanceof Error ? error.message : String(error);
122+
const errorMessage = error?.message ?? String(error);
123123
core.error(`Failed to assign milestone #${milestoneNumber} to issue #${issueNumber}: ${errorMessage}`);
124124
results.push({
125125
issue_number: issueNumber,
@@ -132,23 +132,25 @@ async function main() {
132132

133133
// Generate step summary
134134
const successCount = results.filter(r => r.success).length;
135-
const failureCount = results.filter(r => !r.success).length;
135+
const failureCount = results.length - successCount;
136136

137137
let summaryContent = "## Milestone Assignment\n\n";
138138

139139
if (successCount > 0) {
140140
summaryContent += `✅ Successfully assigned ${successCount} milestone(s):\n\n`;
141-
for (const result of results.filter(r => r.success)) {
142-
summaryContent += `- Issue #${result.issue_number} → Milestone #${result.milestone_number}\n`;
143-
}
144-
summaryContent += "\n";
141+
summaryContent += results
142+
.filter(r => r.success)
143+
.map(r => `- Issue #${r.issue_number} → Milestone #${r.milestone_number}`)
144+
.join("\n");
145+
summaryContent += "\n\n";
145146
}
146147

147148
if (failureCount > 0) {
148149
summaryContent += `❌ Failed to assign ${failureCount} milestone(s):\n\n`;
149-
for (const result of results.filter(r => !r.success)) {
150-
summaryContent += `- Issue #${result.issue_number} → Milestone #${result.milestone_number}: ${result.error}\n`;
151-
}
150+
summaryContent += results
151+
.filter(r => !r.success)
152+
.map(r => `- Issue #${r.issue_number} → Milestone #${r.milestone_number}: ${r.error}`)
153+
.join("\n");
152154
}
153155

154156
await core.summary.addRaw(summaryContent).write();

actions/setup/js/assign_to_agent.cjs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ async function main() {
3636
}
3737

3838
// Get default agent from configuration
39-
const defaultAgent = process.env.GH_AW_AGENT_DEFAULT?.trim() || "copilot";
39+
const defaultAgent = process.env.GH_AW_AGENT_DEFAULT?.trim() ?? "copilot";
4040
core.info(`Default agent: ${defaultAgent}`);
4141

4242
// Get max count configuration
@@ -80,7 +80,7 @@ async function main() {
8080
const results = [];
8181
for (const item of itemsToProcess) {
8282
const issueNumber = typeof item.issue_number === "number" ? item.issue_number : parseInt(String(item.issue_number), 10);
83-
const agentName = item.agent || defaultAgent;
83+
const agentName = item.agent ?? defaultAgent;
8484

8585
if (isNaN(issueNumber) || issueNumber <= 0) {
8686
core.error(`Invalid issue_number: ${item.issue_number}`);
@@ -148,7 +148,7 @@ async function main() {
148148
success: true,
149149
});
150150
} catch (error) {
151-
let errorMessage = error instanceof Error ? error.message : String(error);
151+
let errorMessage = error?.message ?? String(error);
152152
if (errorMessage.includes("coding agent is not available for this repository")) {
153153
// Enrich with available agent logins to aid troubleshooting - uses built-in github object
154154
try {
@@ -172,26 +172,28 @@ async function main() {
172172

173173
// Generate step summary
174174
const successCount = results.filter(r => r.success).length;
175-
const failureCount = results.filter(r => !r.success).length;
175+
const failureCount = results.length - successCount;
176176

177177
let summaryContent = "## Agent Assignment\n\n";
178178

179179
if (successCount > 0) {
180180
summaryContent += `✅ Successfully assigned ${successCount} agent(s):\n\n`;
181-
for (const result of results.filter(r => r.success)) {
182-
summaryContent += `- Issue #${result.issue_number} → Agent: ${result.agent}\n`;
183-
}
184-
summaryContent += "\n";
181+
summaryContent += results
182+
.filter(r => r.success)
183+
.map(r => `- Issue #${r.issue_number} → Agent: ${r.agent}`)
184+
.join("\n");
185+
summaryContent += "\n\n";
185186
}
186187

187188
if (failureCount > 0) {
188189
summaryContent += `❌ Failed to assign ${failureCount} agent(s):\n\n`;
189-
for (const result of results.filter(r => !r.success)) {
190-
summaryContent += `- Issue #${result.issue_number} → Agent: ${result.agent}: ${result.error}\n`;
191-
}
190+
summaryContent += results
191+
.filter(r => !r.success)
192+
.map(r => `- Issue #${r.issue_number} → Agent: ${r.agent}: ${r.error}`)
193+
.join("\n");
192194

193195
// Check if any failures were permission-related
194-
const hasPermissionError = results.some(r => !r.success && r.error && (r.error.includes("Resource not accessible") || r.error.includes("Insufficient permissions")));
196+
const hasPermissionError = results.some(r => !r.success && r.error?.includes("Resource not accessible") || r.error?.includes("Insufficient permissions"));
195197

196198
if (hasPermissionError) {
197199
summaryContent += generatePermissionErrorSummary();

0 commit comments

Comments
 (0)