@probelabs/visor 0.1.20 → 0.1.22
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/dist/action-cli-bridge.d.ts +0 -1
- package/dist/action-cli-bridge.d.ts.map +1 -1
- package/dist/ai-review-service.d.ts +0 -1
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/check-execution-engine.d.ts +0 -1
- package/dist/check-execution-engine.d.ts.map +1 -1
- package/dist/cli-main.d.ts +0 -2
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/commands.d.ts +0 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/dependency-resolver.d.ts +0 -1
- package/dist/dependency-resolver.d.ts.map +1 -1
- package/dist/event-mapper.d.ts +0 -1
- package/dist/event-mapper.d.ts.map +1 -1
- package/dist/failure-condition-evaluator.d.ts +0 -1
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/git-repository-analyzer.d.ts +0 -1
- package/dist/git-repository-analyzer.d.ts.map +1 -1
- package/dist/github-check-service.d.ts +0 -1
- package/dist/github-check-service.d.ts.map +1 -1
- package/dist/github-comments.d.ts +0 -1
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +127709 -805
- package/dist/output-formatters.d.ts +0 -1
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/pr-analyzer.d.ts +0 -1
- package/dist/pr-analyzer.d.ts.map +1 -1
- package/dist/pr-detector.d.ts +0 -1
- package/dist/pr-detector.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/noop-check-provider.d.ts.map +1 -1
- package/dist/providers/tool-check-provider.d.ts.map +1 -1
- package/dist/providers/webhook-check-provider.d.ts.map +1 -1
- package/dist/reviewer.d.ts +0 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/session-registry.d.ts +0 -1
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/env-resolver.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/action-cli-bridge.js +0 -387
- package/dist/action-cli-bridge.js.map +0 -1
- package/dist/ai-review-service.js +0 -854
- package/dist/ai-review-service.js.map +0 -1
- package/dist/check-execution-engine.js +0 -1720
- package/dist/check-execution-engine.js.map +0 -1
- package/dist/cli-main.js +0 -249
- package/dist/cli-main.js.map +0 -1
- package/dist/cli.js +0 -241
- package/dist/cli.js.map +0 -1
- package/dist/commands.js +0 -53
- package/dist/commands.js.map +0 -1
- package/dist/config.js +0 -437
- package/dist/config.js.map +0 -1
- package/dist/dependency-resolver.js +0 -163
- package/dist/dependency-resolver.js.map +0 -1
- package/dist/event-mapper.js +0 -316
- package/dist/event-mapper.js.map +0 -1
- package/dist/failure-condition-evaluator.js +0 -481
- package/dist/failure-condition-evaluator.js.map +0 -1
- package/dist/git-repository-analyzer.js +0 -285
- package/dist/git-repository-analyzer.js.map +0 -1
- package/dist/github-check-service.js +0 -369
- package/dist/github-check-service.js.map +0 -1
- package/dist/github-comments.js +0 -289
- package/dist/github-comments.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/output-formatters.js +0 -624
- package/dist/output-formatters.js.map +0 -1
- package/dist/pr-analyzer.js +0 -195
- package/dist/pr-analyzer.js.map +0 -1
- package/dist/pr-detector.js +0 -357
- package/dist/pr-detector.js.map +0 -1
- package/dist/providers/ai-check-provider.js +0 -437
- package/dist/providers/ai-check-provider.js.map +0 -1
- package/dist/providers/check-provider-registry.js +0 -138
- package/dist/providers/check-provider-registry.js.map +0 -1
- package/dist/providers/check-provider.interface.js +0 -11
- package/dist/providers/check-provider.interface.js.map +0 -1
- package/dist/providers/index.js +0 -19
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/noop-check-provider.js +0 -55
- package/dist/providers/noop-check-provider.js.map +0 -1
- package/dist/providers/tool-check-provider.js +0 -174
- package/dist/providers/tool-check-provider.js.map +0 -1
- package/dist/providers/webhook-check-provider.js +0 -173
- package/dist/providers/webhook-check-provider.js.map +0 -1
- package/dist/reviewer.js +0 -260
- package/dist/reviewer.js.map +0 -1
- package/dist/session-registry.js +0 -67
- package/dist/session-registry.js.map +0 -1
- package/dist/types/cli.js +0 -3
- package/dist/types/cli.js.map +0 -1
- package/dist/types/config.js +0 -6
- package/dist/types/config.js.map +0 -1
- package/dist/utils/env-resolver.js +0 -130
- package/dist/utils/env-resolver.js.map +0 -1
package/dist/pr-analyzer.js
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PRAnalyzer = void 0;
|
|
4
|
-
class PRAnalyzer {
|
|
5
|
-
octokit;
|
|
6
|
-
maxRetries;
|
|
7
|
-
constructor(octokit, maxRetries = 3) {
|
|
8
|
-
this.octokit = octokit;
|
|
9
|
-
this.maxRetries = maxRetries;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Fetch commit diff for incremental analysis
|
|
13
|
-
*/
|
|
14
|
-
async fetchCommitDiff(owner, repo, commitSha) {
|
|
15
|
-
try {
|
|
16
|
-
const { data: commit } = await this.withRetry(() => this.octokit.rest.repos.getCommit({
|
|
17
|
-
owner,
|
|
18
|
-
repo,
|
|
19
|
-
ref: commitSha,
|
|
20
|
-
}));
|
|
21
|
-
// Extract patches from all files in the commit
|
|
22
|
-
const patches = commit.files
|
|
23
|
-
?.filter(file => file.patch)
|
|
24
|
-
.map(file => `--- ${file.filename}\n${file.patch}`)
|
|
25
|
-
.join('\n\n') || '';
|
|
26
|
-
return patches;
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
console.warn(`Failed to fetch commit diff for ${commitSha}:`, error);
|
|
30
|
-
return '';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Generate unified diff for all PR files
|
|
35
|
-
*/
|
|
36
|
-
generateFullDiff(files) {
|
|
37
|
-
return files
|
|
38
|
-
.filter(file => file.patch)
|
|
39
|
-
.map(file => `--- ${file.filename}\n${file.patch}`)
|
|
40
|
-
.join('\n\n');
|
|
41
|
-
}
|
|
42
|
-
async fetchPRDiff(owner, repo, prNumber, commitSha, eventType) {
|
|
43
|
-
const [prData, filesData] = await Promise.all([
|
|
44
|
-
this.withRetry(() => this.octokit.rest.pulls.get({
|
|
45
|
-
owner,
|
|
46
|
-
repo,
|
|
47
|
-
pull_number: prNumber,
|
|
48
|
-
})),
|
|
49
|
-
this.withRetry(() => this.octokit.rest.pulls.listFiles({
|
|
50
|
-
owner,
|
|
51
|
-
repo,
|
|
52
|
-
pull_number: prNumber,
|
|
53
|
-
})),
|
|
54
|
-
]);
|
|
55
|
-
const pr = prData?.data;
|
|
56
|
-
const files = filesData?.data || [];
|
|
57
|
-
// Handle missing or malformed PR data gracefully
|
|
58
|
-
if (!pr) {
|
|
59
|
-
throw new Error('Invalid or missing pull request data');
|
|
60
|
-
}
|
|
61
|
-
// Validate critical fields and provide defaults for missing data
|
|
62
|
-
const title = typeof pr.title === 'string' ? pr.title : pr.title ? String(pr.title) : 'MISSING';
|
|
63
|
-
const body = typeof pr.body === 'string' ? pr.body : pr.body ? String(pr.body) : '';
|
|
64
|
-
const author = pr.user && typeof pr.user === 'object' && pr.user.login
|
|
65
|
-
? typeof pr.user.login === 'string'
|
|
66
|
-
? pr.user.login
|
|
67
|
-
: String(pr.user.login)
|
|
68
|
-
: 'unknown';
|
|
69
|
-
const base = pr.base && typeof pr.base === 'object' && pr.base.ref
|
|
70
|
-
? typeof pr.base.ref === 'string'
|
|
71
|
-
? pr.base.ref
|
|
72
|
-
: String(pr.base.ref)
|
|
73
|
-
: 'main';
|
|
74
|
-
const head = pr.head && typeof pr.head === 'object' && pr.head.ref
|
|
75
|
-
? typeof pr.head.ref === 'string'
|
|
76
|
-
? pr.head.ref
|
|
77
|
-
: String(pr.head.ref)
|
|
78
|
-
: 'feature';
|
|
79
|
-
// Filter out malformed files and handle invalid data types
|
|
80
|
-
const validFiles = files
|
|
81
|
-
? files
|
|
82
|
-
.filter(file => file && typeof file === 'object' && file.filename)
|
|
83
|
-
.map(file => ({
|
|
84
|
-
filename: typeof file.filename === 'string'
|
|
85
|
-
? file.filename
|
|
86
|
-
: String(file.filename || 'unknown'),
|
|
87
|
-
additions: typeof file.additions === 'number' ? Math.max(0, file.additions) : 0,
|
|
88
|
-
deletions: typeof file.deletions === 'number' ? Math.max(0, file.deletions) : 0,
|
|
89
|
-
changes: typeof file.changes === 'number' ? Math.max(0, file.changes) : 0,
|
|
90
|
-
patch: typeof file.patch === 'string' ? file.patch : undefined,
|
|
91
|
-
status: (['added', 'removed', 'modified', 'renamed'].includes(file.status)
|
|
92
|
-
? file.status
|
|
93
|
-
: 'modified'),
|
|
94
|
-
}))
|
|
95
|
-
.filter(file => file.filename.length > 0) // Remove files with empty names
|
|
96
|
-
: [];
|
|
97
|
-
const prInfo = {
|
|
98
|
-
number: typeof pr.number === 'number' ? pr.number : parseInt(String(pr.number || 1), 10),
|
|
99
|
-
title,
|
|
100
|
-
body,
|
|
101
|
-
author,
|
|
102
|
-
base,
|
|
103
|
-
head,
|
|
104
|
-
files: validFiles,
|
|
105
|
-
totalAdditions: validFiles.reduce((sum, file) => sum + file.additions, 0),
|
|
106
|
-
totalDeletions: validFiles.reduce((sum, file) => sum + file.deletions, 0),
|
|
107
|
-
fullDiff: this.generateFullDiff(validFiles),
|
|
108
|
-
eventType,
|
|
109
|
-
};
|
|
110
|
-
// Add commit diff for incremental analysis
|
|
111
|
-
if (commitSha) {
|
|
112
|
-
console.log(`🔧 Fetching incremental diff for commit: ${commitSha}`);
|
|
113
|
-
prInfo.commitDiff = await this.fetchCommitDiff(owner, repo, commitSha);
|
|
114
|
-
prInfo.isIncremental = true;
|
|
115
|
-
if (!prInfo.commitDiff || prInfo.commitDiff.length === 0) {
|
|
116
|
-
console.warn(`⚠️ No commit diff retrieved for ${commitSha}, will use full diff as fallback`);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
console.log(`✅ Incremental diff retrieved (${prInfo.commitDiff.length} chars)`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
prInfo.isIncremental = false;
|
|
124
|
-
}
|
|
125
|
-
return prInfo;
|
|
126
|
-
}
|
|
127
|
-
async fetchPRComments(owner, repo, prNumber) {
|
|
128
|
-
const { data: comments } = await this.withRetry(() => this.octokit.rest.issues.listComments({
|
|
129
|
-
owner,
|
|
130
|
-
repo,
|
|
131
|
-
issue_number: prNumber,
|
|
132
|
-
}));
|
|
133
|
-
return comments.map(comment => ({
|
|
134
|
-
id: comment.id,
|
|
135
|
-
author: comment.user?.login || 'unknown',
|
|
136
|
-
body: comment.body || '',
|
|
137
|
-
createdAt: comment.created_at,
|
|
138
|
-
updatedAt: comment.updated_at,
|
|
139
|
-
}));
|
|
140
|
-
}
|
|
141
|
-
async withRetry(operation) {
|
|
142
|
-
let lastError = new Error('Unknown error');
|
|
143
|
-
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
144
|
-
try {
|
|
145
|
-
return await operation();
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
// Preserve the original error object if possible
|
|
149
|
-
if (error instanceof Error) {
|
|
150
|
-
lastError = error;
|
|
151
|
-
}
|
|
152
|
-
else if (typeof error === 'object' && error !== null) {
|
|
153
|
-
// For objects like {code: 'ETIMEDOUT', message: 'Network timeout'}
|
|
154
|
-
const errorObj = error;
|
|
155
|
-
const message = errorObj.message || errorObj.code || 'Unknown error';
|
|
156
|
-
lastError = new Error(String(message));
|
|
157
|
-
// Preserve important properties
|
|
158
|
-
Object.assign(lastError, error);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
lastError = new Error(String(error));
|
|
162
|
-
}
|
|
163
|
-
// Don't retry on the last attempt
|
|
164
|
-
if (attempt === this.maxRetries) {
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
// Check if this is a retryable error
|
|
168
|
-
if (this.isRetryableError(error)) {
|
|
169
|
-
const delay = Math.min(1000 * Math.pow(2, attempt), 5000); // Exponential backoff, max 5s
|
|
170
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
// Non-retryable error, fail immediately with original error
|
|
174
|
-
throw error;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
throw lastError;
|
|
179
|
-
}
|
|
180
|
-
isRetryableError(error) {
|
|
181
|
-
// Retry on network timeouts, connection errors, and temporary server errors
|
|
182
|
-
const retryableErrors = ['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN'];
|
|
183
|
-
const retryableStatuses = [408, 429, 500, 502, 503, 504];
|
|
184
|
-
// Type guard for error objects
|
|
185
|
-
if (typeof error !== 'object' || error === null) {
|
|
186
|
-
return false;
|
|
187
|
-
}
|
|
188
|
-
const err = error;
|
|
189
|
-
return ((err.code !== undefined && retryableErrors.includes(err.code)) ||
|
|
190
|
-
(err.status !== undefined && retryableStatuses.includes(err.status)) ||
|
|
191
|
-
(err.response?.status !== undefined && retryableStatuses.includes(err.response.status)));
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
exports.PRAnalyzer = PRAnalyzer;
|
|
195
|
-
//# sourceMappingURL=pr-analyzer.js.map
|
package/dist/pr-analyzer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pr-analyzer.js","sourceRoot":"","sources":["../src/pr-analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/pr-detector.js
DELETED
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PRDetector = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Robust PR detection utility that works across all GitHub event types
|
|
6
|
-
*/
|
|
7
|
-
class PRDetector {
|
|
8
|
-
octokit;
|
|
9
|
-
debug;
|
|
10
|
-
constructor(octokit, debug = false) {
|
|
11
|
-
this.octokit = octokit;
|
|
12
|
-
this.debug = debug;
|
|
13
|
-
}
|
|
14
|
-
log(message, ...args) {
|
|
15
|
-
if (this.debug) {
|
|
16
|
-
console.error(`[PR Detector] ${message}`, ...args);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Detect PR number from GitHub context with comprehensive fallback strategies
|
|
21
|
-
*/
|
|
22
|
-
async detectPRNumber(context, owner, repo) {
|
|
23
|
-
const repoOwner = owner || context.repository?.owner.login;
|
|
24
|
-
const repoName = repo || context.repository?.name;
|
|
25
|
-
if (!repoOwner || !repoName) {
|
|
26
|
-
this.log('Missing repository information');
|
|
27
|
-
return {
|
|
28
|
-
prNumber: null,
|
|
29
|
-
confidence: 'low',
|
|
30
|
-
source: 'direct',
|
|
31
|
-
details: 'Missing repository owner or name',
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
this.log(`Detecting PR for event: ${context.event_name} in ${repoOwner}/${repoName}`);
|
|
35
|
-
try {
|
|
36
|
-
// Strategy 1: Direct PR event detection
|
|
37
|
-
const directResult = this.detectFromDirectPREvent(context);
|
|
38
|
-
if (directResult.prNumber) {
|
|
39
|
-
this.log(`Found PR via direct event: #${directResult.prNumber}`);
|
|
40
|
-
return directResult;
|
|
41
|
-
}
|
|
42
|
-
// Strategy 2: Issue comment PR detection
|
|
43
|
-
const commentResult = this.detectFromIssueComment(context);
|
|
44
|
-
if (commentResult.prNumber) {
|
|
45
|
-
this.log(`Found PR via issue comment: #${commentResult.prNumber}`);
|
|
46
|
-
return commentResult;
|
|
47
|
-
}
|
|
48
|
-
// Strategy 3: Push event PR detection (query GitHub API)
|
|
49
|
-
if (context.event_name === 'push') {
|
|
50
|
-
const pushResult = await this.detectFromPushEvent(context, repoOwner, repoName);
|
|
51
|
-
if (pushResult.prNumber) {
|
|
52
|
-
this.log(`Found PR via push event API query: #${pushResult.prNumber}`);
|
|
53
|
-
return pushResult;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Strategy 4: Branch-based PR search
|
|
57
|
-
const branchResult = await this.detectFromBranch(context, repoOwner, repoName);
|
|
58
|
-
if (branchResult.prNumber) {
|
|
59
|
-
this.log(`Found PR via branch search: #${branchResult.prNumber}`);
|
|
60
|
-
return branchResult;
|
|
61
|
-
}
|
|
62
|
-
// Strategy 5: Commit-based PR search
|
|
63
|
-
const commitResult = await this.detectFromCommit(context, repoOwner, repoName);
|
|
64
|
-
if (commitResult.prNumber) {
|
|
65
|
-
this.log(`Found PR via commit search: #${commitResult.prNumber}`);
|
|
66
|
-
return commitResult;
|
|
67
|
-
}
|
|
68
|
-
this.log('No PR found with any detection strategy');
|
|
69
|
-
return {
|
|
70
|
-
prNumber: null,
|
|
71
|
-
confidence: 'low',
|
|
72
|
-
source: 'direct',
|
|
73
|
-
details: `No PR found for ${context.event_name} event`,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
this.log('Error during PR detection:', error);
|
|
78
|
-
return {
|
|
79
|
-
prNumber: null,
|
|
80
|
-
confidence: 'low',
|
|
81
|
-
source: 'direct',
|
|
82
|
-
details: error instanceof Error ? error.message : 'Unknown error',
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Strategy 1: Detect PR from direct PR events
|
|
88
|
-
*/
|
|
89
|
-
detectFromDirectPREvent(context) {
|
|
90
|
-
const prNumber = context.event?.pull_request?.number;
|
|
91
|
-
if (prNumber) {
|
|
92
|
-
return {
|
|
93
|
-
prNumber,
|
|
94
|
-
confidence: 'high',
|
|
95
|
-
source: 'direct',
|
|
96
|
-
details: `Direct PR event: ${context.event_name}`,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
return { prNumber: null, confidence: 'low', source: 'direct' };
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Strategy 2: Detect PR from issue comment events
|
|
103
|
-
*/
|
|
104
|
-
detectFromIssueComment(context) {
|
|
105
|
-
if (context.event_name === 'issue_comment') {
|
|
106
|
-
const issue = context.event?.issue;
|
|
107
|
-
// Check if this issue is actually a PR (issues with pull_request key are PRs)
|
|
108
|
-
if (issue?.pull_request && issue.number) {
|
|
109
|
-
return {
|
|
110
|
-
prNumber: issue.number,
|
|
111
|
-
confidence: 'high',
|
|
112
|
-
source: 'comment',
|
|
113
|
-
details: 'Issue comment on PR',
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return { prNumber: null, confidence: 'low', source: 'comment' };
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Strategy 3: Detect PR from push events by querying associated PRs
|
|
121
|
-
*/
|
|
122
|
-
async detectFromPushEvent(context, owner, repo) {
|
|
123
|
-
if (context.event_name !== 'push') {
|
|
124
|
-
return { prNumber: null, confidence: 'low', source: 'api_query' };
|
|
125
|
-
}
|
|
126
|
-
const ref = context.event?.ref;
|
|
127
|
-
const commits = context.event?.commits || [];
|
|
128
|
-
const headCommit = context.event?.head_commit;
|
|
129
|
-
// Extract branch name from ref (refs/heads/branch-name)
|
|
130
|
-
const branchName = ref?.replace('refs/heads/', '');
|
|
131
|
-
this.log(`Push event - Branch: ${branchName}, Commits: ${commits.length}`);
|
|
132
|
-
// First, try to find PRs for the specific branch
|
|
133
|
-
if (branchName && branchName !== 'main' && branchName !== 'master') {
|
|
134
|
-
try {
|
|
135
|
-
const prs = await this.octokit.rest.pulls.list({
|
|
136
|
-
owner,
|
|
137
|
-
repo,
|
|
138
|
-
head: `${owner}:${branchName}`,
|
|
139
|
-
state: 'open',
|
|
140
|
-
});
|
|
141
|
-
if (prs.data.length > 0) {
|
|
142
|
-
return {
|
|
143
|
-
prNumber: prs.data[0].number,
|
|
144
|
-
confidence: 'high',
|
|
145
|
-
source: 'api_query',
|
|
146
|
-
details: `Found open PR for branch ${branchName}`,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
this.log(`Error querying PRs for branch ${branchName}:`, error);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
// If head commit exists, search for PRs containing that commit
|
|
155
|
-
if (headCommit?.id) {
|
|
156
|
-
const commitResult = await this.searchPRsByCommit(owner, repo, headCommit.id);
|
|
157
|
-
if (commitResult.prNumber) {
|
|
158
|
-
return {
|
|
159
|
-
...commitResult,
|
|
160
|
-
source: 'api_query',
|
|
161
|
-
details: `Found PR containing head commit ${headCommit.id}`,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// If we have multiple commits, try the most recent ones
|
|
166
|
-
if (commits.length > 0) {
|
|
167
|
-
for (const commit of commits.slice(-3)) {
|
|
168
|
-
// Check last 3 commits
|
|
169
|
-
if (commit.id) {
|
|
170
|
-
const commitResult = await this.searchPRsByCommit(owner, repo, commit.id);
|
|
171
|
-
if (commitResult.prNumber) {
|
|
172
|
-
return {
|
|
173
|
-
...commitResult,
|
|
174
|
-
source: 'api_query',
|
|
175
|
-
details: `Found PR containing commit ${commit.id}`,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return { prNumber: null, confidence: 'low', source: 'api_query' };
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Strategy 4: Detect PR by searching current branch
|
|
185
|
-
*/
|
|
186
|
-
async detectFromBranch(context, owner, repo) {
|
|
187
|
-
try {
|
|
188
|
-
// Try to get current branch from various sources
|
|
189
|
-
let branchName = null;
|
|
190
|
-
// From push event ref
|
|
191
|
-
if (context.event?.ref) {
|
|
192
|
-
branchName = context.event.ref.replace('refs/heads/', '');
|
|
193
|
-
}
|
|
194
|
-
// Try to get current branch from environment (GitHub Actions sets this)
|
|
195
|
-
if (!branchName && process.env.GITHUB_HEAD_REF) {
|
|
196
|
-
branchName = process.env.GITHUB_HEAD_REF;
|
|
197
|
-
}
|
|
198
|
-
if (!branchName && process.env.GITHUB_REF_NAME) {
|
|
199
|
-
branchName = process.env.GITHUB_REF_NAME;
|
|
200
|
-
}
|
|
201
|
-
if (!branchName) {
|
|
202
|
-
this.log('No branch name found for branch-based search');
|
|
203
|
-
return { prNumber: null, confidence: 'low', source: 'branch_search' };
|
|
204
|
-
}
|
|
205
|
-
this.log(`Searching for PRs on branch: ${branchName}`);
|
|
206
|
-
// Search for open PRs from this branch
|
|
207
|
-
const prs = await this.octokit.rest.pulls.list({
|
|
208
|
-
owner,
|
|
209
|
-
repo,
|
|
210
|
-
head: `${owner}:${branchName}`,
|
|
211
|
-
state: 'open',
|
|
212
|
-
});
|
|
213
|
-
if (prs.data.length > 0) {
|
|
214
|
-
return {
|
|
215
|
-
prNumber: prs.data[0].number,
|
|
216
|
-
confidence: 'medium',
|
|
217
|
-
source: 'branch_search',
|
|
218
|
-
details: `Found open PR from branch ${branchName}`,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
// Also try searching closed PRs (recently merged)
|
|
222
|
-
const closedPrs = await this.octokit.rest.pulls.list({
|
|
223
|
-
owner,
|
|
224
|
-
repo,
|
|
225
|
-
head: `${owner}:${branchName}`,
|
|
226
|
-
state: 'closed',
|
|
227
|
-
sort: 'updated',
|
|
228
|
-
direction: 'desc',
|
|
229
|
-
per_page: 5,
|
|
230
|
-
});
|
|
231
|
-
if (closedPrs.data.length > 0) {
|
|
232
|
-
const recentPr = closedPrs.data[0];
|
|
233
|
-
return {
|
|
234
|
-
prNumber: recentPr.number,
|
|
235
|
-
confidence: 'medium',
|
|
236
|
-
source: 'branch_search',
|
|
237
|
-
details: `Found recently closed PR from branch ${branchName}`,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
return { prNumber: null, confidence: 'low', source: 'branch_search' };
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
this.log('Error in branch-based PR search:', error);
|
|
244
|
-
return {
|
|
245
|
-
prNumber: null,
|
|
246
|
-
confidence: 'low',
|
|
247
|
-
source: 'branch_search',
|
|
248
|
-
details: error instanceof Error ? error.message : 'Unknown error',
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Strategy 5: Detect PR by searching for commits
|
|
254
|
-
*/
|
|
255
|
-
async detectFromCommit(context, owner, repo) {
|
|
256
|
-
// Try to get commit SHA from various sources
|
|
257
|
-
let commitSha = null;
|
|
258
|
-
if (context.event?.head_commit?.id) {
|
|
259
|
-
commitSha = context.event.head_commit.id;
|
|
260
|
-
}
|
|
261
|
-
else if (process.env.GITHUB_SHA) {
|
|
262
|
-
commitSha = process.env.GITHUB_SHA;
|
|
263
|
-
}
|
|
264
|
-
if (!commitSha) {
|
|
265
|
-
this.log('No commit SHA found for commit-based search');
|
|
266
|
-
return { prNumber: null, confidence: 'low', source: 'commit_search' };
|
|
267
|
-
}
|
|
268
|
-
this.log(`Searching for PRs containing commit: ${commitSha}`);
|
|
269
|
-
return await this.searchPRsByCommit(owner, repo, commitSha);
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Search for PRs containing a specific commit
|
|
273
|
-
*/
|
|
274
|
-
async searchPRsByCommit(owner, repo, commitSha) {
|
|
275
|
-
try {
|
|
276
|
-
// GitHub's search API can find PRs containing specific commits
|
|
277
|
-
const searchQuery = `repo:${owner}/${repo} type:pr ${commitSha}`;
|
|
278
|
-
this.log(`Searching with query: ${searchQuery}`);
|
|
279
|
-
const searchResults = await this.octokit.rest.search.issuesAndPullRequests({
|
|
280
|
-
q: searchQuery,
|
|
281
|
-
sort: 'updated',
|
|
282
|
-
order: 'desc',
|
|
283
|
-
per_page: 10,
|
|
284
|
-
});
|
|
285
|
-
if (searchResults.data.items.length > 0) {
|
|
286
|
-
// Find the most recent PR that contains this commit
|
|
287
|
-
for (const item of searchResults.data.items) {
|
|
288
|
-
if (item.pull_request) {
|
|
289
|
-
return {
|
|
290
|
-
prNumber: item.number,
|
|
291
|
-
confidence: 'medium',
|
|
292
|
-
source: 'commit_search',
|
|
293
|
-
details: `Found PR via commit search for ${commitSha}`,
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Fallback: Get recent PRs and check if they contain the commit
|
|
299
|
-
const recentPrs = await this.octokit.rest.pulls.list({
|
|
300
|
-
owner,
|
|
301
|
-
repo,
|
|
302
|
-
state: 'all',
|
|
303
|
-
sort: 'updated',
|
|
304
|
-
direction: 'desc',
|
|
305
|
-
per_page: 20,
|
|
306
|
-
});
|
|
307
|
-
for (const pr of recentPrs.data) {
|
|
308
|
-
try {
|
|
309
|
-
// Check if this PR contains the commit
|
|
310
|
-
const commits = await this.octokit.rest.pulls.listCommits({
|
|
311
|
-
owner,
|
|
312
|
-
repo,
|
|
313
|
-
pull_number: pr.number,
|
|
314
|
-
});
|
|
315
|
-
const hasCommit = commits.data.some(commit => commit.sha === commitSha);
|
|
316
|
-
if (hasCommit) {
|
|
317
|
-
return {
|
|
318
|
-
prNumber: pr.number,
|
|
319
|
-
confidence: 'high',
|
|
320
|
-
source: 'commit_search',
|
|
321
|
-
details: `Found PR containing commit ${commitSha}`,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
catch (error) {
|
|
326
|
-
// Continue to next PR if we can't check commits
|
|
327
|
-
this.log(`Error checking commits for PR #${pr.number}:`, error);
|
|
328
|
-
continue;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
return { prNumber: null, confidence: 'low', source: 'commit_search' };
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
this.log('Error in commit-based PR search:', error);
|
|
335
|
-
return {
|
|
336
|
-
prNumber: null,
|
|
337
|
-
confidence: 'low',
|
|
338
|
-
source: 'commit_search',
|
|
339
|
-
details: error instanceof Error ? error.message : 'Unknown error',
|
|
340
|
-
};
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Get PR detection summary for debugging
|
|
345
|
-
*/
|
|
346
|
-
getDetectionStrategies() {
|
|
347
|
-
return [
|
|
348
|
-
'1. Direct PR event detection (pull_request events)',
|
|
349
|
-
'2. Issue comment PR detection (issue_comment events on PRs)',
|
|
350
|
-
'3. Push event PR detection (API queries for branch PRs)',
|
|
351
|
-
'4. Branch-based PR search (current branch PRs)',
|
|
352
|
-
'5. Commit-based PR search (PRs containing specific commits)',
|
|
353
|
-
];
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
exports.PRDetector = PRDetector;
|
|
357
|
-
//# sourceMappingURL=pr-detector.js.map
|
package/dist/pr-detector.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pr-detector.js","sourceRoot":"","sources":["../src/pr-detector.ts"],"names":[],"mappings":"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"}
|