Repository navigation
Expand file tree
/
Copy pathcli.py
More file actions
80 lines (70 loc) · 2.44 KB
/
Copy pathcli.py
File metadata and controls
80 lines (70 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python3
"""
HemSoft Productivity Audit CLI
Audits GitHub engineering throughput, PR cycle times, code churn,
cadence, and 3D volumetric metrics across HemSoft repositories.
"""
import sys
import argparse
from src.generator import generate_report
from src.collector import CollectionError, get_date_range
def main():
parser = argparse.ArgumentParser(
description="Audit engineering productivity across HemSoft repositories and generate interactive 3D HTML reports."
)
parser.add_argument(
"--weeks", type=int, default=12, help="Number of past weeks to audit (default: 12)"
)
parser.add_argument("--start", type=str, default=None, help="Custom start date (YYYY-MM-DD)")
parser.add_argument("--end", type=str, default=None, help="Custom end date (YYYY-MM-DD)")
parser.add_argument(
"--output",
"-o",
type=str,
default=r"D:\hemsoft-productivity.html",
help="Path for generated HTML report (default: D:\\hemsoft-productivity.html)",
)
parser.add_argument(
"--base-dir",
"-d",
type=str,
default=r"D:\github\HemSoft",
help="Base directory of local git checkouts (default: D:\\github\\HemSoft)",
)
parser.add_argument(
"--refresh",
action="store_true",
help="Bypass cache and force fresh extraction from git and GitHub API",
)
parser.add_argument(
"--json-out", type=str, default=None, help="Optional path to write raw analytics JSON"
)
parser.add_argument(
"--edition-dir",
type=str,
default=None,
help="Optional folder for a publishable edition (report.html, payload.json, manifest.json)",
)
args = parser.parse_args()
try:
get_date_range(args.weeks, args.start, args.end)
except ValueError as exc:
parser.error(str(exc))
try:
out_file, analysis = generate_report(
base_dir=args.base_dir,
weeks=args.weeks,
start_str=args.start,
end_str=args.end,
output_html=args.output,
refresh=args.refresh,
json_out=args.json_out,
edition_dir=args.edition_dir,
)
except CollectionError as exc:
print(f"Collection failed: {exc}", file=sys.stderr)
raise SystemExit(1) from exc
print("\nAudit complete! Open the report in your browser:")
print(f" {out_file}")
if __name__ == "__main__":
main()