Job Summary Templates

Pre-built templates for common job summary use cases.

Overview

This page provides template patterns for creating job summaries for common scenarios like test reports, coverage reports, deployment summaries, and benchmark results.

Examples

Test Report with Details

from github_action_toolkit import JobSummary

def create_test_summary(results):
    """Create detailed test summary."""
    summary = JobSummary()
    
    # Overall results
    summary.add_heading('Test Results', 1)
    summary.add_table([
        ['Metric', 'Value'],
        ['Total Tests', str(results['total'])],
        ['✓ Passed', str(results['passed'])],
        ['✗ Failed', str(results['failed'])],
        ['⊘ Skipped', str(results['skipped'])],
        ['Duration', results['duration']],
    ])
    
    # Failures (if any)
    if results['failures']:
        summary.add_separator()
        summary.add_heading('Failed Tests', 2)
        for failure in results['failures']:
            summary.add_details(
                f"✗ {failure['name']}",
                f"```\n{failure['traceback']}\n```"
            )
    
    summary.write()

Coverage Report with Colors

from github_action_toolkit import JobSummary

def coverage_badge(percentage: float) -> str:
    """Return emoji badge for coverage level."""
    if percentage >= 90:
        return '🟢'
    elif percentage >= 75:
        return '🟡'
    else:
        return '🔴'

def create_coverage_summary(coverage_data: dict[str, float]):
    """Create coverage report with visual indicators."""
    summary = JobSummary()
    
    summary.add_heading('Code Coverage', 1)
    
    rows = [['File', 'Coverage', 'Status']]
    for file, coverage in sorted(coverage_data.items()):
        badge = coverage_badge(coverage)
        rows.append([file, f'{coverage:.1f}%', badge])
    
    summary.add_table(rows)
    
    # Overall coverage
    overall = sum(coverage_data.values()) / len(coverage_data)
    summary.add_separator()
    summary.add_quote(
        f"Overall Coverage: **{overall:.1f}%** {coverage_badge(overall)}"
    )
    
    summary.write()

Benchmark Comparison

from github_action_toolkit import JobSummary

def create_benchmark_summary(current: dict, baseline: dict):
    """Compare current benchmarks to baseline."""
    summary = JobSummary()
    
    summary.add_heading('Performance Benchmarks', 1)
    
    rows = [['Test', 'Current', 'Baseline', 'Change']]
    for test_name, current_time in current.items():
        baseline_time = baseline.get(test_name, current_time)
        change = ((current_time - baseline_time) / baseline_time) * 100
        
        if abs(change) < 5:
            change_str = f"→ {change:+.1f}%"
        elif change < 0:
            change_str = f"✓ {change:+.1f}%"
        else:
            change_str = f"✗ {change:+.1f}%"
        
        rows.append([
            test_name,
            f'{current_time:.2f}s',
            f'{baseline_time:.2f}s',
            change_str
        ])
    
    summary.add_table(rows)
    summary.write()