Initial upload: git-insights-cli with CI/CD workflow
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
CI / release (push) Has been cancelled

This commit is contained in:
2026-01-30 20:35:28 +00:00
parent cfc3a966a9
commit 937cc87271

View File

@@ -0,0 +1,65 @@
from datetime import datetime
from typing import Any
from src.formatters.base import BaseFormatter
class MarkdownFormatter(BaseFormatter):
"""Markdown output formatter."""
@staticmethod
def format(data: Any) -> str:
"""Format data as Markdown."""
lines = ["# Git Insights Report", f"Generated: {datetime.now().isoformat()}", ""]
if hasattr(data, "commit_analysis") and data.commit_analysis:
ca = data.commit_analysis
lines.extend([
"## Commit Analysis",
f"- **Total Commits**: {ca.total_commits}",
f"- **Unique Authors**: {ca.unique_authors}",
f"- **Avg Commits/Day**: {ca.average_commits_per_day:.1f}",
"",
"### Top Contributors",
"| Author | Commits |",
"|--------|---------|",
])
for author in ca.top_authors[:5]:
lines.append(f"| {author.name} | {author.commit_count} |")
lines.append("")
if hasattr(data, "velocity_analysis") and data.velocity_analysis:
va = data.velocity_analysis
lines.extend([
"## Velocity Analysis",
f"- **Commits/Day**: {va.commits_per_day:.1f}",
f"- **Commits/Week**: {va.commits_per_week:.1f}",
f"- **Trend**: {va.velocity_trend}",
f"- **Most Active Day**: {va.most_active_day}",
"",
])
if hasattr(data, "code_churn_analysis") and data.code_churn_analysis:
cc = data.code_churn_analysis
lines.extend([
"## Code Churn",
f"- **Lines Added**: {cc.total_lines_added:,}",
f"- **Lines Deleted**: {cc.total_lines_deleted:,}",
f"- **Net Change**: {cc.net_change:+,}",
f"- **Avg Churn/Commit**: {cc.average_churn_per_commit:.1f}",
"",
])
if hasattr(data, "risky_commit_analysis") and data.risky_commit_analysis:
ra = data.risky_commit_analysis
lines.extend([
"## Risky Commits",
f"- **Total Risky**: {ra.total_risky_commits}",
f"- **Risk Score**: {ra.risk_score:.1f}%",
f"- **Large Changes**: {len(ra.large_change_commits)}",
f"- **Merge Commits**: {len(ra.merge_commits)}",
f"- **Reverts**: {len(ra.revert_commits)}",
"",
])
return "\n".join(lines)