@vibe-validate/cli 0.17.3 → 0.17.5-rc.1
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/bin/vibe-validate +1 -1
- package/dist/bin/vibe-validate.js +1 -1
- package/dist/bin/vibe-validate.js.map +1 -1
- package/dist/bin/vv +1 -1
- package/dist/bin.js +10 -10
- package/dist/bin.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +1 -1
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +2 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create-extractor.d.ts.map +1 -1
- package/dist/commands/create-extractor.js +17 -15
- package/dist/commands/create-extractor.js.map +1 -1
- package/dist/commands/doctor.d.ts +14 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +191 -40
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-workflow.d.ts +8 -2
- package/dist/commands/generate-workflow.d.ts.map +1 -1
- package/dist/commands/generate-workflow.js +25 -60
- package/dist/commands/generate-workflow.js.map +1 -1
- package/dist/commands/history.d.ts +1 -1
- package/dist/commands/history.d.ts.map +1 -1
- package/dist/commands/history.js +21 -10
- package/dist/commands/history.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pre-commit.d.ts.map +1 -1
- package/dist/commands/pre-commit.js +36 -20
- package/dist/commands/pre-commit.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +4 -4
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +1 -1
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/state.d.ts.map +1 -1
- package/dist/commands/state.js +2 -2
- package/dist/commands/state.js.map +1 -1
- package/dist/commands/sync-check.d.ts.map +1 -1
- package/dist/commands/sync-check.js +2 -2
- package/dist/commands/sync-check.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +4 -4
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch-pr.d.ts.map +1 -1
- package/dist/commands/watch-pr.js +8 -3
- package/dist/commands/watch-pr.js.map +1 -1
- package/dist/schemas/run-result-schema-export.d.ts.map +1 -1
- package/dist/schemas/run-result-schema-export.js.map +1 -1
- package/dist/schemas/run-result-schema.d.ts.map +1 -1
- package/dist/schemas/run-result-schema.js +1 -1
- package/dist/schemas/run-result-schema.js.map +1 -1
- package/dist/schemas/watch-pr-schema.d.ts +36 -36
- package/dist/schemas/watch-pr-schema.d.ts.map +1 -1
- package/dist/schemas/watch-pr-schema.js +1 -1
- package/dist/schemas/watch-pr-schema.js.map +1 -1
- package/dist/scripts/generate-run-result-schema.js +1 -1
- package/dist/scripts/generate-run-result-schema.js.map +1 -1
- package/dist/scripts/generate-watch-pr-schema.js.map +1 -1
- package/dist/services/ci-provider-registry.d.ts +1 -1
- package/dist/services/ci-provider-registry.d.ts.map +1 -1
- package/dist/services/ci-provider-registry.js.map +1 -1
- package/dist/services/ci-providers/github-actions.d.ts +7 -3
- package/dist/services/ci-providers/github-actions.d.ts.map +1 -1
- package/dist/services/ci-providers/github-actions.js +101 -56
- package/dist/services/ci-providers/github-actions.js.map +1 -1
- package/dist/utils/check-validation.d.ts.map +1 -1
- package/dist/utils/check-validation.js +8 -39
- package/dist/utils/check-validation.js.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +1 -1
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/display-cached-result.d.ts +16 -0
- package/dist/utils/display-cached-result.d.ts.map +1 -0
- package/dist/utils/display-cached-result.js +27 -0
- package/dist/utils/display-cached-result.js.map +1 -0
- package/dist/utils/git-detection.d.ts +81 -0
- package/dist/utils/git-detection.d.ts.map +1 -1
- package/dist/utils/git-detection.js +122 -0
- package/dist/utils/git-detection.js.map +1 -1
- package/dist/utils/normalize-line-endings.js +1 -1
- package/dist/utils/normalize-line-endings.js.map +1 -1
- package/dist/utils/pid-lock.js +2 -2
- package/dist/utils/pid-lock.js.map +1 -1
- package/dist/utils/project-id.d.ts.map +1 -1
- package/dist/utils/project-id.js.map +1 -1
- package/dist/utils/runner-adapter.d.ts.map +1 -1
- package/dist/utils/runner-adapter.js.map +1 -1
- package/dist/utils/secret-scanning.d.ts +0 -4
- package/dist/utils/secret-scanning.d.ts.map +1 -1
- package/dist/utils/secret-scanning.js +5 -17
- package/dist/utils/secret-scanning.js.map +1 -1
- package/dist/utils/setup-checks/hooks-check.d.ts.map +1 -1
- package/dist/utils/setup-checks/hooks-check.js +1 -1
- package/dist/utils/setup-checks/hooks-check.js.map +1 -1
- package/dist/utils/setup-checks/workflow-check.d.ts.map +1 -1
- package/dist/utils/setup-checks/workflow-check.js +1 -1
- package/dist/utils/setup-checks/workflow-check.js.map +1 -1
- package/dist/utils/temp-files.d.ts.map +1 -1
- package/dist/utils/temp-files.js.map +1 -1
- package/dist/utils/template-discovery.d.ts.map +1 -1
- package/dist/utils/template-discovery.js.map +1 -1
- package/dist/utils/validate-workflow.d.ts.map +1 -1
- package/dist/utils/validate-workflow.js +15 -48
- package/dist/utils/validate-workflow.js.map +1 -1
- package/dist/utils/yaml-output.d.ts.map +1 -1
- package/dist/utils/yaml-output.js +7 -1
- package/dist/utils/yaml-output.js.map +1 -1
- package/package.json +14 -13
|
@@ -192,8 +192,8 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
192
192
|
} | undefined;
|
|
193
193
|
}>>;
|
|
194
194
|
}, "strip", z.ZodTypeAny, {
|
|
195
|
-
passed: boolean;
|
|
196
195
|
name: string;
|
|
196
|
+
passed: boolean;
|
|
197
197
|
durationSecs?: number | undefined;
|
|
198
198
|
extraction?: {
|
|
199
199
|
summary: string;
|
|
@@ -225,8 +225,8 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
225
225
|
} | undefined;
|
|
226
226
|
output?: string | undefined;
|
|
227
227
|
}, {
|
|
228
|
-
passed: boolean;
|
|
229
228
|
name: string;
|
|
229
|
+
passed: boolean;
|
|
230
230
|
durationSecs?: number | undefined;
|
|
231
231
|
extraction?: {
|
|
232
232
|
summary: string;
|
|
@@ -259,11 +259,11 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
259
259
|
output?: string | undefined;
|
|
260
260
|
}>, "many">>;
|
|
261
261
|
}, "strip", z.ZodTypeAny, {
|
|
262
|
-
passed: boolean;
|
|
263
262
|
name: string;
|
|
263
|
+
passed: boolean;
|
|
264
264
|
steps?: {
|
|
265
|
-
passed: boolean;
|
|
266
265
|
name: string;
|
|
266
|
+
passed: boolean;
|
|
267
267
|
durationSecs?: number | undefined;
|
|
268
268
|
extraction?: {
|
|
269
269
|
summary: string;
|
|
@@ -296,11 +296,11 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
296
296
|
output?: string | undefined;
|
|
297
297
|
}[] | undefined;
|
|
298
298
|
}, {
|
|
299
|
-
passed: boolean;
|
|
300
299
|
name: string;
|
|
300
|
+
passed: boolean;
|
|
301
301
|
steps?: {
|
|
302
|
-
passed: boolean;
|
|
303
302
|
name: string;
|
|
303
|
+
passed: boolean;
|
|
304
304
|
durationSecs?: number | undefined;
|
|
305
305
|
extraction?: {
|
|
306
306
|
summary: string;
|
|
@@ -335,12 +335,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
335
335
|
}>, "many">>;
|
|
336
336
|
}, "strip", z.ZodTypeAny, {
|
|
337
337
|
passed: boolean;
|
|
338
|
+
treeHash?: string | undefined;
|
|
339
|
+
timestamp?: string | undefined;
|
|
338
340
|
phases?: {
|
|
339
|
-
passed: boolean;
|
|
340
341
|
name: string;
|
|
342
|
+
passed: boolean;
|
|
341
343
|
steps?: {
|
|
342
|
-
passed: boolean;
|
|
343
344
|
name: string;
|
|
345
|
+
passed: boolean;
|
|
344
346
|
durationSecs?: number | undefined;
|
|
345
347
|
extraction?: {
|
|
346
348
|
summary: string;
|
|
@@ -373,17 +375,17 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
373
375
|
output?: string | undefined;
|
|
374
376
|
}[] | undefined;
|
|
375
377
|
}[] | undefined;
|
|
376
|
-
treeHash?: string | undefined;
|
|
377
|
-
timestamp?: string | undefined;
|
|
378
378
|
failedStep?: string | undefined;
|
|
379
379
|
}, {
|
|
380
380
|
passed: boolean;
|
|
381
|
+
treeHash?: string | undefined;
|
|
382
|
+
timestamp?: string | undefined;
|
|
381
383
|
phases?: {
|
|
382
|
-
passed: boolean;
|
|
383
384
|
name: string;
|
|
385
|
+
passed: boolean;
|
|
384
386
|
steps?: {
|
|
385
|
-
passed: boolean;
|
|
386
387
|
name: string;
|
|
388
|
+
passed: boolean;
|
|
387
389
|
durationSecs?: number | undefined;
|
|
388
390
|
extraction?: {
|
|
389
391
|
summary: string;
|
|
@@ -416,8 +418,6 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
416
418
|
output?: string | undefined;
|
|
417
419
|
}[] | undefined;
|
|
418
420
|
}[] | undefined;
|
|
419
|
-
treeHash?: string | undefined;
|
|
420
|
-
timestamp?: string | undefined;
|
|
421
421
|
failedStep?: string | undefined;
|
|
422
422
|
}>>;
|
|
423
423
|
nextSteps: z.ZodArray<z.ZodString, "many">;
|
|
@@ -428,12 +428,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
428
428
|
errorSummary?: string | undefined;
|
|
429
429
|
validationResult?: {
|
|
430
430
|
passed: boolean;
|
|
431
|
+
treeHash?: string | undefined;
|
|
432
|
+
timestamp?: string | undefined;
|
|
431
433
|
phases?: {
|
|
432
|
-
passed: boolean;
|
|
433
434
|
name: string;
|
|
435
|
+
passed: boolean;
|
|
434
436
|
steps?: {
|
|
435
|
-
passed: boolean;
|
|
436
437
|
name: string;
|
|
438
|
+
passed: boolean;
|
|
437
439
|
durationSecs?: number | undefined;
|
|
438
440
|
extraction?: {
|
|
439
441
|
summary: string;
|
|
@@ -466,8 +468,6 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
466
468
|
output?: string | undefined;
|
|
467
469
|
}[] | undefined;
|
|
468
470
|
}[] | undefined;
|
|
469
|
-
treeHash?: string | undefined;
|
|
470
|
-
timestamp?: string | undefined;
|
|
471
471
|
failedStep?: string | undefined;
|
|
472
472
|
} | undefined;
|
|
473
473
|
}, {
|
|
@@ -477,12 +477,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
477
477
|
errorSummary?: string | undefined;
|
|
478
478
|
validationResult?: {
|
|
479
479
|
passed: boolean;
|
|
480
|
+
treeHash?: string | undefined;
|
|
481
|
+
timestamp?: string | undefined;
|
|
480
482
|
phases?: {
|
|
481
|
-
passed: boolean;
|
|
482
483
|
name: string;
|
|
484
|
+
passed: boolean;
|
|
483
485
|
steps?: {
|
|
484
|
-
passed: boolean;
|
|
485
486
|
name: string;
|
|
487
|
+
passed: boolean;
|
|
486
488
|
durationSecs?: number | undefined;
|
|
487
489
|
extraction?: {
|
|
488
490
|
summary: string;
|
|
@@ -515,14 +517,10 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
515
517
|
output?: string | undefined;
|
|
516
518
|
}[] | undefined;
|
|
517
519
|
}[] | undefined;
|
|
518
|
-
treeHash?: string | undefined;
|
|
519
|
-
timestamp?: string | undefined;
|
|
520
520
|
failedStep?: string | undefined;
|
|
521
521
|
} | undefined;
|
|
522
522
|
}>, "many">>;
|
|
523
523
|
}, "strip", z.ZodTypeAny, {
|
|
524
|
-
summary: string;
|
|
525
|
-
result: "success" | "unknown" | "failure" | "cancelled";
|
|
526
524
|
checks: {
|
|
527
525
|
name: string;
|
|
528
526
|
status: string;
|
|
@@ -530,12 +528,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
530
528
|
url?: string | undefined;
|
|
531
529
|
duration?: string | undefined;
|
|
532
530
|
}[];
|
|
531
|
+
summary: string;
|
|
532
|
+
status: "in_progress" | "completed" | "pending" | "timeout";
|
|
533
|
+
result: "unknown" | "success" | "failure" | "cancelled";
|
|
533
534
|
pr: {
|
|
534
535
|
id: string | number;
|
|
535
536
|
title: string;
|
|
536
537
|
url: string;
|
|
537
538
|
};
|
|
538
|
-
status: "in_progress" | "completed" | "pending" | "timeout";
|
|
539
539
|
duration: string;
|
|
540
540
|
failures?: {
|
|
541
541
|
name: string;
|
|
@@ -544,12 +544,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
544
544
|
errorSummary?: string | undefined;
|
|
545
545
|
validationResult?: {
|
|
546
546
|
passed: boolean;
|
|
547
|
+
treeHash?: string | undefined;
|
|
548
|
+
timestamp?: string | undefined;
|
|
547
549
|
phases?: {
|
|
548
|
-
passed: boolean;
|
|
549
550
|
name: string;
|
|
551
|
+
passed: boolean;
|
|
550
552
|
steps?: {
|
|
551
|
-
passed: boolean;
|
|
552
553
|
name: string;
|
|
554
|
+
passed: boolean;
|
|
553
555
|
durationSecs?: number | undefined;
|
|
554
556
|
extraction?: {
|
|
555
557
|
summary: string;
|
|
@@ -582,14 +584,10 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
582
584
|
output?: string | undefined;
|
|
583
585
|
}[] | undefined;
|
|
584
586
|
}[] | undefined;
|
|
585
|
-
treeHash?: string | undefined;
|
|
586
|
-
timestamp?: string | undefined;
|
|
587
587
|
failedStep?: string | undefined;
|
|
588
588
|
} | undefined;
|
|
589
589
|
}[] | undefined;
|
|
590
590
|
}, {
|
|
591
|
-
summary: string;
|
|
592
|
-
result: "success" | "unknown" | "failure" | "cancelled";
|
|
593
591
|
checks: {
|
|
594
592
|
name: string;
|
|
595
593
|
status: string;
|
|
@@ -597,12 +595,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
597
595
|
url?: string | undefined;
|
|
598
596
|
duration?: string | undefined;
|
|
599
597
|
}[];
|
|
598
|
+
summary: string;
|
|
599
|
+
status: "in_progress" | "completed" | "pending" | "timeout";
|
|
600
|
+
result: "unknown" | "success" | "failure" | "cancelled";
|
|
600
601
|
pr: {
|
|
601
602
|
id: string | number;
|
|
602
603
|
title: string;
|
|
603
604
|
url: string;
|
|
604
605
|
};
|
|
605
|
-
status: "in_progress" | "completed" | "pending" | "timeout";
|
|
606
606
|
duration: string;
|
|
607
607
|
failures?: {
|
|
608
608
|
name: string;
|
|
@@ -611,12 +611,14 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
611
611
|
errorSummary?: string | undefined;
|
|
612
612
|
validationResult?: {
|
|
613
613
|
passed: boolean;
|
|
614
|
+
treeHash?: string | undefined;
|
|
615
|
+
timestamp?: string | undefined;
|
|
614
616
|
phases?: {
|
|
615
|
-
passed: boolean;
|
|
616
617
|
name: string;
|
|
618
|
+
passed: boolean;
|
|
617
619
|
steps?: {
|
|
618
|
-
passed: boolean;
|
|
619
620
|
name: string;
|
|
621
|
+
passed: boolean;
|
|
620
622
|
durationSecs?: number | undefined;
|
|
621
623
|
extraction?: {
|
|
622
624
|
summary: string;
|
|
@@ -649,8 +651,6 @@ export declare const WatchPRResultSchema: z.ZodObject<{
|
|
|
649
651
|
output?: string | undefined;
|
|
650
652
|
}[] | undefined;
|
|
651
653
|
}[] | undefined;
|
|
652
|
-
treeHash?: string | undefined;
|
|
653
|
-
timestamp?: string | undefined;
|
|
654
654
|
failedStep?: string | undefined;
|
|
655
655
|
} | undefined;
|
|
656
656
|
}[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-pr-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/watch-pr-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch-pr-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/watch-pr-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-pr-schema.js","sourceRoot":"","sources":["../../src/schemas/watch-pr-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"watch-pr-schema.js","sourceRoot":"","sources":["../../src/schemas/watch-pr-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;QACX,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;KACtB,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC,CACH;IACD,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,gBAAgB,EAAE,CAAC;aAChB,MAAM,CAAC;YACN,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,CAAC;iBACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;gBACnB,KAAK,EAAE,CAAC;qBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;oBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;oBAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;oBACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAC7B,UAAU,EAAE,0BAA0B,CAAC,QAAQ,EAAE;iBAClD,CAAC,CACH;qBACA,QAAQ,EAAE;aACd,CAAC,CACH;iBACA,QAAQ,EAAE;SACd,CAAC;aACD,QAAQ,EAAE;QACb,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC/B,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC,CAAC"}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* This script runs during the build process.
|
|
8
8
|
*/
|
|
9
9
|
import { writeFileSync } from 'node:fs';
|
|
10
|
-
import { fileURLToPath } from 'node:url';
|
|
11
10
|
import { dirname, join } from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
12
|
import { runResultJsonSchema } from '../schemas/run-result-schema-export.js';
|
|
13
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
14
14
|
const __dirname = dirname(__filename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-run-result-schema.js","sourceRoot":"","sources":["../../src/scripts/generate-run-result-schema.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generate-run-result-schema.js","sourceRoot":"","sources":["../../src/scripts/generate-run-result-schema.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAE7E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAE/D,iCAAiC;AACjC,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,EAC5C,OAAO,CACR,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC"}
|
|
@@ -1 +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,SAAS,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
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,SAAS,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,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"}
|
|
@@ -1 +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,
|
|
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,QAAQ,CAAC,SAAS,CAIxB;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"}
|
|
@@ -1 +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;
|
|
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;IACZ,SAAS,GAAiB;QACzC,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"}
|
|
@@ -12,7 +12,7 @@ export declare class GitHubActionsProvider implements CIProvider {
|
|
|
12
12
|
isAvailable(): Promise<boolean>;
|
|
13
13
|
detectPullRequest(): Promise<PullRequest | null>;
|
|
14
14
|
fetchCheckStatus(prId: number | string): Promise<CheckStatus>;
|
|
15
|
-
fetchFailureLogs(
|
|
15
|
+
fetchFailureLogs(jobId: string): Promise<FailureLogs>;
|
|
16
16
|
extractValidationResult(logs: string): ValidationResultContents | null;
|
|
17
17
|
/**
|
|
18
18
|
* Create a function to extract content from GitHub Actions log lines
|
|
@@ -24,9 +24,13 @@ export declare class GitHubActionsProvider implements CIProvider {
|
|
|
24
24
|
*/
|
|
25
25
|
private findValidationResultBoundaries;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Check if lines starting at startIdx look like validation result YAML
|
|
28
28
|
*/
|
|
29
|
-
private
|
|
29
|
+
private looksLikeValidationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Find the end of YAML content (next --- separator or end of document)
|
|
32
|
+
*/
|
|
33
|
+
private findYamlEnd;
|
|
30
34
|
/**
|
|
31
35
|
* Extract YAML content between boundaries
|
|
32
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-actions.d.ts","sourceRoot":"","sources":["../../../src/services/ci-providers/github-actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github-actions.d.ts","sourceRoot":"","sources":["../../../src/services/ci-providers/github-actions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,WAAW,EAEX,WAAW,EACX,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,UAAU;IACtD,QAAQ,CAAC,IAAI,oBAAoB;IAE3B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAe/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,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI;IAatE;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA6BtC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAStC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsEtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;CAyB5B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { parse as parseYaml } from 'yaml';
|
|
3
1
|
import { executeGitCommand } from '@vibe-validate/git';
|
|
2
|
+
import { isToolAvailable, safeExecSync } from '@vibe-validate/utils';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
4
|
/**
|
|
5
5
|
* GitHub Actions CI provider implementation
|
|
6
6
|
*
|
|
@@ -14,7 +14,9 @@ export class GitHubActionsProvider {
|
|
|
14
14
|
async isAvailable() {
|
|
15
15
|
try {
|
|
16
16
|
// Check if gh CLI is available
|
|
17
|
-
|
|
17
|
+
if (!isToolAvailable('gh')) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
18
20
|
// Check if we're in a GitHub repo
|
|
19
21
|
const result = executeGitCommand(['remote', 'get-url', 'origin']);
|
|
20
22
|
return result.success && result.stdout.includes('github.com');
|
|
@@ -25,10 +27,11 @@ export class GitHubActionsProvider {
|
|
|
25
27
|
}
|
|
26
28
|
async detectPullRequest() {
|
|
27
29
|
try {
|
|
28
|
-
const
|
|
30
|
+
const output = safeExecSync('gh', ['pr', 'view', '--json', 'number,title,url,headRefName'], {
|
|
29
31
|
encoding: 'utf8',
|
|
30
|
-
stdio:
|
|
31
|
-
})
|
|
32
|
+
stdio: 'pipe',
|
|
33
|
+
});
|
|
34
|
+
const prData = JSON.parse(output.toString());
|
|
32
35
|
return {
|
|
33
36
|
id: prData.number,
|
|
34
37
|
title: prData.title,
|
|
@@ -41,10 +44,11 @@ export class GitHubActionsProvider {
|
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
async fetchCheckStatus(prId) {
|
|
44
|
-
const
|
|
47
|
+
const output = safeExecSync('gh', ['pr', 'view', String(prId), '--json', 'number,title,url,statusCheckRollup,headRefName'], {
|
|
45
48
|
encoding: 'utf8',
|
|
46
|
-
stdio:
|
|
47
|
-
})
|
|
49
|
+
stdio: 'pipe',
|
|
50
|
+
});
|
|
51
|
+
const data = JSON.parse(output.toString());
|
|
48
52
|
const checks = (data.statusCheckRollup ?? []).map((check) => this.transformCheck(check));
|
|
49
53
|
return {
|
|
50
54
|
pr: {
|
|
@@ -58,28 +62,30 @@ export class GitHubActionsProvider {
|
|
|
58
62
|
checks,
|
|
59
63
|
};
|
|
60
64
|
}
|
|
61
|
-
async fetchFailureLogs(
|
|
62
|
-
// Get
|
|
65
|
+
async fetchFailureLogs(jobId) {
|
|
66
|
+
// Get job details to find the check name
|
|
63
67
|
let checkName = 'Unknown';
|
|
64
68
|
try {
|
|
65
|
-
const
|
|
69
|
+
const jobOutput = safeExecSync('gh', ['run', 'view', '--job', jobId, '--json', 'name'], {
|
|
66
70
|
encoding: 'utf8',
|
|
67
|
-
stdio:
|
|
68
|
-
})
|
|
69
|
-
|
|
71
|
+
stdio: 'pipe',
|
|
72
|
+
});
|
|
73
|
+
const jobData = JSON.parse(jobOutput.toString());
|
|
74
|
+
checkName = jobData.name ?? checkName;
|
|
70
75
|
}
|
|
71
76
|
catch {
|
|
72
77
|
// Ignore error, use default name
|
|
73
78
|
}
|
|
74
|
-
// Fetch
|
|
75
|
-
|
|
79
|
+
// Fetch logs for specific job (critical for matrix workflows)
|
|
80
|
+
// Using --job ensures we get logs for THIS job only, not all jobs in the workflow run
|
|
81
|
+
const logs = safeExecSync('gh', ['run', 'view', '--log', '--job', jobId], {
|
|
76
82
|
encoding: 'utf8',
|
|
77
|
-
stdio:
|
|
83
|
+
stdio: 'pipe',
|
|
78
84
|
maxBuffer: 50 * 1024 * 1024, // 50MB buffer to handle large logs
|
|
79
|
-
});
|
|
85
|
+
}).toString();
|
|
80
86
|
const validationResult = this.extractValidationResult(logs);
|
|
81
87
|
return {
|
|
82
|
-
checkId:
|
|
88
|
+
checkId: jobId,
|
|
83
89
|
checkName,
|
|
84
90
|
rawLogs: logs,
|
|
85
91
|
failedStep: this.extractFailedStep(logs),
|
|
@@ -108,54 +114,92 @@ export class GitHubActionsProvider {
|
|
|
108
114
|
return '';
|
|
109
115
|
const contentWithTimestamp = parts.slice(2).join('\t');
|
|
110
116
|
// Strip timestamp (format: "2025-10-21T00:56:24.8654285Z <content>")
|
|
111
|
-
|
|
117
|
+
const afterTimestampRemoval = contentWithTimestamp.replace(/^[0-9T:.Z-]+ /, '');
|
|
118
|
+
// Remove line if it's ONLY a timestamp (but keep "---" separator)
|
|
119
|
+
if (/^[0-9T:.Z-]+$/.test(afterTimestampRemoval) && afterTimestampRemoval !== '---') {
|
|
120
|
+
return '';
|
|
121
|
+
}
|
|
122
|
+
return afterTimestampRemoval;
|
|
112
123
|
};
|
|
113
124
|
}
|
|
114
125
|
/**
|
|
115
126
|
* Find the start and end indices of validation result YAML in logs
|
|
116
127
|
*/
|
|
117
128
|
findValidationResultBoundaries(lines, extractContent) {
|
|
118
|
-
// Find start: line containing "
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
129
|
+
// Find start: line containing "---" (YAML document separator)
|
|
130
|
+
// Must be followed by validation result fields like "passed:", "timestamp:", etc.
|
|
131
|
+
let startIdx = -1;
|
|
132
|
+
for (let i = 0; i < lines.length; i++) {
|
|
133
|
+
const content = extractContent(lines[i]).trim();
|
|
134
|
+
// Check if this is YAML separator followed by validation result
|
|
135
|
+
if (content === '---' && this.looksLikeValidationResult(lines, i + 1, extractContent)) {
|
|
136
|
+
startIdx = i;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
122
140
|
if (startIdx < 0) {
|
|
123
141
|
return null;
|
|
124
142
|
}
|
|
125
|
-
// Find end:
|
|
126
|
-
const endIdx = this.
|
|
143
|
+
// Find end: next "---" separator or end of meaningful YAML content
|
|
144
|
+
const endIdx = this.findYamlEnd(lines, startIdx + 1, extractContent);
|
|
127
145
|
if (endIdx < 0) {
|
|
128
146
|
return null;
|
|
129
147
|
}
|
|
130
148
|
return { startIdx, endIdx };
|
|
131
149
|
}
|
|
132
150
|
/**
|
|
133
|
-
*
|
|
151
|
+
* Check if lines starting at startIdx look like validation result YAML
|
|
134
152
|
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
for (let i = startIdx
|
|
153
|
+
looksLikeValidationResult(lines, startIdx, extractContent) {
|
|
154
|
+
// Check first 10 lines for validation result fields
|
|
155
|
+
for (let i = startIdx; i < Math.min(startIdx + 10, lines.length); i++) {
|
|
138
156
|
const content = extractContent(lines[i]).trim();
|
|
139
|
-
//
|
|
140
|
-
if (content.startsWith('passed:') ||
|
|
141
|
-
|
|
157
|
+
// Look for key validation result fields
|
|
158
|
+
if (content.startsWith('passed:') ||
|
|
159
|
+
content.startsWith('failedStep:') ||
|
|
160
|
+
(content.startsWith('treeHash:') && content.length > 20)) {
|
|
161
|
+
return true;
|
|
142
162
|
}
|
|
143
|
-
|
|
144
|
-
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Find the end of YAML content (next --- separator or end of document)
|
|
168
|
+
*/
|
|
169
|
+
findYamlEnd(lines, startIdx, extractContent) {
|
|
170
|
+
let lastContentLine = startIdx;
|
|
171
|
+
for (let i = startIdx; i < lines.length; i++) {
|
|
172
|
+
const content = extractContent(lines[i]).trim();
|
|
173
|
+
// Stop at next YAML document separator
|
|
174
|
+
if (content === '---' || content === '...') {
|
|
145
175
|
return i;
|
|
146
176
|
}
|
|
177
|
+
// Track last non-empty line
|
|
178
|
+
if (content.length > 0) {
|
|
179
|
+
lastContentLine = i;
|
|
180
|
+
}
|
|
181
|
+
// If we see GitHub Actions markers after YAML content, we're done
|
|
182
|
+
if (content.startsWith('##[') && i > startIdx + 5) {
|
|
183
|
+
return lastContentLine + 1;
|
|
184
|
+
}
|
|
147
185
|
}
|
|
148
|
-
|
|
186
|
+
// Return last content line + 1 if we hit end of logs
|
|
187
|
+
return lastContentLine + 1;
|
|
149
188
|
}
|
|
150
189
|
/**
|
|
151
190
|
* Extract YAML content between boundaries
|
|
152
191
|
*/
|
|
153
192
|
extractYamlContent(lines, boundaries, extractContent) {
|
|
154
|
-
// YAML starts at startIdx +
|
|
155
|
-
const yamlStartIdx = boundaries.startIdx +
|
|
193
|
+
// YAML starts at startIdx + 1 (skip the "---" separator)
|
|
194
|
+
const yamlStartIdx = boundaries.startIdx + 1;
|
|
156
195
|
const yamlLines = [];
|
|
157
196
|
for (let i = yamlStartIdx; i < boundaries.endIdx; i++) {
|
|
158
|
-
|
|
197
|
+
const content = extractContent(lines[i]);
|
|
198
|
+
// Include all lines (even empty ones) to preserve YAML structure
|
|
199
|
+
// Only skip GitHub Actions markers
|
|
200
|
+
if (!content.startsWith('##[')) {
|
|
201
|
+
yamlLines.push(content);
|
|
202
|
+
}
|
|
159
203
|
}
|
|
160
204
|
return yamlLines.join('\n').trim();
|
|
161
205
|
}
|
|
@@ -164,8 +208,7 @@ export class GitHubActionsProvider {
|
|
|
164
208
|
*/
|
|
165
209
|
parseAndEnrichValidationResult(yamlContent) {
|
|
166
210
|
try {
|
|
167
|
-
|
|
168
|
-
return result;
|
|
211
|
+
return parseYaml(yamlContent);
|
|
169
212
|
}
|
|
170
213
|
catch {
|
|
171
214
|
// Failed to parse validation YAML - return null
|
|
@@ -220,12 +263,16 @@ export class GitHubActionsProvider {
|
|
|
220
263
|
break;
|
|
221
264
|
}
|
|
222
265
|
}
|
|
223
|
-
// Extract run ID from details URL if available
|
|
266
|
+
// Extract run ID and job ID from details URL if available
|
|
267
|
+
// URL format: https://github.com/user/repo/actions/runs/<runId>/job/<jobId>
|
|
224
268
|
let checkId = 'unknown';
|
|
225
269
|
if (typeof check.detailsUrl === 'string') {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
270
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- Safe: Simple pattern with no backtracking risk
|
|
271
|
+
const urlMatch = /\/runs\/(\d+)(?:\/job\/(\d+))?/.exec(check.detailsUrl);
|
|
272
|
+
if (urlMatch) {
|
|
273
|
+
const [, runId, jobId] = urlMatch;
|
|
274
|
+
// Use job ID if available (for matrix jobs), otherwise use run ID
|
|
275
|
+
checkId = jobId || runId;
|
|
229
276
|
}
|
|
230
277
|
}
|
|
231
278
|
return {
|
|
@@ -307,23 +354,21 @@ export class GitHubActionsProvider {
|
|
|
307
354
|
extractErrorSummary(logs) {
|
|
308
355
|
// Use the validation result which already has parsed failures
|
|
309
356
|
const validationResult = this.extractValidationResult(logs);
|
|
310
|
-
if (validationResult && !validationResult.passed) {
|
|
357
|
+
if (validationResult && !validationResult.passed && validationResult.failedStep) {
|
|
311
358
|
// Show concise summary: just the failed step and how to rerun
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
return `Failed step: ${validationResult.failedStep}\nRerun: ${rerunCommand}`;
|
|
319
|
-
}
|
|
359
|
+
// Find the failed step's command (v0.15.0+: rerunCommand removed, use step.command)
|
|
360
|
+
const failedStep = validationResult.phases
|
|
361
|
+
?.flatMap(phase => phase.steps ?? [])
|
|
362
|
+
.find(step => step && step.name === validationResult.failedStep);
|
|
363
|
+
const rerunCommand = failedStep?.command ?? 'see full logs';
|
|
364
|
+
return `Failed step: ${validationResult.failedStep}\nRerun: ${rerunCommand}`;
|
|
320
365
|
}
|
|
321
366
|
// Fallback: Look for ##[error] lines (for non-validation failures)
|
|
322
367
|
const errorLines = logs
|
|
323
368
|
.split('\n')
|
|
324
369
|
.filter((line) => line.includes('##[error]'))
|
|
325
370
|
.slice(0, 5) // First 5 error lines
|
|
326
|
-
.map((line) => line.
|
|
371
|
+
.map((line) => line.replaceAll('##[error]', '').trim())
|
|
327
372
|
.join('\n');
|
|
328
373
|
return errorLines || undefined;
|
|
329
374
|
}
|