import subprocess
from bs4 import BeautifulSoup
def generate_readme():
try:
result = subprocess.run(['cargo', 'readme'], capture_output=True, text=True, check=True)
with open('README.md', 'w') as file:
file.write(result.stdout)
print("README.md has been generated successfully.")
except subprocess.CalledProcessError as e:
print(f"An error occurred while running 'cargo readme': {e}")
print(f"Error output: {e.stderr}")
def generate_header():
return ("| File | Coverage Bar | Line Coverage | Lines Covered | Lines Total |\n"
"|------|--------------|---------------|---------------|-------------|\n")
def generate_row(file_name, line_coverage, lines_covered, lines_total):
coverage_bar = generate_bar(line_coverage)
return f"| {file_name} | {coverage_bar} | {line_coverage}% | {lines_covered} | {lines_total} |\n"
def generate_bar(coverage):
coverage_int = int(round(coverage))
return f""
html_file = ".artifacts/coverage/html/index.html"
markdown_report = generate_header()
with open(html_file, "r") as file:
soup = BeautifulSoup(file, "html.parser")
rows = soup.find_all("tr")
for row in rows[1:]:
cells = row.find_all("td")
if len(cells) >= 6:
file_name = row.find("th").text.strip()
line_coverage = float(cells[1].text.strip().strip('%'))
lines_covered, lines_total = map(int, cells[2].text.strip().split('/'))
branch_coverage = cells[5].text.strip().strip('%')
branches_covered, branches_total = map(int, cells[6].text.strip().split('/'))
markdown_report += generate_row(file_name, line_coverage, lines_covered, lines_total)
def replace_test_status(readme_content, test_status_content):
return readme_content.replace('[See Test Status](./TEST_STATUS.md)', test_status_content)
generate_readme()
with open('README.md', 'r') as file:
readme_content = file.read()
updated_readme_content = replace_test_status(readme_content, markdown_report)
with open('README.md', 'w') as file:
file.write(updated_readme_content)
file_path = "TEST_STATUS.md"
with open(file_path, "w") as file:
file.write(markdown_report)