84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script to update README.md with coverage badges from CI artifacts.
|
|
This script should be run after CI completes to update the badges in your README.
|
|
"""
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
|
|
def update_readme_badges():
|
|
"""Update README.md with coverage badges."""
|
|
readme_path = "README.md"
|
|
|
|
if not os.path.exists(readme_path):
|
|
print("README.md not found!")
|
|
return False
|
|
|
|
# Read current README
|
|
with open(readme_path, 'r') as f:
|
|
content = f.read()
|
|
|
|
# Coverage badges to add/update
|
|
test_coverage_badge = ""
|
|
docs_coverage_badge = ""
|
|
|
|
# Check if badges already exist and update them, otherwise add them at the top
|
|
if "![Test Coverage]" in content:
|
|
content = re.sub(r'!\[Test Coverage\]\([^)]+\)', test_coverage_badge, content)
|
|
else:
|
|
# Add after the first line (title)
|
|
lines = content.split('\n')
|
|
if len(lines) > 0:
|
|
lines.insert(1, f"\n{test_coverage_badge}")
|
|
content = '\n'.join(lines)
|
|
|
|
if "![Documentation Coverage]" in content:
|
|
content = re.sub(r'!\[Documentation Coverage\]\([^)]+\)', docs_coverage_badge, content)
|
|
else:
|
|
# Add after test coverage badge
|
|
lines = content.split('\n')
|
|
for i, line in enumerate(lines):
|
|
if "![Test Coverage]" in line:
|
|
lines.insert(i + 1, docs_coverage_badge)
|
|
break
|
|
content = '\n'.join(lines)
|
|
|
|
# Write updated README
|
|
with open(readme_path, 'w') as f:
|
|
f.write(content)
|
|
|
|
print("README.md updated with coverage badges!")
|
|
return True
|
|
|
|
|
|
def show_coverage_summary():
|
|
"""Display coverage summary if available."""
|
|
if os.path.exists("coverage-summary.txt"):
|
|
with open("coverage-summary.txt", 'r') as f:
|
|
test_coverage = f.read().strip()
|
|
print(f"Current Test Coverage: {test_coverage}")
|
|
|
|
# Try to get documentation coverage from interrogate output
|
|
if os.path.exists("coverage.json"):
|
|
import json
|
|
try:
|
|
with open("coverage.json", 'r') as f:
|
|
coverage_data = json.load(f)
|
|
print(f"Detailed Coverage: {coverage_data['totals']['percent_covered']:.1f}%")
|
|
covered = coverage_data['totals']['covered_lines']
|
|
total = coverage_data['totals']['num_statements']
|
|
print(f"Lines Covered: {covered}/{total}")
|
|
except (KeyError, json.JSONDecodeError):
|
|
print("Could not parse coverage data")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1 and sys.argv[1] == "--summary":
|
|
show_coverage_summary()
|
|
else:
|
|
update_readme_badges()
|
|
show_coverage_summary()
|