This commit is contained in:
parent
4b64ffcb4c
commit
0db4e51cae
2
.github/workflows/pytest.yml
vendored
2
.github/workflows/pytest.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
run: |
|
||||
coverage-badge -o coverage.svg
|
||||
python - <<EOF
|
||||
from src.lib.generate_coverage import GenerateCoverage
|
||||
from scripts.generate_coverage import GenerateCoverage
|
||||
generate_coverage = GenerateCoverage()
|
||||
generate_coverage.save_table()
|
||||
EOF
|
||||
|
||||
93
scripts/generate_coverage.py
Normal file
93
scripts/generate_coverage.py
Normal file
@ -0,0 +1,93 @@
|
||||
import re
|
||||
|
||||
|
||||
class GenerateCoverage:
|
||||
def __init__(self, coverage_file="pytest-coverage.txt", output_file="coverage_table.md"):
|
||||
"""
|
||||
初期化
|
||||
|
||||
:param coverage_file: カバレッジ結果のテキストファイル
|
||||
:param output_file: 出力する Markdown ファイル
|
||||
"""
|
||||
self.coverage_file = coverage_file
|
||||
self.output_file = output_file
|
||||
self.coverage_data = []
|
||||
self.markdown_table = None
|
||||
|
||||
def parse_coverage(self):
|
||||
"""
|
||||
coverage.txt のデータを解析してカバレッジ情報を抽出
|
||||
"""
|
||||
with open(self.coverage_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
coverage_info = []
|
||||
in_coverage_section = False
|
||||
|
||||
for line in lines:
|
||||
# Coverage セクションの始まりを検出
|
||||
if "---------- coverage" in line:
|
||||
in_coverage_section = True
|
||||
continue
|
||||
# Coverage セクションの終わりを検出
|
||||
if in_coverage_section and line.strip() == "":
|
||||
# Coverage セクションが終了したと判断
|
||||
break
|
||||
# Coverage データを抽出
|
||||
if in_coverage_section:
|
||||
match = re.match(
|
||||
r"(.+?)\s+(\d+)\s+(\d+)\s+(\d+%)\s*(.*)", line)
|
||||
if match:
|
||||
filename = match.group(1).strip()
|
||||
statements = match.group(2).strip()
|
||||
missed = match.group(3).strip()
|
||||
coverage = match.group(4).strip()
|
||||
missing_lines = match.group(
|
||||
5).strip() if match.group(5) else "-"
|
||||
coverage_info.append({
|
||||
"filename": filename,
|
||||
"statements": statements,
|
||||
"missed": missed,
|
||||
"coverage": coverage,
|
||||
"missing_lines": missing_lines
|
||||
})
|
||||
|
||||
self.coverage_data = coverage_info
|
||||
|
||||
def generate_table(self):
|
||||
"""
|
||||
Markdown テーブルを生成
|
||||
"""
|
||||
if not self.coverage_data:
|
||||
self.parse_coverage()
|
||||
|
||||
# Markdown テーブルヘッダー
|
||||
table_header = "| File | Statements | Missed | Coverage | Missing Lines |\n"
|
||||
table_header += "|------|------------|--------|----------|---------------|\n"
|
||||
|
||||
# テーブル行を生成
|
||||
table_rows = [
|
||||
f"| {data['filename']} | {data['statements']} | {data['missed']} | {data['coverage']} | {data['missing_lines']} |"
|
||||
for data in self.coverage_data
|
||||
]
|
||||
|
||||
self.markdown_table = table_header + "\n".join(table_rows)
|
||||
|
||||
def print_table(self):
|
||||
"""
|
||||
テーブルをコンソールに出力
|
||||
"""
|
||||
if self.markdown_table is None:
|
||||
self.generate_table()
|
||||
print(self.markdown_table)
|
||||
|
||||
def save_table(self):
|
||||
"""
|
||||
テーブルをファイルに保存
|
||||
"""
|
||||
if self.markdown_table is None:
|
||||
self.generate_table()
|
||||
|
||||
with open(self.output_file, "w", encoding="utf-8") as f:
|
||||
print(f"Markdown table has been saved to {self.output_file}")
|
||||
f.write(self.markdown_table)
|
||||
Loading…
x
Reference in New Issue
Block a user