@vibe-validate/cli 0.10.3 → 0.12.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 +84 -92
- package/dist/bin.js +137 -20
- package/dist/bin.js.map +1 -1
- package/dist/commands/cleanup.d.ts +4 -0
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +96 -15
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +83 -15
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +385 -82
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-workflow.d.ts +6 -2
- package/dist/commands/generate-workflow.d.ts.map +1 -1
- package/dist/commands/generate-workflow.js +188 -33
- package/dist/commands/generate-workflow.js.map +1 -1
- package/dist/commands/history.d.ts +13 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +415 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +252 -109
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pre-commit.d.ts +4 -0
- package/dist/commands/pre-commit.d.ts.map +1 -1
- package/dist/commands/pre-commit.js +158 -7
- package/dist/commands/pre-commit.js.map +1 -1
- package/dist/commands/state.d.ts +5 -1
- package/dist/commands/state.d.ts.map +1 -1
- package/dist/commands/state.js +192 -23
- package/dist/commands/state.js.map +1 -1
- package/dist/commands/sync-check.d.ts +4 -0
- package/dist/commands/sync-check.d.ts.map +1 -1
- package/dist/commands/sync-check.js +101 -14
- package/dist/commands/sync-check.js.map +1 -1
- package/dist/commands/validate.d.ts +5 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +184 -28
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch-pr.d.ts +10 -0
- package/dist/commands/watch-pr.d.ts.map +1 -0
- package/dist/commands/watch-pr.js +443 -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 +165 -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 +41 -0
- package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
- package/dist/services/ci-providers/github-actions.js +314 -0
- package/dist/services/ci-providers/github-actions.js.map +1 -0
- package/dist/utils/check-validation.d.ts +7 -4
- package/dist/utils/check-validation.d.ts.map +1 -1
- package/dist/utils/check-validation.js +129 -48
- 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/run-validation-with-cache.d.ts +48 -0
- package/dist/utils/run-validation-with-cache.d.ts.map +1 -0
- package/dist/utils/run-validation-with-cache.js +123 -0
- package/dist/utils/run-validation-with-cache.js.map +1 -0
- package/dist/utils/runner-adapter.d.ts +1 -0
- package/dist/utils/runner-adapter.d.ts.map +1 -1
- package/dist/utils/runner-adapter.js +25 -17
- package/dist/utils/runner-adapter.js.map +1 -1
- package/dist/utils/setup-checks/gitignore-check.d.ts +10 -15
- package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
- package/dist/utils/setup-checks/gitignore-check.js +20 -138
- 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/dist/utils/validate-workflow.d.ts +28 -0
- package/dist/utils/validate-workflow.d.ts.map +1 -0
- package/dist/utils/validate-workflow.js +247 -0
- package/dist/utils/validate-workflow.js.map +1 -0
- package/dist/utils/validation-cache.d.ts +30 -0
- package/dist/utils/validation-cache.d.ts.map +1 -0
- package/dist/utils/validation-cache.js +57 -0
- package/dist/utils/validation-cache.js.map +1 -0
- package/package.json +19 -16
- package/watch-pr-result.schema.json +204 -0
- package/LICENSE +0 -21
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
import { stringify as stringifyYaml } from 'yaml';
|
|
2
|
+
import { CIProviderRegistry } from '../services/ci-provider-registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register the watch-pr command
|
|
5
|
+
*/
|
|
6
|
+
export function registerWatchPRCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('watch-pr [pr-number]')
|
|
9
|
+
.description('Watch CI checks for a pull/merge request in real-time')
|
|
10
|
+
.option('--provider <name>', 'Force specific CI provider (github-actions, gitlab-ci)')
|
|
11
|
+
.option('--yaml', 'Output YAML only (no interactive display)')
|
|
12
|
+
.option('--timeout <seconds>', 'Maximum time to wait in seconds (default: 3600)', '3600')
|
|
13
|
+
.option('--poll-interval <seconds>', 'Polling frequency in seconds (default: 10)', '10')
|
|
14
|
+
.option('--fail-fast', 'Exit immediately on first check failure')
|
|
15
|
+
.action(async (prNumber, options) => {
|
|
16
|
+
try {
|
|
17
|
+
const exitCode = await watchPRCommand(prNumber, options);
|
|
18
|
+
process.exit(exitCode);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (!options.yaml) {
|
|
22
|
+
console.error('❌ Error:', error instanceof Error ? error.message : String(error));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// YAML mode: Output error to stdout
|
|
26
|
+
process.stdout.write('---\n');
|
|
27
|
+
process.stdout.write(stringifyYaml({
|
|
28
|
+
error: error instanceof Error ? error.message : String(error),
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Execute watch-pr command
|
|
37
|
+
*
|
|
38
|
+
* @returns Exit code (0 = success, 1 = failure, 2 = timeout)
|
|
39
|
+
*/
|
|
40
|
+
async function watchPRCommand(prNumber, options) {
|
|
41
|
+
const registry = new CIProviderRegistry();
|
|
42
|
+
// Auto-detect or use specified provider
|
|
43
|
+
const provider = options.provider
|
|
44
|
+
? registry.getProvider(options.provider)
|
|
45
|
+
: await registry.detectProvider();
|
|
46
|
+
if (!provider) {
|
|
47
|
+
const availableProviders = registry.getProviderNames().join(', ');
|
|
48
|
+
throw new Error(`No supported CI provider detected. Available: ${availableProviders}\n` +
|
|
49
|
+
'GitHub Actions requires: gh CLI installed and github.com remote');
|
|
50
|
+
}
|
|
51
|
+
// If no PR number, try to detect from current branch
|
|
52
|
+
let prId = prNumber;
|
|
53
|
+
if (!prId) {
|
|
54
|
+
const pr = await provider.detectPullRequest();
|
|
55
|
+
if (!pr) {
|
|
56
|
+
throw new Error('Could not detect PR from current branch.\n' +
|
|
57
|
+
'Usage: vibe-validate watch-pr <pr-number>');
|
|
58
|
+
}
|
|
59
|
+
prId = pr.id.toString();
|
|
60
|
+
}
|
|
61
|
+
// Watch the PR
|
|
62
|
+
return await watchPR(provider, prId, options);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Watch PR until completion or timeout
|
|
66
|
+
*/
|
|
67
|
+
async function watchPR(provider, prId, options) {
|
|
68
|
+
const timeoutMs = parseInt(options.timeout || '3600') * 1000;
|
|
69
|
+
const pollIntervalMs = parseInt(options.pollInterval || '10') * 1000;
|
|
70
|
+
const startTime = Date.now();
|
|
71
|
+
let lastStatus = null;
|
|
72
|
+
let iteration = 0;
|
|
73
|
+
while (true) {
|
|
74
|
+
const elapsed = Date.now() - startTime;
|
|
75
|
+
// Check timeout
|
|
76
|
+
if (elapsed >= timeoutMs) {
|
|
77
|
+
if (options.yaml && lastStatus) {
|
|
78
|
+
const result = {
|
|
79
|
+
pr: lastStatus.pr,
|
|
80
|
+
status: 'timeout',
|
|
81
|
+
result: 'unknown',
|
|
82
|
+
duration: formatDuration(elapsed),
|
|
83
|
+
summary: 'Timed out waiting for checks to complete',
|
|
84
|
+
checks: lastStatus.checks.map((c) => ({
|
|
85
|
+
name: c.name,
|
|
86
|
+
status: c.status,
|
|
87
|
+
conclusion: c.conclusion,
|
|
88
|
+
duration: c.duration,
|
|
89
|
+
url: c.url,
|
|
90
|
+
})),
|
|
91
|
+
};
|
|
92
|
+
// YAML mode: Output timeout result to stdout
|
|
93
|
+
process.stdout.write('---\n');
|
|
94
|
+
process.stdout.write(stringifyYaml(result));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.log('\n⏱️ Timeout reached. Checks still pending.');
|
|
98
|
+
}
|
|
99
|
+
return 2;
|
|
100
|
+
}
|
|
101
|
+
// Fetch current status
|
|
102
|
+
const status = await provider.fetchCheckStatus(prId);
|
|
103
|
+
lastStatus = status;
|
|
104
|
+
// Display current status
|
|
105
|
+
if (!options.yaml) {
|
|
106
|
+
displayHumanStatus(status, iteration === 0);
|
|
107
|
+
}
|
|
108
|
+
// Check if we should fail fast
|
|
109
|
+
if (options.failFast) {
|
|
110
|
+
const anyFailure = status.checks.some((c) => c.conclusion === 'failure');
|
|
111
|
+
if (anyFailure) {
|
|
112
|
+
return await handleCompletion(provider, status, options, elapsed);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Check if all checks are complete
|
|
116
|
+
if (status.status === 'completed') {
|
|
117
|
+
return await handleCompletion(provider, status, options, elapsed);
|
|
118
|
+
}
|
|
119
|
+
// Wait before next poll
|
|
120
|
+
iteration++;
|
|
121
|
+
await sleep(pollIntervalMs);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Handle completion - fetch failure details if needed and output result
|
|
126
|
+
*/
|
|
127
|
+
async function handleCompletion(provider, status, options, elapsedMs) {
|
|
128
|
+
const failures = status.checks.filter((c) => c.conclusion === 'failure');
|
|
129
|
+
// Fetch detailed failure information
|
|
130
|
+
const failureDetails = await Promise.all(failures.map(async (check) => {
|
|
131
|
+
try {
|
|
132
|
+
const logs = await provider.fetchFailureLogs(check.id);
|
|
133
|
+
return {
|
|
134
|
+
name: check.name,
|
|
135
|
+
checkId: check.id,
|
|
136
|
+
errorSummary: logs.errorSummary,
|
|
137
|
+
validationResult: logs.validationResult,
|
|
138
|
+
nextSteps: generateNextSteps(check.id, logs.validationResult),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return {
|
|
143
|
+
name: check.name,
|
|
144
|
+
checkId: check.id,
|
|
145
|
+
errorSummary: `Failed to fetch logs: ${error}`,
|
|
146
|
+
nextSteps: [`gh run view ${check.id} --log-failed`],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
// Output final result
|
|
151
|
+
if (options.yaml) {
|
|
152
|
+
const result = {
|
|
153
|
+
pr: {
|
|
154
|
+
id: status.pr.id,
|
|
155
|
+
title: status.pr.title,
|
|
156
|
+
url: status.pr.url,
|
|
157
|
+
},
|
|
158
|
+
status: status.status,
|
|
159
|
+
result: status.result,
|
|
160
|
+
duration: formatDuration(elapsedMs),
|
|
161
|
+
summary: `${status.checks.filter((c) => c.conclusion === 'success').length}/${status.checks.length} checks passed`,
|
|
162
|
+
checks: status.checks.map((c) => ({
|
|
163
|
+
name: c.name,
|
|
164
|
+
status: c.status,
|
|
165
|
+
conclusion: c.conclusion,
|
|
166
|
+
duration: c.duration,
|
|
167
|
+
url: c.url,
|
|
168
|
+
})),
|
|
169
|
+
failures: failureDetails.length > 0 ? failureDetails : undefined,
|
|
170
|
+
};
|
|
171
|
+
// YAML mode: Output completion result to stdout
|
|
172
|
+
process.stdout.write('---\n');
|
|
173
|
+
process.stdout.write(stringifyYaml(result));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
displayHumanCompletion(status, failureDetails, elapsedMs);
|
|
177
|
+
}
|
|
178
|
+
// Return appropriate exit code
|
|
179
|
+
return status.result === 'success' ? 0 : 1;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Display human-friendly status update
|
|
183
|
+
*/
|
|
184
|
+
function displayHumanStatus(status, isFirst) {
|
|
185
|
+
if (isFirst) {
|
|
186
|
+
console.log(`🔍 Watching PR #${status.pr.id}: ${status.pr.title}`);
|
|
187
|
+
console.log(` ${status.pr.url}\n`);
|
|
188
|
+
}
|
|
189
|
+
// Clear previous output (for live updating)
|
|
190
|
+
if (!isFirst) {
|
|
191
|
+
process.stdout.write('\x1B[2J\x1B[H'); // Clear screen and move cursor to top
|
|
192
|
+
console.log(`🔍 Watching PR #${status.pr.id}: ${status.pr.title}\n`);
|
|
193
|
+
}
|
|
194
|
+
// Display checks
|
|
195
|
+
for (const check of status.checks) {
|
|
196
|
+
const icon = getCheckIcon(check);
|
|
197
|
+
const statusStr = check.conclusion || check.status;
|
|
198
|
+
const duration = check.duration || '';
|
|
199
|
+
console.log(`${icon} ${check.name.padEnd(40)} ${statusStr.padEnd(12)} ${duration}`);
|
|
200
|
+
}
|
|
201
|
+
// Display summary
|
|
202
|
+
const completed = status.checks.filter((c) => c.status === 'completed').length;
|
|
203
|
+
const total = status.checks.length;
|
|
204
|
+
const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
205
|
+
console.log(`\n${completed}/${total} checks complete (${percentage}%)`);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Display human-friendly completion message
|
|
209
|
+
*/
|
|
210
|
+
function displayHumanCompletion(status, failures, elapsedMs) {
|
|
211
|
+
console.log('\n' + '='.repeat(60));
|
|
212
|
+
if (status.result === 'success') {
|
|
213
|
+
console.log('✅ All checks passed!');
|
|
214
|
+
console.log(` Duration: ${formatDuration(elapsedMs)}`);
|
|
215
|
+
console.log(` Ready to merge: ${status.pr.url}`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
console.log('❌ Some checks failed');
|
|
219
|
+
console.log(` Duration: ${formatDuration(elapsedMs)}`);
|
|
220
|
+
for (const failure of failures) {
|
|
221
|
+
console.log(`\n📋 ${failure.name}:`);
|
|
222
|
+
if (failure.validationResult) {
|
|
223
|
+
console.log(` Failed step: ${failure.validationResult.failedStep}`);
|
|
224
|
+
if (failure.validationResult.rerunCommand) {
|
|
225
|
+
console.log(` Re-run locally: ${failure.validationResult.rerunCommand}`);
|
|
226
|
+
}
|
|
227
|
+
// Show parsed test failures (extracted by extractors package)
|
|
228
|
+
if (failure.validationResult.failedTests && failure.validationResult.failedTests.length > 0) {
|
|
229
|
+
console.log(`\n Failed tests:`);
|
|
230
|
+
failure.validationResult.failedTests.forEach((test) => {
|
|
231
|
+
console.log(` ❌ ${test}`);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
else if (failure.validationResult.failedStepOutput) {
|
|
235
|
+
// Fallback: show raw output if extractor didn't extract anything
|
|
236
|
+
console.log(`\n Error output:`);
|
|
237
|
+
const lines = failure.validationResult.failedStepOutput.split('\n').slice(0, 10);
|
|
238
|
+
lines.forEach((line) => console.log(` ${line}`));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if (failure.errorSummary) {
|
|
242
|
+
console.log(` ${failure.errorSummary}`);
|
|
243
|
+
}
|
|
244
|
+
console.log(`\n Next steps:`);
|
|
245
|
+
failure.nextSteps.forEach((step) => console.log(` - ${step}`));
|
|
246
|
+
}
|
|
247
|
+
// Suggest reporting extractor issues if extraction quality is poor
|
|
248
|
+
console.log('\n💡 Error output unclear or missing details?');
|
|
249
|
+
console.log(' Help improve extraction: https://github.com/jdutton/vibe-validate/issues/new?template=extractor-improvement.yml');
|
|
250
|
+
}
|
|
251
|
+
console.log('='.repeat(60));
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get icon for check status
|
|
255
|
+
*/
|
|
256
|
+
function getCheckIcon(check) {
|
|
257
|
+
if (check.conclusion === 'success')
|
|
258
|
+
return '✅';
|
|
259
|
+
if (check.conclusion === 'failure')
|
|
260
|
+
return '❌';
|
|
261
|
+
if (check.conclusion === 'cancelled')
|
|
262
|
+
return '🚫';
|
|
263
|
+
if (check.conclusion === 'skipped')
|
|
264
|
+
return '⏭️ ';
|
|
265
|
+
if (check.status === 'in_progress')
|
|
266
|
+
return '⏳';
|
|
267
|
+
return '⏸️ ';
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Generate next steps for a failure
|
|
271
|
+
*/
|
|
272
|
+
function generateNextSteps(checkId, validationResult) {
|
|
273
|
+
const steps = [];
|
|
274
|
+
if (validationResult?.rerunCommand) {
|
|
275
|
+
steps.push(`Run locally: ${validationResult.rerunCommand}`);
|
|
276
|
+
}
|
|
277
|
+
steps.push(`View logs: gh run view ${checkId} --log-failed`);
|
|
278
|
+
steps.push(`Re-run check: gh run rerun ${checkId} --failed`);
|
|
279
|
+
return steps;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Format duration in human-readable format
|
|
283
|
+
*/
|
|
284
|
+
function formatDuration(ms) {
|
|
285
|
+
const seconds = Math.floor(ms / 1000);
|
|
286
|
+
const minutes = Math.floor(seconds / 60);
|
|
287
|
+
const remainingSeconds = seconds % 60;
|
|
288
|
+
if (minutes > 0) {
|
|
289
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
290
|
+
}
|
|
291
|
+
return `${seconds}s`;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Sleep for specified milliseconds
|
|
295
|
+
*/
|
|
296
|
+
function sleep(ms) {
|
|
297
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Show verbose help with detailed documentation
|
|
301
|
+
*/
|
|
302
|
+
export function showWatchPRVerboseHelp() {
|
|
303
|
+
console.log(`# watch-pr Command Reference
|
|
304
|
+
|
|
305
|
+
> Watch CI checks for a pull/merge request in real-time
|
|
306
|
+
|
|
307
|
+
## Overview
|
|
308
|
+
|
|
309
|
+
The \`watch-pr\` command monitors CI provider (GitHub Actions) check status in real-time after pushing to a PR. It provides live progress updates, extracts validation results from CI logs on failure, and provides actionable recovery commands. This is especially useful for AI agents waiting for CI completion.
|
|
310
|
+
|
|
311
|
+
## How It Works
|
|
312
|
+
|
|
313
|
+
1. Detects PR from current branch (or uses provided PR number)
|
|
314
|
+
2. Polls CI provider (GitHub Actions) for check status
|
|
315
|
+
3. Shows real-time progress of all matrix jobs
|
|
316
|
+
4. On failure: fetches logs and extracts vibe-validate state file
|
|
317
|
+
5. Provides actionable recovery commands
|
|
318
|
+
6. Exits when all checks complete or timeout reached
|
|
319
|
+
|
|
320
|
+
## Options
|
|
321
|
+
|
|
322
|
+
- \`--provider <name>\` - Force specific CI provider (github-actions, gitlab-ci)
|
|
323
|
+
- \`--yaml\` - Output YAML only (no interactive display)
|
|
324
|
+
- \`--timeout <seconds>\` - Maximum time to wait in seconds (default: 3600)
|
|
325
|
+
- \`--poll-interval <seconds>\` - Polling frequency in seconds (default: 10)
|
|
326
|
+
- \`--fail-fast\` - Exit immediately on first check failure
|
|
327
|
+
|
|
328
|
+
## Exit Codes
|
|
329
|
+
|
|
330
|
+
- \`0\` - All checks passed
|
|
331
|
+
- \`1\` - One or more checks failed
|
|
332
|
+
- \`2\` - Timeout reached before completion
|
|
333
|
+
|
|
334
|
+
## Examples
|
|
335
|
+
|
|
336
|
+
\`\`\`bash
|
|
337
|
+
# Push to PR and watch
|
|
338
|
+
git push origin my-branch
|
|
339
|
+
vibe-validate watch-pr # Auto-detect PR
|
|
340
|
+
|
|
341
|
+
# Watch specific PR
|
|
342
|
+
vibe-validate watch-pr 42
|
|
343
|
+
|
|
344
|
+
# YAML output only
|
|
345
|
+
vibe-validate watch-pr --yaml
|
|
346
|
+
|
|
347
|
+
# Exit on first failure
|
|
348
|
+
vibe-validate watch-pr --fail-fast
|
|
349
|
+
|
|
350
|
+
# Custom timeout (10 minutes)
|
|
351
|
+
vibe-validate watch-pr --timeout 600
|
|
352
|
+
\`\`\`
|
|
353
|
+
|
|
354
|
+
## Common Workflows
|
|
355
|
+
|
|
356
|
+
### Standard workflow after pushing PR
|
|
357
|
+
|
|
358
|
+
\`\`\`bash
|
|
359
|
+
# Push changes
|
|
360
|
+
git push origin feature/my-work
|
|
361
|
+
|
|
362
|
+
# Create PR (if not exists)
|
|
363
|
+
gh pr create
|
|
364
|
+
|
|
365
|
+
# Watch CI checks
|
|
366
|
+
vibe-validate watch-pr
|
|
367
|
+
|
|
368
|
+
# If passes: merge
|
|
369
|
+
gh pr merge
|
|
370
|
+
|
|
371
|
+
# Cleanup
|
|
372
|
+
vibe-validate cleanup
|
|
373
|
+
\`\`\`
|
|
374
|
+
|
|
375
|
+
### CI dogfooding workflow (for vibe-validate developers)
|
|
376
|
+
|
|
377
|
+
\`\`\`bash
|
|
378
|
+
# Push changes
|
|
379
|
+
git push origin my-branch
|
|
380
|
+
|
|
381
|
+
# Watch with fail-fast (exit on first failure for quick feedback)
|
|
382
|
+
vibe-validate watch-pr --fail-fast
|
|
383
|
+
|
|
384
|
+
# If fails: view validation result from YAML
|
|
385
|
+
vibe-validate watch-pr 42 --yaml | yq '.failures[0].validationResult'
|
|
386
|
+
|
|
387
|
+
# Fix errors and re-run
|
|
388
|
+
gh run rerun <run-id> --failed
|
|
389
|
+
\`\`\`
|
|
390
|
+
|
|
391
|
+
### AI agent workflow
|
|
392
|
+
|
|
393
|
+
\`\`\`bash
|
|
394
|
+
# AI agent pushes code
|
|
395
|
+
git push origin feature/ai-generated
|
|
396
|
+
|
|
397
|
+
# AI agent watches PR (YAML mode for parsing)
|
|
398
|
+
vibe-validate watch-pr --yaml --timeout 600
|
|
399
|
+
|
|
400
|
+
# AI agent parses YAML result
|
|
401
|
+
# - If passed: proceed with merge
|
|
402
|
+
# - If failed: extract error details and fix
|
|
403
|
+
\`\`\`
|
|
404
|
+
|
|
405
|
+
## Error Recovery
|
|
406
|
+
|
|
407
|
+
### If check fails
|
|
408
|
+
|
|
409
|
+
**View validation result from YAML output:**
|
|
410
|
+
\`\`\`bash
|
|
411
|
+
# View validation result from YAML output
|
|
412
|
+
vibe-validate watch-pr 42 --yaml | yq '.failures[0].validationResult'
|
|
413
|
+
|
|
414
|
+
# Re-run failed check
|
|
415
|
+
gh run rerun <run-id> --failed
|
|
416
|
+
\`\`\`
|
|
417
|
+
|
|
418
|
+
### If no PR found
|
|
419
|
+
|
|
420
|
+
**Create PR first:**
|
|
421
|
+
\`\`\`bash
|
|
422
|
+
# Create PR first
|
|
423
|
+
gh pr create
|
|
424
|
+
|
|
425
|
+
# Or specify PR number explicitly
|
|
426
|
+
vibe-validate watch-pr 42
|
|
427
|
+
\`\`\`
|
|
428
|
+
|
|
429
|
+
## CI Provider Support
|
|
430
|
+
|
|
431
|
+
### GitHub Actions (default)
|
|
432
|
+
|
|
433
|
+
- **Requirements**: \`gh\` CLI installed and github.com remote
|
|
434
|
+
- **Auto-detection**: Checks for .github/workflows and github.com remote
|
|
435
|
+
- **Features**: Matrix job support, log extraction, vibe-validate state parsing
|
|
436
|
+
|
|
437
|
+
### GitLab CI (planned)
|
|
438
|
+
|
|
439
|
+
- **Status**: Not yet implemented
|
|
440
|
+
- **Tracking**: https://github.com/jdutton/vibe-validate/issues
|
|
441
|
+
`);
|
|
442
|
+
}
|
|
443
|
+
//# sourceMappingURL=watch-pr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-pr.js","sourceRoot":"","sources":["../../src/commands/watch-pr.ts"],"names":[],"mappings":"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"}
|