@vibe-validate/cli 0.10.3 → 0.11.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 +70 -88
- package/dist/bin.js +51 -9
- package/dist/bin.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +5 -16
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/config.js +0 -15
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +83 -58
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-workflow.d.ts +2 -2
- package/dist/commands/generate-workflow.d.ts.map +1 -1
- package/dist/commands/generate-workflow.js +67 -21
- package/dist/commands/generate-workflow.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -109
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/state.d.ts.map +1 -1
- package/dist/commands/state.js +0 -5
- package/dist/commands/state.js.map +1 -1
- package/dist/commands/sync-check.d.ts.map +1 -1
- package/dist/commands/sync-check.js +5 -14
- package/dist/commands/sync-check.js.map +1 -1
- package/dist/commands/watch-pr.d.ts +6 -0
- package/dist/commands/watch-pr.d.ts.map +1 -0
- package/dist/commands/watch-pr.js +282 -0
- package/dist/commands/watch-pr.js.map +1 -0
- package/dist/schemas/watch-pr-schema.d.ts +261 -0
- package/dist/schemas/watch-pr-schema.d.ts.map +1 -0
- package/dist/schemas/watch-pr-schema.js +58 -0
- package/dist/schemas/watch-pr-schema.js.map +1 -0
- package/dist/scripts/generate-watch-pr-schema.d.ts +12 -0
- package/dist/scripts/generate-watch-pr-schema.d.ts.map +1 -0
- package/dist/scripts/generate-watch-pr-schema.js +35 -0
- package/dist/scripts/generate-watch-pr-schema.js.map +1 -0
- package/dist/services/ci-provider-registry.d.ts +38 -0
- package/dist/services/ci-provider-registry.d.ts.map +1 -0
- package/dist/services/ci-provider-registry.js +53 -0
- package/dist/services/ci-provider-registry.js.map +1 -0
- package/dist/services/ci-provider.d.ts +160 -0
- package/dist/services/ci-provider.d.ts.map +1 -0
- package/dist/services/ci-provider.js +11 -0
- package/dist/services/ci-provider.js.map +1 -0
- package/dist/services/ci-providers/github-actions.d.ts +40 -0
- package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
- package/dist/services/ci-providers/github-actions.js +305 -0
- package/dist/services/ci-providers/github-actions.js.map +1 -0
- package/dist/utils/check-validation.d.ts +1 -1
- package/dist/utils/check-validation.d.ts.map +1 -1
- package/dist/utils/check-validation.js +2 -2
- package/dist/utils/check-validation.js.map +1 -1
- package/dist/utils/config-loader.d.ts +15 -3
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +61 -17
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/context-detector.d.ts +1 -1
- package/dist/utils/context-detector.js +1 -1
- package/dist/utils/normalize-line-endings.d.ts +53 -0
- package/dist/utils/normalize-line-endings.d.ts.map +1 -0
- package/dist/utils/normalize-line-endings.js +57 -0
- package/dist/utils/normalize-line-endings.js.map +1 -0
- package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
- package/dist/utils/setup-checks/gitignore-check.js +3 -4
- package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
- package/dist/utils/template-discovery.d.ts +40 -0
- package/dist/utils/template-discovery.d.ts.map +1 -0
- package/dist/utils/template-discovery.js +136 -0
- package/dist/utils/template-discovery.js.map +1 -0
- package/package.json +9 -8
- package/watch-pr-result.schema.json +204 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-watch-pr-schema.js","sourceRoot":"","sources":["../../src/scripts/generate-watch-pr-schema.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,uBAAuB;AACvB,MAAM,UAAU,GAAG,eAAe,CAAC,mBAAmB,EAAE;IACtD,IAAI,EAAE,eAAe;IACrB,YAAY,EAAE,MAAM,EAAE,4CAA4C;CACnE,CAAC,CAAC;AAEH,eAAe;AACf,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,yCAAyC;IAClD,GAAG,EAAE,6FAA6F;IAClG,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EAAE,4DAA4D;IACzE,GAAG,UAAU;CACd,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;AACxE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAEvE,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CIProvider } from './ci-provider.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry for CI providers with auto-detection
|
|
4
|
+
*
|
|
5
|
+
* Manages available CI providers and provides auto-detection
|
|
6
|
+
* to determine which provider is usable in current context.
|
|
7
|
+
*
|
|
8
|
+
* Future providers can be added here:
|
|
9
|
+
* - GitLab CI
|
|
10
|
+
* - CircleCI
|
|
11
|
+
* - Jenkins
|
|
12
|
+
* - etc.
|
|
13
|
+
*/
|
|
14
|
+
export declare class CIProviderRegistry {
|
|
15
|
+
private providers;
|
|
16
|
+
/**
|
|
17
|
+
* Auto-detect which CI provider is available in current context
|
|
18
|
+
*
|
|
19
|
+
* Checks each registered provider in order until one reports availability.
|
|
20
|
+
*
|
|
21
|
+
* @returns First available provider, or null if none available
|
|
22
|
+
*/
|
|
23
|
+
detectProvider(): Promise<CIProvider | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Get specific provider by name
|
|
26
|
+
*
|
|
27
|
+
* @param name - Provider name (e.g., 'github-actions', 'gitlab-ci')
|
|
28
|
+
* @returns Provider instance if found, undefined otherwise
|
|
29
|
+
*/
|
|
30
|
+
getProvider(name: string): CIProvider | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Get all registered provider names
|
|
33
|
+
*
|
|
34
|
+
* @returns Array of provider names
|
|
35
|
+
*/
|
|
36
|
+
getProviderNames(): string[];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ci-provider-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-provider-registry.d.ts","sourceRoot":"","sources":["../../src/services/ci-provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAIf;IAEF;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IASlD;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjD;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,EAAE;CAG7B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { GitHubActionsProvider } from './ci-providers/github-actions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry for CI providers with auto-detection
|
|
4
|
+
*
|
|
5
|
+
* Manages available CI providers and provides auto-detection
|
|
6
|
+
* to determine which provider is usable in current context.
|
|
7
|
+
*
|
|
8
|
+
* Future providers can be added here:
|
|
9
|
+
* - GitLab CI
|
|
10
|
+
* - CircleCI
|
|
11
|
+
* - Jenkins
|
|
12
|
+
* - etc.
|
|
13
|
+
*/
|
|
14
|
+
export class CIProviderRegistry {
|
|
15
|
+
providers = [
|
|
16
|
+
new GitHubActionsProvider(),
|
|
17
|
+
// new GitLabCIProvider(),
|
|
18
|
+
// new CircleCIProvider(),
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Auto-detect which CI provider is available in current context
|
|
22
|
+
*
|
|
23
|
+
* Checks each registered provider in order until one reports availability.
|
|
24
|
+
*
|
|
25
|
+
* @returns First available provider, or null if none available
|
|
26
|
+
*/
|
|
27
|
+
async detectProvider() {
|
|
28
|
+
for (const provider of this.providers) {
|
|
29
|
+
if (await provider.isAvailable()) {
|
|
30
|
+
return provider;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get specific provider by name
|
|
37
|
+
*
|
|
38
|
+
* @param name - Provider name (e.g., 'github-actions', 'gitlab-ci')
|
|
39
|
+
* @returns Provider instance if found, undefined otherwise
|
|
40
|
+
*/
|
|
41
|
+
getProvider(name) {
|
|
42
|
+
return this.providers.find((p) => p.name === name);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all registered provider names
|
|
46
|
+
*
|
|
47
|
+
* @returns Array of provider names
|
|
48
|
+
*/
|
|
49
|
+
getProviderNames() {
|
|
50
|
+
return this.providers.map((p) => p.name);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=ci-provider-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-provider-registry.js","sourceRoot":"","sources":["../../src/services/ci-provider-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAkB;IACrB,SAAS,GAAiB;QAChC,IAAI,qBAAqB,EAAE;QAC3B,0BAA0B;QAC1B,0BAA0B;KAC3B,CAAC;IAEF;;;;;;OAMG;IACH,KAAK,CAAC,cAAc;QAClB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract CI provider interface for platform-agnostic PR/MR watching
|
|
3
|
+
*
|
|
4
|
+
* This allows vibe-validate to support multiple CI platforms:
|
|
5
|
+
* - GitHub Actions (initial implementation)
|
|
6
|
+
* - GitLab CI (future)
|
|
7
|
+
* - Jenkins (future)
|
|
8
|
+
* - CircleCI (future)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Pull/Merge Request information
|
|
12
|
+
*/
|
|
13
|
+
export interface PullRequest {
|
|
14
|
+
/** PR/MR number or ID */
|
|
15
|
+
id: number | string;
|
|
16
|
+
/** PR/MR title */
|
|
17
|
+
title: string;
|
|
18
|
+
/** URL to view PR/MR in browser */
|
|
19
|
+
url: string;
|
|
20
|
+
/** Source branch name */
|
|
21
|
+
branch: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Individual check/job result
|
|
25
|
+
*/
|
|
26
|
+
export interface CheckResult {
|
|
27
|
+
/** Unique identifier for this check/job */
|
|
28
|
+
id: string;
|
|
29
|
+
/** Human-readable name (e.g., "ubuntu-latest (Node 20)") */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Current execution status */
|
|
32
|
+
status: 'queued' | 'in_progress' | 'completed';
|
|
33
|
+
/** Final result (null if not completed) */
|
|
34
|
+
conclusion: 'success' | 'failure' | 'cancelled' | 'skipped' | 'neutral' | null;
|
|
35
|
+
/** Duration string (e.g., "2m 15s") */
|
|
36
|
+
duration?: string;
|
|
37
|
+
/** URL to view check details */
|
|
38
|
+
url?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Overall status of all checks for a PR/MR
|
|
42
|
+
*/
|
|
43
|
+
export interface CheckStatus {
|
|
44
|
+
/** Associated PR/MR */
|
|
45
|
+
pr: PullRequest;
|
|
46
|
+
/** Overall status across all checks */
|
|
47
|
+
status: 'pending' | 'in_progress' | 'completed';
|
|
48
|
+
/** Overall result (only meaningful when status is 'completed') */
|
|
49
|
+
result: 'success' | 'failure' | 'cancelled' | 'unknown';
|
|
50
|
+
/** Individual check results */
|
|
51
|
+
checks: CheckResult[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parsed contents of vibe-validate state file
|
|
55
|
+
*/
|
|
56
|
+
export interface StateFileContents {
|
|
57
|
+
/** Whether validation passed */
|
|
58
|
+
passed: boolean;
|
|
59
|
+
/** Timestamp of validation */
|
|
60
|
+
timestamp?: string;
|
|
61
|
+
/** Git tree hash */
|
|
62
|
+
treeHash?: string;
|
|
63
|
+
/** Name of step that failed */
|
|
64
|
+
failedStep?: string;
|
|
65
|
+
/** Command to re-run failed step */
|
|
66
|
+
rerunCommand?: string;
|
|
67
|
+
/** Output from failed step */
|
|
68
|
+
failedStepOutput?: string;
|
|
69
|
+
/** All phases (if available) */
|
|
70
|
+
phases?: Array<{
|
|
71
|
+
name: string;
|
|
72
|
+
passed: boolean;
|
|
73
|
+
durationSecs?: number;
|
|
74
|
+
output?: string;
|
|
75
|
+
steps?: Array<{
|
|
76
|
+
name: string;
|
|
77
|
+
passed: boolean;
|
|
78
|
+
durationSecs?: number;
|
|
79
|
+
output?: string;
|
|
80
|
+
}>;
|
|
81
|
+
}>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Detailed failure information including logs
|
|
85
|
+
*/
|
|
86
|
+
export interface FailureLogs {
|
|
87
|
+
/** ID of the failed check/run */
|
|
88
|
+
checkId: string;
|
|
89
|
+
/** Name of the failed check */
|
|
90
|
+
checkName: string;
|
|
91
|
+
/** Raw log output (may be very large) */
|
|
92
|
+
rawLogs: string;
|
|
93
|
+
/** Name of the step that failed */
|
|
94
|
+
failedStep?: string;
|
|
95
|
+
/** Concise error summary */
|
|
96
|
+
errorSummary?: string;
|
|
97
|
+
/** Parsed vibe-validate state file (if present) */
|
|
98
|
+
stateFile?: StateFileContents;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Abstract CI provider interface
|
|
102
|
+
*
|
|
103
|
+
* Implementations must support:
|
|
104
|
+
* - Detecting if the provider is available in current context
|
|
105
|
+
* - Finding PR/MR from current branch
|
|
106
|
+
* - Fetching check status
|
|
107
|
+
* - Fetching failure logs with error extraction
|
|
108
|
+
*/
|
|
109
|
+
export interface CIProvider {
|
|
110
|
+
/** Provider name (e.g., 'github-actions', 'gitlab-ci') */
|
|
111
|
+
readonly name: string;
|
|
112
|
+
/**
|
|
113
|
+
* Detect if this provider is available in current context
|
|
114
|
+
*
|
|
115
|
+
* Should check:
|
|
116
|
+
* - Required CLI tools (gh, glab, etc.)
|
|
117
|
+
* - Git remote matches provider (github.com, gitlab.com, etc.)
|
|
118
|
+
*
|
|
119
|
+
* @returns true if provider is available and usable
|
|
120
|
+
*/
|
|
121
|
+
isAvailable(): Promise<boolean>;
|
|
122
|
+
/**
|
|
123
|
+
* Detect PR/MR from current branch
|
|
124
|
+
*
|
|
125
|
+
* Uses provider CLI or API to find open PR/MR for current branch.
|
|
126
|
+
*
|
|
127
|
+
* @returns PR/MR info if found, null otherwise
|
|
128
|
+
*/
|
|
129
|
+
detectPullRequest(): Promise<PullRequest | null>;
|
|
130
|
+
/**
|
|
131
|
+
* Fetch current check status for a PR/MR
|
|
132
|
+
*
|
|
133
|
+
* @param _prId - PR/MR number or ID
|
|
134
|
+
* @returns Current status of all checks
|
|
135
|
+
*/
|
|
136
|
+
fetchCheckStatus(_prId: number | string): Promise<CheckStatus>;
|
|
137
|
+
/**
|
|
138
|
+
* Fetch detailed logs for a failed check
|
|
139
|
+
*
|
|
140
|
+
* Should attempt to:
|
|
141
|
+
* - Extract vibe-validate state file if present
|
|
142
|
+
* - Identify failed step
|
|
143
|
+
* - Provide concise error summary
|
|
144
|
+
*
|
|
145
|
+
* @param _checkId - Unique identifier for the check/run
|
|
146
|
+
* @returns Detailed failure information
|
|
147
|
+
*/
|
|
148
|
+
fetchFailureLogs(_checkId: string): Promise<FailureLogs>;
|
|
149
|
+
/**
|
|
150
|
+
* Extract vibe-validate state file from logs
|
|
151
|
+
*
|
|
152
|
+
* Looks for the state file display section in workflow logs.
|
|
153
|
+
* This is provider-specific as log formats differ.
|
|
154
|
+
*
|
|
155
|
+
* @param _logs - Raw log output
|
|
156
|
+
* @returns Parsed state file contents if found, null otherwise
|
|
157
|
+
*/
|
|
158
|
+
extractStateFile(_logs: string): StateFileContents | null;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=ci-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-provider.d.ts","sourceRoot":"","sources":["../../src/services/ci-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract CI provider interface for platform-agnostic PR/MR watching
|
|
3
|
+
*
|
|
4
|
+
* This allows vibe-validate to support multiple CI platforms:
|
|
5
|
+
* - GitHub Actions (initial implementation)
|
|
6
|
+
* - GitLab CI (future)
|
|
7
|
+
* - Jenkins (future)
|
|
8
|
+
* - CircleCI (future)
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ci-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-provider.js","sourceRoot":"","sources":["../../src/services/ci-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { CIProvider, PullRequest, CheckStatus, FailureLogs, StateFileContents } from '../ci-provider.js';
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Actions CI provider implementation
|
|
4
|
+
*
|
|
5
|
+
* Uses GitHub CLI (gh) to interact with GitHub API.
|
|
6
|
+
* Requires:
|
|
7
|
+
* - gh CLI installed and authenticated
|
|
8
|
+
* - Git repository with github.com remote
|
|
9
|
+
*/
|
|
10
|
+
export declare class GitHubActionsProvider implements CIProvider {
|
|
11
|
+
readonly name = "github-actions";
|
|
12
|
+
isAvailable(): Promise<boolean>;
|
|
13
|
+
detectPullRequest(): Promise<PullRequest | null>;
|
|
14
|
+
fetchCheckStatus(prId: number | string): Promise<CheckStatus>;
|
|
15
|
+
fetchFailureLogs(runId: string): Promise<FailureLogs>;
|
|
16
|
+
extractStateFile(logs: string): StateFileContents | null;
|
|
17
|
+
/**
|
|
18
|
+
* Transform GitHub check format to common CheckResult format
|
|
19
|
+
*/
|
|
20
|
+
private transformCheck;
|
|
21
|
+
/**
|
|
22
|
+
* Determine overall status from individual checks
|
|
23
|
+
*/
|
|
24
|
+
private determineOverallStatus;
|
|
25
|
+
/**
|
|
26
|
+
* Determine overall result from individual checks
|
|
27
|
+
*/
|
|
28
|
+
private determineOverallResult;
|
|
29
|
+
/**
|
|
30
|
+
* Extract failed step name from GitHub Actions logs
|
|
31
|
+
*/
|
|
32
|
+
private extractFailedStep;
|
|
33
|
+
/**
|
|
34
|
+
* Extract concise error summary from logs
|
|
35
|
+
*
|
|
36
|
+
* Prioritizes vibe-validate state file extraction for most actionable errors.
|
|
37
|
+
*/
|
|
38
|
+
private extractErrorSummary;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=github-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-actions.d.ts","sourceRoot":"","sources":["../../../src/services/ci-providers/github-actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,WAAW,EAEX,WAAW,EACX,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,UAAU;IACtD,QAAQ,CAAC,IAAI,oBAAoB;IAE3B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAa/B,iBAAiB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoBhD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyB7D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkC3D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IA+DxD;;OAEG;IACH,OAAO,CAAC,cAAc;IAkEtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAkC5B"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { parse as parseYaml } from 'yaml';
|
|
3
|
+
/**
|
|
4
|
+
* GitHub Actions CI provider implementation
|
|
5
|
+
*
|
|
6
|
+
* Uses GitHub CLI (gh) to interact with GitHub API.
|
|
7
|
+
* Requires:
|
|
8
|
+
* - gh CLI installed and authenticated
|
|
9
|
+
* - Git repository with github.com remote
|
|
10
|
+
*/
|
|
11
|
+
export class GitHubActionsProvider {
|
|
12
|
+
name = 'github-actions';
|
|
13
|
+
async isAvailable() {
|
|
14
|
+
try {
|
|
15
|
+
// Check if gh CLI is available
|
|
16
|
+
execSync('gh --version', { stdio: 'ignore' });
|
|
17
|
+
// Check if we're in a GitHub repo
|
|
18
|
+
const remote = execSync('git remote get-url origin', { encoding: 'utf8' });
|
|
19
|
+
return remote.includes('github.com');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async detectPullRequest() {
|
|
26
|
+
try {
|
|
27
|
+
const prData = JSON.parse(execSync('gh pr view --json number,title,url,headRefName', {
|
|
28
|
+
encoding: 'utf8',
|
|
29
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
30
|
+
}));
|
|
31
|
+
return {
|
|
32
|
+
id: prData.number,
|
|
33
|
+
title: prData.title,
|
|
34
|
+
url: prData.url,
|
|
35
|
+
branch: prData.headRefName,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async fetchCheckStatus(prId) {
|
|
43
|
+
const data = JSON.parse(execSync(`gh pr view ${prId} --json number,title,url,statusCheckRollup,headRefName`, {
|
|
44
|
+
encoding: 'utf8',
|
|
45
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
46
|
+
}));
|
|
47
|
+
const checks = (data.statusCheckRollup || []).map((check) => this.transformCheck(check));
|
|
48
|
+
return {
|
|
49
|
+
pr: {
|
|
50
|
+
id: data.number,
|
|
51
|
+
title: data.title,
|
|
52
|
+
url: data.url,
|
|
53
|
+
branch: data.headRefName || '',
|
|
54
|
+
},
|
|
55
|
+
status: this.determineOverallStatus(checks),
|
|
56
|
+
result: this.determineOverallResult(checks),
|
|
57
|
+
checks,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async fetchFailureLogs(runId) {
|
|
61
|
+
// Get run details to find the check name
|
|
62
|
+
let checkName = 'Unknown';
|
|
63
|
+
try {
|
|
64
|
+
const runData = JSON.parse(execSync(`gh run view ${runId} --json name`, {
|
|
65
|
+
encoding: 'utf8',
|
|
66
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
67
|
+
}));
|
|
68
|
+
checkName = runData.name || checkName;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Ignore error, use default name
|
|
72
|
+
}
|
|
73
|
+
// Fetch full logs (includes "Display validation state on failure" step)
|
|
74
|
+
const logs = execSync(`gh run view ${runId} --log`, {
|
|
75
|
+
encoding: 'utf8',
|
|
76
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
77
|
+
maxBuffer: 50 * 1024 * 1024, // 50MB buffer to handle large logs
|
|
78
|
+
});
|
|
79
|
+
const stateFile = this.extractStateFile(logs);
|
|
80
|
+
return {
|
|
81
|
+
checkId: runId,
|
|
82
|
+
checkName,
|
|
83
|
+
rawLogs: logs,
|
|
84
|
+
failedStep: this.extractFailedStep(logs),
|
|
85
|
+
errorSummary: this.extractErrorSummary(logs),
|
|
86
|
+
stateFile: stateFile ?? undefined,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
extractStateFile(logs) {
|
|
90
|
+
// GitHub Actions logs have format: "Run name\tStep name\tTimestamp <content>"
|
|
91
|
+
// We need to strip prefixes to get actual output
|
|
92
|
+
const lines = logs.split('\n');
|
|
93
|
+
// Helper to extract content from a GitHub Actions log line
|
|
94
|
+
const extractContent = (line) => {
|
|
95
|
+
const parts = line.split('\t');
|
|
96
|
+
if (parts.length < 3)
|
|
97
|
+
return '';
|
|
98
|
+
const contentWithTimestamp = parts.slice(2).join('\t');
|
|
99
|
+
// Strip timestamp (format: "2025-10-21T00:56:24.8654285Z <content>")
|
|
100
|
+
return contentWithTimestamp.replace(/^[0-9T:.Z-]+ /, '').replace(/^[0-9T:.Z-]+$/, '');
|
|
101
|
+
};
|
|
102
|
+
// Find the start: line containing "VALIDATION STATE FILE CONTENTS"
|
|
103
|
+
// Skip lines with ANSI codes (those are the commands being echoed, not the output)
|
|
104
|
+
const startIdx = lines.findIndex(l => {
|
|
105
|
+
return l.includes('VALIDATION STATE FILE CONTENTS') && !l.includes('[36;1m') && !l.includes('[0m');
|
|
106
|
+
});
|
|
107
|
+
if (startIdx < 0) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
// Find the closing separator (next line with ==== that comes after some YAML content)
|
|
111
|
+
// Look for a line with just ========== (40+ chars) after we've seen some YAML (passed:, timestamp:, etc.)
|
|
112
|
+
let endIdx = -1;
|
|
113
|
+
let foundYamlContent = false;
|
|
114
|
+
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
115
|
+
const content = extractContent(lines[i]).trim();
|
|
116
|
+
// Check if we've seen YAML content
|
|
117
|
+
if (content.startsWith('passed:') || content.startsWith('timestamp:') || content.startsWith('treeHash:')) {
|
|
118
|
+
foundYamlContent = true;
|
|
119
|
+
}
|
|
120
|
+
// Look for closing separator after we've seen YAML content
|
|
121
|
+
if (foundYamlContent && content.match(/^={40,}$/)) {
|
|
122
|
+
endIdx = i;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (endIdx < 0) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
// Extract YAML content (skip the header separator line, start from actual YAML)
|
|
130
|
+
const yamlLines = [];
|
|
131
|
+
for (let i = startIdx + 2; i < endIdx; i++) {
|
|
132
|
+
// Strip the prefix (job name + step + timestamp) to get actual content
|
|
133
|
+
const content = extractContent(lines[i]);
|
|
134
|
+
yamlLines.push(content);
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const stateYaml = yamlLines.join('\n').trim();
|
|
138
|
+
return parseYaml(stateYaml);
|
|
139
|
+
}
|
|
140
|
+
catch (_error) {
|
|
141
|
+
// Failed to parse YAML, return null
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Transform GitHub check format to common CheckResult format
|
|
147
|
+
*/
|
|
148
|
+
transformCheck(ghCheck) {
|
|
149
|
+
// Type guard to ensure ghCheck is an object with expected properties
|
|
150
|
+
const check = ghCheck;
|
|
151
|
+
// GitHub check structure (from statusCheckRollup):
|
|
152
|
+
// {
|
|
153
|
+
// __typename: "CheckRun" | "StatusContext",
|
|
154
|
+
// name: string,
|
|
155
|
+
// status: "QUEUED" | "IN_PROGRESS" | "COMPLETED",
|
|
156
|
+
// conclusion: "SUCCESS" | "FAILURE" | "CANCELLED" | etc,
|
|
157
|
+
// detailsUrl: string
|
|
158
|
+
// }
|
|
159
|
+
let status;
|
|
160
|
+
switch (check.status) {
|
|
161
|
+
case 'QUEUED':
|
|
162
|
+
status = 'queued';
|
|
163
|
+
break;
|
|
164
|
+
case 'IN_PROGRESS':
|
|
165
|
+
status = 'in_progress';
|
|
166
|
+
break;
|
|
167
|
+
case 'COMPLETED':
|
|
168
|
+
status = 'completed';
|
|
169
|
+
break;
|
|
170
|
+
default:
|
|
171
|
+
status = 'queued';
|
|
172
|
+
}
|
|
173
|
+
let conclusion = null;
|
|
174
|
+
if (check.conclusion) {
|
|
175
|
+
switch (check.conclusion) {
|
|
176
|
+
case 'SUCCESS':
|
|
177
|
+
conclusion = 'success';
|
|
178
|
+
break;
|
|
179
|
+
case 'FAILURE':
|
|
180
|
+
conclusion = 'failure';
|
|
181
|
+
break;
|
|
182
|
+
case 'CANCELLED':
|
|
183
|
+
conclusion = 'cancelled';
|
|
184
|
+
break;
|
|
185
|
+
case 'SKIPPED':
|
|
186
|
+
conclusion = 'skipped';
|
|
187
|
+
break;
|
|
188
|
+
case 'NEUTRAL':
|
|
189
|
+
conclusion = 'neutral';
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Extract run ID from details URL if available
|
|
194
|
+
let checkId = 'unknown';
|
|
195
|
+
if (typeof check.detailsUrl === 'string') {
|
|
196
|
+
const runIdMatch = check.detailsUrl.match(/\/runs\/(\d+)/);
|
|
197
|
+
if (runIdMatch) {
|
|
198
|
+
checkId = runIdMatch[1];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
id: checkId,
|
|
203
|
+
name: check.name || 'Unknown',
|
|
204
|
+
status,
|
|
205
|
+
conclusion,
|
|
206
|
+
url: check.detailsUrl,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Determine overall status from individual checks
|
|
211
|
+
*/
|
|
212
|
+
determineOverallStatus(checks) {
|
|
213
|
+
if (checks.length === 0) {
|
|
214
|
+
return 'pending';
|
|
215
|
+
}
|
|
216
|
+
const allCompleted = checks.every((c) => c.status === 'completed');
|
|
217
|
+
if (allCompleted) {
|
|
218
|
+
return 'completed';
|
|
219
|
+
}
|
|
220
|
+
const anyInProgress = checks.some((c) => c.status === 'in_progress');
|
|
221
|
+
if (anyInProgress) {
|
|
222
|
+
return 'in_progress';
|
|
223
|
+
}
|
|
224
|
+
return 'pending';
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Determine overall result from individual checks
|
|
228
|
+
*/
|
|
229
|
+
determineOverallResult(checks) {
|
|
230
|
+
if (checks.length === 0) {
|
|
231
|
+
return 'unknown';
|
|
232
|
+
}
|
|
233
|
+
const anyFailure = checks.some((c) => c.conclusion === 'failure');
|
|
234
|
+
if (anyFailure) {
|
|
235
|
+
return 'failure';
|
|
236
|
+
}
|
|
237
|
+
const anyCancelled = checks.some((c) => c.conclusion === 'cancelled');
|
|
238
|
+
if (anyCancelled) {
|
|
239
|
+
return 'cancelled';
|
|
240
|
+
}
|
|
241
|
+
const allSuccess = checks.every((c) => c.conclusion === 'success');
|
|
242
|
+
if (allSuccess) {
|
|
243
|
+
return 'success';
|
|
244
|
+
}
|
|
245
|
+
return 'unknown';
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Extract failed step name from GitHub Actions logs
|
|
249
|
+
*/
|
|
250
|
+
extractFailedStep(logs) {
|
|
251
|
+
// GitHub Actions marks failed steps with ##[error]
|
|
252
|
+
const errorMatch = logs.match(/##\[error\]Process completed with exit code \d+\./);
|
|
253
|
+
if (!errorMatch) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
// Try to find the step name before the error
|
|
257
|
+
// Look for lines like: "Run pnpm test" or "##[group]Run pnpm test"
|
|
258
|
+
const lines = logs.split('\n');
|
|
259
|
+
const errorIndex = lines.findIndex((line) => line.includes('##[error]'));
|
|
260
|
+
if (errorIndex > 0) {
|
|
261
|
+
// Look backwards for step name
|
|
262
|
+
for (let i = errorIndex - 1; i >= 0; i--) {
|
|
263
|
+
const runMatch = lines[i].match(/##\[group\]Run (.+)/);
|
|
264
|
+
if (runMatch) {
|
|
265
|
+
return runMatch[1];
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Extract concise error summary from logs
|
|
273
|
+
*
|
|
274
|
+
* Prioritizes vibe-validate state file extraction for most actionable errors.
|
|
275
|
+
*/
|
|
276
|
+
extractErrorSummary(logs) {
|
|
277
|
+
// First, try to extract the full state file (most detailed)
|
|
278
|
+
const stateFile = this.extractStateFile(logs);
|
|
279
|
+
if (stateFile && !stateFile.passed && stateFile.phases) {
|
|
280
|
+
// Find the first failed phase
|
|
281
|
+
const failedPhase = stateFile.phases.find(p => !p.passed);
|
|
282
|
+
if (failedPhase && failedPhase.steps) {
|
|
283
|
+
// Find the first failed step in that phase
|
|
284
|
+
const failedStep = failedPhase.steps.find(s => !s.passed);
|
|
285
|
+
if (failedStep && failedPhase.output) {
|
|
286
|
+
// Return a concise summary with the failed step and its output
|
|
287
|
+
const outputPreview = failedPhase.output
|
|
288
|
+
.split('\n')
|
|
289
|
+
.slice(0, 20) // First 20 lines of output
|
|
290
|
+
.join('\n');
|
|
291
|
+
return `Phase: ${failedPhase.name}\nFailed Step: ${failedStep.name}\n\n${outputPreview}`;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Fallback: Look for ##[error] lines
|
|
296
|
+
const errorLines = logs
|
|
297
|
+
.split('\n')
|
|
298
|
+
.filter((line) => line.includes('##[error]'))
|
|
299
|
+
.slice(0, 10) // First 10 error lines
|
|
300
|
+
.map((line) => line.replace(/##\[error\]/g, '').trim())
|
|
301
|
+
.join('\n');
|
|
302
|
+
return errorLines || undefined;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=github-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-actions.js","sourceRoot":"","sources":["../../../src/services/ci-providers/github-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,5 +14,5 @@ import type { VibeValidateConfig } from '@vibe-validate/config';
|
|
|
14
14
|
* 2 = State file missing (run validation)
|
|
15
15
|
* 3 = Git tree hash mismatch (run validation)
|
|
16
16
|
*/
|
|
17
|
-
export declare function checkValidationStatus(
|
|
17
|
+
export declare function checkValidationStatus(_config: VibeValidateConfig): Promise<void>;
|
|
18
18
|
//# sourceMappingURL=check-validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-validation.d.ts","sourceRoot":"","sources":["../../src/utils/check-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAKhE;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"check-validation.d.ts","sourceRoot":"","sources":["../../src/utils/check-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAKhE;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEtF"}
|