Files
OpenLLM/tools/write-coverage-report.py
2023-11-09 12:44:05 -05:00

47 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
from __future__ import annotations
from decimal import ROUND_DOWN, Decimal
from pathlib import Path
import orjson
PRECISION = Decimal('.01')
ROOT = Path(__file__).resolve().parent.parent
def main() -> int:
coverage_summary = ROOT / 'coverage-summary.json'
coverage_data = orjson.loads(coverage_summary.read_text(encoding='utf-8'))
total_data = coverage_data.pop('total')
lines = ['\n', 'Package | Statements\n', '------- | ----------\n']
for package, data in sorted(coverage_data.items()):
statements_covered = data['statements_covered']
statements = data['statements']
rate = Decimal(statements_covered) / Decimal(statements) * 100
rate = rate.quantize(PRECISION, rounding=ROUND_DOWN)
lines.append(f'{package} | {100 if rate == 100 else rate}% ({statements_covered} / {statements})\n')
total_statements_covered = total_data['statements_covered']
total_statements = total_data['statements']
total_rate = Decimal(total_statements_covered) / Decimal(total_statements) * 100
total_rate = total_rate.quantize(PRECISION, rounding=ROUND_DOWN)
color = 'ok' if float(total_rate) >= 95 else 'critical'
lines.insert(0, f'![Code Coverage](https://img.shields.io/badge/coverage-{total_rate}%25-{color}?style=flat)\n')
lines.append(
f'**Summary** | {100 if total_rate == 100 else total_rate}% ({total_statements_covered} / {total_statements})\n'
)
coverage_report = ROOT / 'coverage-report.md'
with coverage_report.open('w', encoding='utf-8') as f:
f.write(''.join(lines))
return 0
if __name__ == '__main__':
raise SystemExit(main())