import argparse, sys from config import Config from orchestrator import run_pipeline def main(): p = argparse.ArgumentParser(description="COBOL->Java/Spark Migration Verification") p.add_argument("--copybook", required=True) p.add_argument("--cobol-src", required=True) p.add_argument("--java-src", required=True) p.add_argument("--mapping", required=True) p.add_argument("--runner", choices=["native", "spark"], default="native") p.add_argument("--coverage", choices=["boundary", "branch"], default="boundary") p.add_argument("--tolerance", type=float, default=0.01) p.add_argument("--verbose", action="store_true") p.add_argument("--dry-run", action="store_true") p.add_argument("--output-dir", default="./reports") p.add_argument("--quality-gate-mode", choices=["warn", "off"], default="warn", help="质量门禁模式: warn=记录警告, off=关闭") p.add_argument("--gcov", action="store_true", help="启用 gcov 覆盖率采集") args = p.parse_args() if args.dry_run: from pathlib import Path issues = [] for lb, pt in [("copybook", args.copybook), ("cobol-src", args.cobol_src), ("mapping", args.mapping)]: if not Path(pt).exists(): issues.append(f" {lb}: {pt} (not found)") if not Path(f"{args.java_src}/pom.xml").exists(): issues.append(f" java-src: {args.java_src}/pom.xml (not found)") if issues: print("DRY-RUN issues:\n" + "\n".join(issues)) sys.exit(2) print("DRY-RUN: all inputs OK") sys.exit(0) c = Config() c.runner_mode = args.runner c.coverage_default = args.coverage c.tolerance = args.tolerance c.quality_gate_mode = args.quality_gate_mode c.gcov_enabled = args.gcov vr = run_pipeline(c, args.copybook, args.cobol_src, args.java_src, args.mapping) t = vr.fields_matched + vr.fields_mismatched print(f"{vr.program}: {vr.status} ({vr.fields_matched}/{t}, {vr.duration_s:.0f}s)" if t else f"{vr.program}: {vr.status}") sys.exit(vr.exit_code) if __name__ == "__main__": main()