@probelabs/visor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1240 -0
- package/action.yml +142 -0
- package/defaults/.visor.yaml +184 -0
- package/dist/action-cli-bridge.d.ts +104 -0
- package/dist/action-cli-bridge.d.ts.map +1 -0
- package/dist/action-cli-bridge.js +372 -0
- package/dist/action-cli-bridge.js.map +1 -0
- package/dist/ai-review-service.d.ts +84 -0
- package/dist/ai-review-service.d.ts.map +1 -0
- package/dist/ai-review-service.js +674 -0
- package/dist/ai-review-service.js.map +1 -0
- package/dist/check-execution-engine.d.ts +165 -0
- package/dist/check-execution-engine.d.ts.map +1 -0
- package/dist/check-execution-engine.js +1172 -0
- package/dist/check-execution-engine.js.map +1 -0
- package/dist/cli-main.d.ts +6 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +247 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli.d.ts +47 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +224 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +10 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +53 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +63 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +369 -0
- package/dist/config.js.map +1 -0
- package/dist/dependency-resolver.d.ts +54 -0
- package/dist/dependency-resolver.d.ts.map +1 -0
- package/dist/dependency-resolver.js +163 -0
- package/dist/dependency-resolver.js.map +1 -0
- package/dist/event-mapper.d.ts +125 -0
- package/dist/event-mapper.d.ts.map +1 -0
- package/dist/event-mapper.js +311 -0
- package/dist/event-mapper.js.map +1 -0
- package/dist/failure-condition-evaluator.d.ts +81 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -0
- package/dist/failure-condition-evaluator.js +445 -0
- package/dist/failure-condition-evaluator.js.map +1 -0
- package/dist/git-repository-analyzer.d.ts +45 -0
- package/dist/git-repository-analyzer.d.ts.map +1 -0
- package/dist/git-repository-analyzer.js +285 -0
- package/dist/git-repository-analyzer.js.map +1 -0
- package/dist/github-check-service.d.ts +104 -0
- package/dist/github-check-service.d.ts.map +1 -0
- package/dist/github-check-service.js +382 -0
- package/dist/github-check-service.js.map +1 -0
- package/dist/github-comments.d.ts +109 -0
- package/dist/github-comments.d.ts.map +1 -0
- package/dist/github-comments.js +289 -0
- package/dist/github-comments.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1265 -0
- package/dist/index.js.map +1 -0
- package/dist/output-formatters.d.ts +66 -0
- package/dist/output-formatters.d.ts.map +1 -0
- package/dist/output-formatters.js +624 -0
- package/dist/output-formatters.js.map +1 -0
- package/dist/pr-analyzer.d.ts +47 -0
- package/dist/pr-analyzer.d.ts.map +1 -0
- package/dist/pr-analyzer.js +194 -0
- package/dist/pr-analyzer.js.map +1 -0
- package/dist/pr-detector.d.ts +78 -0
- package/dist/pr-detector.d.ts.map +1 -0
- package/dist/pr-detector.js +357 -0
- package/dist/pr-detector.js.map +1 -0
- package/dist/providers/ai-check-provider.d.ts +40 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -0
- package/dist/providers/ai-check-provider.js +416 -0
- package/dist/providers/ai-check-provider.js.map +1 -0
- package/dist/providers/check-provider-registry.d.ts +67 -0
- package/dist/providers/check-provider-registry.d.ts.map +1 -0
- package/dist/providers/check-provider-registry.js +138 -0
- package/dist/providers/check-provider-registry.js.map +1 -0
- package/dist/providers/check-provider.interface.d.ts +78 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -0
- package/dist/providers/check-provider.interface.js +11 -0
- package/dist/providers/check-provider.interface.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/script-check-provider.d.ts +20 -0
- package/dist/providers/script-check-provider.d.ts.map +1 -0
- package/dist/providers/script-check-provider.js +163 -0
- package/dist/providers/script-check-provider.js.map +1 -0
- package/dist/providers/tool-check-provider.d.ts +19 -0
- package/dist/providers/tool-check-provider.d.ts.map +1 -0
- package/dist/providers/tool-check-provider.js +125 -0
- package/dist/providers/tool-check-provider.js.map +1 -0
- package/dist/providers/webhook-check-provider.d.ts +21 -0
- package/dist/providers/webhook-check-provider.d.ts.map +1 -0
- package/dist/providers/webhook-check-provider.js +173 -0
- package/dist/providers/webhook-check-provider.js.map +1 -0
- package/dist/reviewer.d.ts +88 -0
- package/dist/reviewer.d.ts.map +1 -0
- package/dist/reviewer.js +760 -0
- package/dist/reviewer.js.map +1 -0
- package/dist/types/cli.d.ts +41 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +3 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +315 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/utils/env-resolver.d.ts +38 -0
- package/dist/utils/env-resolver.d.ts.map +1 -0
- package/dist/utils/env-resolver.js +130 -0
- package/dist/utils/env-resolver.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Check Service for creating and managing check runs based on failure conditions
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GitHubCheckService = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Service for managing GitHub Check Runs based on Visor failure conditions
|
|
9
|
+
*/
|
|
10
|
+
class GitHubCheckService {
|
|
11
|
+
octokit;
|
|
12
|
+
maxAnnotations = 50; // GitHub API limit
|
|
13
|
+
constructor(octokit) {
|
|
14
|
+
this.octokit = octokit;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a new check run in queued status
|
|
18
|
+
*/
|
|
19
|
+
async createCheckRun(options, summary) {
|
|
20
|
+
try {
|
|
21
|
+
const response = await this.octokit.rest.checks.create({
|
|
22
|
+
owner: options.owner,
|
|
23
|
+
repo: options.repo,
|
|
24
|
+
name: options.name,
|
|
25
|
+
head_sha: options.head_sha,
|
|
26
|
+
status: 'queued',
|
|
27
|
+
details_url: options.details_url,
|
|
28
|
+
external_id: options.external_id,
|
|
29
|
+
output: summary
|
|
30
|
+
? {
|
|
31
|
+
title: summary.title,
|
|
32
|
+
summary: summary.summary,
|
|
33
|
+
text: summary.text,
|
|
34
|
+
}
|
|
35
|
+
: undefined,
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
id: response.data.id,
|
|
39
|
+
url: response.data.html_url || '',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
throw new Error(`Failed to create check run: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Update check run to in_progress status
|
|
48
|
+
*/
|
|
49
|
+
async updateCheckRunInProgress(owner, repo, check_run_id, summary) {
|
|
50
|
+
try {
|
|
51
|
+
await this.octokit.rest.checks.update({
|
|
52
|
+
owner,
|
|
53
|
+
repo,
|
|
54
|
+
check_run_id,
|
|
55
|
+
status: 'in_progress',
|
|
56
|
+
output: summary
|
|
57
|
+
? {
|
|
58
|
+
title: summary.title,
|
|
59
|
+
summary: summary.summary,
|
|
60
|
+
text: summary.text,
|
|
61
|
+
}
|
|
62
|
+
: undefined,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`Failed to update check run to in_progress: ${error instanceof Error ? error.message : String(error)}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Complete a check run with results based on failure conditions
|
|
71
|
+
*/
|
|
72
|
+
async completeCheckRun(owner, repo, check_run_id, checkName, failureResults, reviewIssues = [], executionError) {
|
|
73
|
+
try {
|
|
74
|
+
const { conclusion, summary } = this.determineCheckRunConclusion(checkName, failureResults, reviewIssues, executionError);
|
|
75
|
+
const annotations = this.convertIssuesToAnnotations(reviewIssues);
|
|
76
|
+
await this.octokit.rest.checks.update({
|
|
77
|
+
owner,
|
|
78
|
+
repo,
|
|
79
|
+
check_run_id,
|
|
80
|
+
status: 'completed',
|
|
81
|
+
conclusion,
|
|
82
|
+
completed_at: new Date().toISOString(),
|
|
83
|
+
output: {
|
|
84
|
+
title: summary.title,
|
|
85
|
+
summary: summary.summary,
|
|
86
|
+
text: summary.text,
|
|
87
|
+
annotations: annotations.slice(0, this.maxAnnotations), // GitHub limit
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw new Error(`Failed to complete check run: ${error instanceof Error ? error.message : String(error)}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Determine check run conclusion based on failure conditions and issues
|
|
97
|
+
*/
|
|
98
|
+
determineCheckRunConclusion(checkName, failureResults, reviewIssues, executionError) {
|
|
99
|
+
// Handle execution errors first
|
|
100
|
+
if (executionError) {
|
|
101
|
+
return {
|
|
102
|
+
conclusion: 'failure',
|
|
103
|
+
summary: {
|
|
104
|
+
title: '❌ Check Execution Failed',
|
|
105
|
+
summary: `The ${checkName} check failed to execute properly.`,
|
|
106
|
+
text: `**Error:** ${executionError}\n\nPlease check your configuration and try again.`,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// Check for failed conditions
|
|
111
|
+
const failedConditions = failureResults.filter(result => result.failed);
|
|
112
|
+
const errorConditions = failedConditions.filter(result => result.severity === 'error');
|
|
113
|
+
const warningConditions = failedConditions.filter(result => result.severity === 'warning');
|
|
114
|
+
// Count issues by severity
|
|
115
|
+
const criticalIssues = reviewIssues.filter(issue => issue.severity === 'critical').length;
|
|
116
|
+
const errorIssues = reviewIssues.filter(issue => issue.severity === 'error').length;
|
|
117
|
+
const warningIssues = reviewIssues.filter(issue => issue.severity === 'warning').length;
|
|
118
|
+
const totalIssues = reviewIssues.length;
|
|
119
|
+
// Determine conclusion based on failure conditions and issues
|
|
120
|
+
let conclusion;
|
|
121
|
+
let title;
|
|
122
|
+
let summaryText;
|
|
123
|
+
let details;
|
|
124
|
+
if (errorConditions.length > 0 || criticalIssues > 0) {
|
|
125
|
+
conclusion = 'failure';
|
|
126
|
+
title = '🚨 Check Failed';
|
|
127
|
+
summaryText = `${checkName} check failed due to ${errorConditions.length > 0 ? 'failure conditions' : 'critical issues'}.`;
|
|
128
|
+
details = this.formatCheckDetails(failureResults, reviewIssues, {
|
|
129
|
+
failedConditions: errorConditions.length,
|
|
130
|
+
warningConditions: warningConditions.length,
|
|
131
|
+
criticalIssues,
|
|
132
|
+
errorIssues,
|
|
133
|
+
warningIssues,
|
|
134
|
+
totalIssues,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
else if (warningConditions.length > 0 || errorIssues > 0) {
|
|
138
|
+
conclusion = 'neutral';
|
|
139
|
+
title = '⚠️ Check Completed with Warnings';
|
|
140
|
+
summaryText = `${checkName} check completed but found ${warningConditions.length > 0 ? 'warning conditions' : 'error-level issues'}.`;
|
|
141
|
+
details = this.formatCheckDetails(failureResults, reviewIssues, {
|
|
142
|
+
failedConditions: 0,
|
|
143
|
+
warningConditions: warningConditions.length,
|
|
144
|
+
criticalIssues,
|
|
145
|
+
errorIssues,
|
|
146
|
+
warningIssues,
|
|
147
|
+
totalIssues,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
else if (warningIssues > 0) {
|
|
151
|
+
conclusion = 'neutral';
|
|
152
|
+
title = '⚠️ Check Completed with Minor Issues';
|
|
153
|
+
summaryText = `${checkName} check completed with ${warningIssues} warning${warningIssues === 1 ? '' : 's'}.`;
|
|
154
|
+
details = this.formatCheckDetails(failureResults, reviewIssues, {
|
|
155
|
+
failedConditions: 0,
|
|
156
|
+
warningConditions: 0,
|
|
157
|
+
criticalIssues,
|
|
158
|
+
errorIssues,
|
|
159
|
+
warningIssues,
|
|
160
|
+
totalIssues,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
conclusion = 'success';
|
|
165
|
+
title = '✅ Check Passed';
|
|
166
|
+
summaryText = `${checkName} check completed successfully with no issues found.`;
|
|
167
|
+
details = this.formatCheckDetails(failureResults, reviewIssues, {
|
|
168
|
+
failedConditions: 0,
|
|
169
|
+
warningConditions: 0,
|
|
170
|
+
criticalIssues: 0,
|
|
171
|
+
errorIssues: 0,
|
|
172
|
+
warningIssues: 0,
|
|
173
|
+
totalIssues: 0,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
conclusion,
|
|
178
|
+
summary: {
|
|
179
|
+
title,
|
|
180
|
+
summary: summaryText,
|
|
181
|
+
text: details,
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Format detailed check results for the check run summary
|
|
187
|
+
*/
|
|
188
|
+
formatCheckDetails(failureResults, reviewIssues, counts) {
|
|
189
|
+
const sections = [];
|
|
190
|
+
// Summary section
|
|
191
|
+
sections.push('## 📊 Summary');
|
|
192
|
+
sections.push(`- **Total Issues:** ${counts.totalIssues}`);
|
|
193
|
+
if (counts.criticalIssues > 0) {
|
|
194
|
+
sections.push(`- **Critical Issues:** ${counts.criticalIssues}`);
|
|
195
|
+
}
|
|
196
|
+
if (counts.errorIssues > 0) {
|
|
197
|
+
sections.push(`- **Error Issues:** ${counts.errorIssues}`);
|
|
198
|
+
}
|
|
199
|
+
if (counts.warningIssues > 0) {
|
|
200
|
+
sections.push(`- **Warning Issues:** ${counts.warningIssues}`);
|
|
201
|
+
}
|
|
202
|
+
sections.push('');
|
|
203
|
+
// Failure conditions section
|
|
204
|
+
if (failureResults.length > 0) {
|
|
205
|
+
sections.push('## 🔍 Failure Condition Results');
|
|
206
|
+
const failedConditions = failureResults.filter(result => result.failed);
|
|
207
|
+
const passedConditions = failureResults.filter(result => !result.failed);
|
|
208
|
+
if (failedConditions.length > 0) {
|
|
209
|
+
sections.push('### ❌ Failed Conditions');
|
|
210
|
+
failedConditions.forEach(condition => {
|
|
211
|
+
sections.push(`- **${condition.conditionName}**: ${condition.message || condition.expression}`);
|
|
212
|
+
if (condition.severity === 'error') {
|
|
213
|
+
sections.push(` - ⚠️ **Severity:** Error`);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
sections.push('');
|
|
217
|
+
}
|
|
218
|
+
if (passedConditions.length > 0) {
|
|
219
|
+
sections.push('### ✅ Passed Conditions');
|
|
220
|
+
passedConditions.forEach(condition => {
|
|
221
|
+
sections.push(`- **${condition.conditionName}**: ${condition.message || 'Condition passed'}`);
|
|
222
|
+
});
|
|
223
|
+
sections.push('');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Issues by category section
|
|
227
|
+
if (reviewIssues.length > 0) {
|
|
228
|
+
const issuesByCategory = this.groupIssuesByCategory(reviewIssues);
|
|
229
|
+
sections.push('## 🐛 Issues by Category');
|
|
230
|
+
Object.entries(issuesByCategory).forEach(([category, issues]) => {
|
|
231
|
+
if (issues.length > 0) {
|
|
232
|
+
sections.push(`### ${this.getCategoryEmoji(category)} ${category.charAt(0).toUpperCase() + category.slice(1)} (${issues.length})`);
|
|
233
|
+
// Show only first 5 issues per category to keep the summary concise
|
|
234
|
+
const displayIssues = issues.slice(0, 5);
|
|
235
|
+
displayIssues.forEach(issue => {
|
|
236
|
+
const severityIcon = this.getSeverityIcon(issue.severity);
|
|
237
|
+
sections.push(`- ${severityIcon} **${issue.file}:${issue.line}** - ${issue.message}`);
|
|
238
|
+
});
|
|
239
|
+
if (issues.length > 5) {
|
|
240
|
+
sections.push(`- *...and ${issues.length - 5} more ${category} issues*`);
|
|
241
|
+
}
|
|
242
|
+
sections.push('');
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// Footer
|
|
247
|
+
sections.push('---');
|
|
248
|
+
sections.push('*Generated by [Visor](https://github.com/probelabs/visor) - AI-powered code review*');
|
|
249
|
+
return sections.join('\n');
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Convert review issues to GitHub check run annotations
|
|
253
|
+
*/
|
|
254
|
+
convertIssuesToAnnotations(reviewIssues) {
|
|
255
|
+
return reviewIssues
|
|
256
|
+
.slice(0, this.maxAnnotations) // Respect GitHub's annotation limit
|
|
257
|
+
.map(issue => ({
|
|
258
|
+
path: issue.file,
|
|
259
|
+
start_line: issue.line,
|
|
260
|
+
end_line: issue.endLine || issue.line,
|
|
261
|
+
annotation_level: this.mapSeverityToAnnotationLevel(issue.severity),
|
|
262
|
+
message: issue.message,
|
|
263
|
+
title: `${issue.category} Issue`,
|
|
264
|
+
raw_details: issue.suggestion || undefined,
|
|
265
|
+
}));
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Map Visor issue severity to GitHub annotation level
|
|
269
|
+
*/
|
|
270
|
+
mapSeverityToAnnotationLevel(severity) {
|
|
271
|
+
switch (severity) {
|
|
272
|
+
case 'critical':
|
|
273
|
+
case 'error':
|
|
274
|
+
return 'failure';
|
|
275
|
+
case 'warning':
|
|
276
|
+
return 'warning';
|
|
277
|
+
case 'info':
|
|
278
|
+
default:
|
|
279
|
+
return 'notice';
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Group issues by category
|
|
284
|
+
*/
|
|
285
|
+
groupIssuesByCategory(issues) {
|
|
286
|
+
const grouped = {};
|
|
287
|
+
issues.forEach(issue => {
|
|
288
|
+
const category = issue.category || 'general';
|
|
289
|
+
if (!grouped[category]) {
|
|
290
|
+
grouped[category] = [];
|
|
291
|
+
}
|
|
292
|
+
grouped[category].push(issue);
|
|
293
|
+
});
|
|
294
|
+
return grouped;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get emoji for issue category
|
|
298
|
+
*/
|
|
299
|
+
getCategoryEmoji(category) {
|
|
300
|
+
const emojiMap = {
|
|
301
|
+
security: '🔐',
|
|
302
|
+
performance: '⚡',
|
|
303
|
+
style: '🎨',
|
|
304
|
+
logic: '🧠',
|
|
305
|
+
architecture: '🏗️',
|
|
306
|
+
documentation: '📚',
|
|
307
|
+
general: '📝',
|
|
308
|
+
};
|
|
309
|
+
return emojiMap[category.toLowerCase()] || '📝';
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get icon for issue severity
|
|
313
|
+
*/
|
|
314
|
+
getSeverityIcon(severity) {
|
|
315
|
+
const iconMap = {
|
|
316
|
+
critical: '🚨',
|
|
317
|
+
error: '❌',
|
|
318
|
+
warning: '⚠️',
|
|
319
|
+
info: 'ℹ️',
|
|
320
|
+
};
|
|
321
|
+
return iconMap[severity.toLowerCase()] || 'ℹ️';
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Create multiple check runs for different checks with failure condition support
|
|
325
|
+
*/
|
|
326
|
+
async createMultipleCheckRuns(options, checkResults) {
|
|
327
|
+
const results = [];
|
|
328
|
+
for (const checkResult of checkResults) {
|
|
329
|
+
try {
|
|
330
|
+
// Create check run
|
|
331
|
+
const checkRun = await this.createCheckRun({
|
|
332
|
+
...options,
|
|
333
|
+
name: `Visor: ${checkResult.checkName}`,
|
|
334
|
+
external_id: `visor-${checkResult.checkName}-${options.head_sha.substring(0, 7)}`,
|
|
335
|
+
});
|
|
336
|
+
// Update to in progress
|
|
337
|
+
await this.updateCheckRunInProgress(options.owner, options.repo, checkRun.id, {
|
|
338
|
+
title: `Running ${checkResult.checkName} check...`,
|
|
339
|
+
summary: `Analyzing code with ${checkResult.checkName} check using AI.`,
|
|
340
|
+
});
|
|
341
|
+
// Complete with results
|
|
342
|
+
await this.completeCheckRun(options.owner, options.repo, checkRun.id, checkResult.checkName, checkResult.failureResults, checkResult.reviewIssues, checkResult.executionError);
|
|
343
|
+
results.push({
|
|
344
|
+
checkName: checkResult.checkName,
|
|
345
|
+
id: checkRun.id,
|
|
346
|
+
url: checkRun.url,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
console.error(`Failed to create check run for ${checkResult.checkName}:`, error);
|
|
351
|
+
// Continue with other checks even if one fails
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return results;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Get check runs for a specific commit
|
|
358
|
+
*/
|
|
359
|
+
async getCheckRuns(owner, repo, ref) {
|
|
360
|
+
try {
|
|
361
|
+
const response = await this.octokit.rest.checks.listForRef({
|
|
362
|
+
owner,
|
|
363
|
+
repo,
|
|
364
|
+
ref,
|
|
365
|
+
filter: 'all',
|
|
366
|
+
});
|
|
367
|
+
return response.data.check_runs
|
|
368
|
+
.filter(check => check.name.startsWith('Visor:'))
|
|
369
|
+
.map(check => ({
|
|
370
|
+
id: check.id,
|
|
371
|
+
name: check.name,
|
|
372
|
+
status: check.status,
|
|
373
|
+
conclusion: check.conclusion,
|
|
374
|
+
}));
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
throw new Error(`Failed to get check runs: ${error instanceof Error ? error.message : String(error)}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
exports.GitHubCheckService = GitHubCheckService;
|
|
382
|
+
//# sourceMappingURL=github-check-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-check-service.js","sourceRoot":"","sources":["../src/github-check-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/rest';
|
|
2
|
+
export interface Comment {
|
|
3
|
+
id: number;
|
|
4
|
+
body: string;
|
|
5
|
+
user: {
|
|
6
|
+
login: string;
|
|
7
|
+
};
|
|
8
|
+
created_at: string;
|
|
9
|
+
updated_at: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RetryConfig {
|
|
12
|
+
maxRetries: number;
|
|
13
|
+
baseDelay: number;
|
|
14
|
+
maxDelay: number;
|
|
15
|
+
backoffFactor: number;
|
|
16
|
+
}
|
|
17
|
+
export interface CommentMetadata {
|
|
18
|
+
commentId: string;
|
|
19
|
+
lastUpdated: string;
|
|
20
|
+
triggeredBy: string;
|
|
21
|
+
commitSha?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Manages GitHub PR comments with dynamic updating capabilities
|
|
25
|
+
*/
|
|
26
|
+
export declare class CommentManager {
|
|
27
|
+
private octokit;
|
|
28
|
+
private retryConfig;
|
|
29
|
+
constructor(octokit: Octokit, retryConfig?: Partial<RetryConfig>);
|
|
30
|
+
/**
|
|
31
|
+
* Find existing Visor comment by comment ID marker
|
|
32
|
+
*/
|
|
33
|
+
findVisorComment(owner: string, repo: string, prNumber: number, commentId?: string): Promise<Comment | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Update existing comment or create new one with collision detection
|
|
36
|
+
*/
|
|
37
|
+
updateOrCreateComment(owner: string, repo: string, prNumber: number, content: string, options?: {
|
|
38
|
+
commentId?: string;
|
|
39
|
+
triggeredBy?: string;
|
|
40
|
+
allowConcurrentUpdates?: boolean;
|
|
41
|
+
commitSha?: string;
|
|
42
|
+
}): Promise<Comment>;
|
|
43
|
+
/**
|
|
44
|
+
* Format comment content with metadata markers
|
|
45
|
+
*/
|
|
46
|
+
formatCommentWithMetadata(content: string, metadata: CommentMetadata): string;
|
|
47
|
+
/**
|
|
48
|
+
* Create collapsible sections for comment content
|
|
49
|
+
*/
|
|
50
|
+
createCollapsibleSection(title: string, content: string, isExpanded?: boolean): string;
|
|
51
|
+
/**
|
|
52
|
+
* Group review results by check type with collapsible sections
|
|
53
|
+
*/
|
|
54
|
+
formatGroupedResults(results: Array<{
|
|
55
|
+
checkType: string;
|
|
56
|
+
content: string;
|
|
57
|
+
score?: number;
|
|
58
|
+
issuesFound?: number;
|
|
59
|
+
}>, groupBy?: 'check' | 'severity'): string;
|
|
60
|
+
/**
|
|
61
|
+
* Generate unique comment ID
|
|
62
|
+
*/
|
|
63
|
+
private generateCommentId;
|
|
64
|
+
/**
|
|
65
|
+
* Check if comment is a Visor comment
|
|
66
|
+
*/
|
|
67
|
+
private isVisorComment;
|
|
68
|
+
/**
|
|
69
|
+
* Extract comment ID from comment body
|
|
70
|
+
*/
|
|
71
|
+
extractCommentId(body: string): string | null;
|
|
72
|
+
/**
|
|
73
|
+
* Handle rate limiting with exponential backoff
|
|
74
|
+
*/
|
|
75
|
+
private handleRateLimit;
|
|
76
|
+
/**
|
|
77
|
+
* Check if error is a rate limit error
|
|
78
|
+
*/
|
|
79
|
+
private isRateLimitError;
|
|
80
|
+
/**
|
|
81
|
+
* Check if error should not be retried (auth errors, not found, etc.)
|
|
82
|
+
*/
|
|
83
|
+
private isNonRetryableError;
|
|
84
|
+
/**
|
|
85
|
+
* Retry wrapper with exponential backoff
|
|
86
|
+
*/
|
|
87
|
+
private withRetry;
|
|
88
|
+
/**
|
|
89
|
+
* Sleep utility
|
|
90
|
+
*/
|
|
91
|
+
private sleep;
|
|
92
|
+
/**
|
|
93
|
+
* Group results by specified criteria
|
|
94
|
+
*/
|
|
95
|
+
private groupResults;
|
|
96
|
+
/**
|
|
97
|
+
* Get severity group based on score
|
|
98
|
+
*/
|
|
99
|
+
private getSeverityGroup;
|
|
100
|
+
/**
|
|
101
|
+
* Get emoji for check type
|
|
102
|
+
*/
|
|
103
|
+
private getCheckTypeEmoji;
|
|
104
|
+
/**
|
|
105
|
+
* Format group title with score and issue count
|
|
106
|
+
*/
|
|
107
|
+
private formatGroupTitle;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=github-comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-comments.d.ts","sourceRoot":"","sources":["../src/github-comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAc;gBAErB,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAWhE;;OAEG;IACU,gBAAgB,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA6B1B;;OAEG;IACU,qBAAqB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,OAAO,CAAC;IAuDnB;;OAEG;IACI,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM;IAYpF;;OAEG;IACI,wBAAwB,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAe,GAC1B,MAAM;IAUT;;OAEG;IACI,oBAAoB,CACzB,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5F,OAAO,GAAE,OAAO,GAAG,UAAoB,GACtC,MAAM;IAkBT;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKpD;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;YACW,SAAS;IAmCvB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAIzB"}
|