in src/github/operations/comments/feedback.ts [363:427]
export async function postJunieCompletionComment(
octokit: Octokit,
data: FinishFeedbackData
) {
const {owner, name} = data.parsedContext.payload.repository;
const ownerLogin = owner.login;
const repoFullName = `${ownerLogin}/${name}`;
const workflowName = data.parsedContext.workflow;
// Check if this is a Jira-triggered workflow
if (isJiraWorkflowDispatchEvent(data.parsedContext)) {
console.log('Jira workflow detected - posting feedback to Jira');
try {
await postJiraFeedback(data);
} catch (jiraError) {
console.warn('Failed to post feedback to Jira:', jiraError);
// Don't fail the workflow if Jira update fails
}
return;
}
if (!data.initCommentId) {
console.log('No initial comment ID - skipping feedback');
return;
}
let feedbackBody: string | undefined;
if (data.isJobFailed) {
feedbackBody = getFailedBodyWithMarker(ownerLogin, name, data.parsedContext.runId, data.failureData!, workflowName)
} else {
feedbackBody = getSuccessBodyWithMarker(repoFullName, data.successData!, workflowName)
}
if (!feedbackBody) {
console.log('No feedback body - skipping feedback');
return;
}
const initCommentId = +data.initCommentId;
console.log(`Updating feedback comment ${initCommentId}`);
try {
await updateExistingComment(
octokit,
data.parsedContext,
initCommentId,
feedbackBody,
ownerLogin,
name
);
console.log('✓ Feedback comment updated successfully');
} catch (error) {
console.error(`❌ Failed to update feedback comment ${initCommentId}:`, error);
throw new Error(
`❌ Failed to update feedback comment on ${repoFullName}. ` +
`This could be due to:\n` +
`• Insufficient token permissions (needs 'issues:write' or 'pull_requests:write' scope)\n` +
`• GitHub API rate limits\n` +
`• The comment may have been deleted\n` +
`• Network connectivity issues\n` +
`Original error: ${error instanceof Error ? error.message : String(error)}`
);
}
}