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()