@@ -354,13 +354,13 @@ async function validateCSharp(): Promise<ValidationResult[]> {
354354 return results ;
355355}
356356
357- function printResults ( results : ValidationResult [ ] , language : string ) : number {
357+ function printResults ( results : ValidationResult [ ] , language : string ) : { failed : number ; passed : number ; failures : ValidationResult [ ] } {
358358 const failed = results . filter ( ( r ) => ! r . success ) ;
359359 const passed = results . filter ( ( r ) => r . success ) ;
360360
361361 if ( failed . length === 0 ) {
362362 console . log ( ` ✅ ${ passed . length } files passed` ) ;
363- return 0 ;
363+ return { failed : 0 , passed : passed . length , failures : [ ] } ;
364364 }
365365
366366 console . log ( ` ❌ ${ failed . length } failed, ${ passed . length } passed\n` ) ;
@@ -377,7 +377,46 @@ function printResults(results: ValidationResult[], language: string): number {
377377 console . log ( ` └─` ) ;
378378 }
379379
380- return failed . length ;
380+ return { failed : failed . length , passed : passed . length , failures : failed } ;
381+ }
382+
383+ function writeGitHubSummary ( summaryData : { language : string ; passed : number ; failed : number ; failures : ValidationResult [ ] } [ ] ) {
384+ const summaryFile = process . env . GITHUB_STEP_SUMMARY ;
385+ if ( ! summaryFile ) return ;
386+
387+ const totalPassed = summaryData . reduce ( ( sum , d ) => sum + d . passed , 0 ) ;
388+ const totalFailed = summaryData . reduce ( ( sum , d ) => sum + d . failed , 0 ) ;
389+ const allPassed = totalFailed === 0 ;
390+
391+ let summary = `## 📖 Documentation Validation Results\n\n` ;
392+
393+ if ( allPassed ) {
394+ summary += `✅ **All ${ totalPassed } code blocks passed validation**\n\n` ;
395+ } else {
396+ summary += `❌ **${ totalFailed } failures** out of ${ totalPassed + totalFailed } code blocks\n\n` ;
397+ }
398+
399+ summary += `| Language | Status | Passed | Failed |\n` ;
400+ summary += `|----------|--------|--------|--------|\n` ;
401+
402+ for ( const { language, passed, failed } of summaryData ) {
403+ const status = failed === 0 ? "✅" : "❌" ;
404+ summary += `| ${ language } | ${ status } | ${ passed } | ${ failed } |\n` ;
405+ }
406+
407+ if ( totalFailed > 0 ) {
408+ summary += `\n### Failures\n\n` ;
409+ for ( const { language, failures } of summaryData ) {
410+ if ( failures . length === 0 ) continue ;
411+ summary += `#### ${ language } \n\n` ;
412+ for ( const f of failures ) {
413+ summary += `- **${ f . sourceFile } :${ f . sourceLine } **\n` ;
414+ summary += ` \`\`\`\n ${ f . errors . slice ( 0 , 3 ) . join ( "\n " ) } \n \`\`\`\n` ;
415+ }
416+ }
417+ }
418+
419+ fs . appendFileSync ( summaryFile , summary ) ;
381420}
382421
383422async function main ( ) {
@@ -394,6 +433,7 @@ async function main() {
394433 }
395434
396435 let totalFailed = 0 ;
436+ const summaryData : { language : string ; passed : number ; failed : number ; failures : ValidationResult [ ] } [ ] = [ ] ;
397437
398438 const validators : [ string , ( ) => Promise < ValidationResult [ ] > ] [ ] = [
399439 [ "TypeScript" , validateTypeScript ] ,
@@ -408,9 +448,14 @@ async function main() {
408448
409449 console . log ( `\n${ name } :` ) ;
410450 const results = await validator ( ) ;
411- totalFailed += printResults ( results , name ) ;
451+ const { failed, passed, failures } = printResults ( results , name ) ;
452+ totalFailed += failed ;
453+ summaryData . push ( { language : name , passed, failed, failures } ) ;
412454 }
413455
456+ // Write GitHub Actions summary
457+ writeGitHubSummary ( summaryData ) ;
458+
414459 console . log ( "\n" + "─" . repeat ( 40 ) ) ;
415460
416461 if ( totalFailed > 0 ) {
0 commit comments