def main(args: Any = None) -> None: mctx, *_, migrators = initialize_migrators() if not os.path.exists("./status"): os.mkdir("./status") total_status = {} for migrator in migrators: if isinstance(migrator, GraphMigrator) or isinstance( migrator, Replacement): if hasattr(migrator, "name"): assert isinstance(migrator.name, str) migrator_name = migrator.name.lower().replace(" ", "") else: migrator_name = migrator.__class__.__name__.lower() total_status[migrator_name] = f"{migrator.name} Migration Status" status, build_order, gv = migrator_status(migrator, mctx.graph) with open(os.path.join(f"./status/{migrator_name}.json"), "w") as fo: json.dump(status, fo, indent=2) d = gv.pipe("dot") with tempfile.NamedTemporaryFile() as ntf, open( f"{ntf.name}.dot", "w") as f: f.write(d.decode("utf-8")) # make the graph a bit more compact d = Source( subprocess.check_output([ "unflatten", "-f", "-l", "5", "-c", "10", f"{ntf.name}.dot" ]).decode("utf-8")).pipe("svg") with open(os.path.join(f"./status/{migrator_name}.svg"), "wb") as fb: fb.write(d) with open("./status/total_status.json", "w") as f: json.dump(total_status, f, sort_keys=True) lst = [ k for k, v in mctx.graph.nodes.items() if len([ z for z in v.get("payload", {}).get("PRed", []) if z.get("PR", {}).get("state", "closed") == "open" and z.get("data", {}).get("migrator_name", "") == "Version" ], ) >= Version.max_num_prs ] with open("./status/could_use_help.json", "w") as f: json.dump( sorted( lst, key=lambda z: (len(nx.descendants(mctx.graph, z)), lst), reverse=True, ), f, indent=2, ) lm = LicenseMigrator() lst = [ k for k, v in mctx.graph.nodes.items() if not lm.filter(v.get("payload", {})) ] with open("./status/unlicensed.json", "w") as f: json.dump( sorted( lst, key=lambda z: (len(nx.descendants(mctx.graph, z)), lst), reverse=True, ), f, indent=2, )
def main(args: Any = None) -> None: mctx, *_, migrators = initialize_migrators() if not os.path.exists("./status"): os.mkdir("./status") total_status = {} for migrator in migrators: if isinstance(migrator, GraphMigrator) or isinstance( migrator, Replacement): if hasattr(migrator, "name"): assert isinstance(migrator.name, str) migrator_name = migrator.name.lower().replace(" ", "") else: migrator_name = migrator.__class__.__name__.lower() total_status[migrator_name] = f"{migrator.name} Migration Status" status, build_order, gv = graph_migrator_status( migrator, mctx.graph) with open(os.path.join(f"./status/{migrator_name}.json"), "w") as fp: json.dump(status, fp, indent=2) d = gv.pipe("dot") with tempfile.NamedTemporaryFile(suffix=".dot") as ntf: ntf.write(d) # make the graph a bit more compact d = Source( subprocess.check_output([ "unflatten", "-f", "-l", "5", "-c", "10", f"{ntf.name}" ], ).decode("utf-8"), ).pipe("svg") with open(os.path.join(f"./status/{migrator_name}.svg"), "wb") as fb: fb.write(d or gv.pipe("svg")) elif isinstance(migrator, Version): write_version_migrator_status(migrator, mctx) with open("./status/total_status.json", "w") as f: json.dump(total_status, f, sort_keys=True) lst = [ k for k, v in mctx.graph.nodes.items() if len([ z for z in v.get("payload", {}).get("PRed", []) if z.get("PR", {}).get("state", "closed") == "open" and z.get("data", {}).get("migrator_name", "") == "Version" ], ) >= Version.max_num_prs ] with open("./status/could_use_help.json", "w") as f: json.dump( sorted( lst, key=lambda z: (len(nx.descendants(mctx.graph, z)), lst), reverse=True, ), f, indent=2, ) lm = LicenseMigrator() lst = [ k for k, v in mctx.graph.nodes.items() if not lm.filter(v.get("payload", {})) ] with open("./status/unlicensed.json", "w") as f: json.dump( sorted( lst, key=lambda z: (len(nx.descendants(mctx.graph, z)), lst), reverse=True, ), f, indent=2, ) open_prs = [] for node, attrs in mctx.graph.nodes("payload"): for pr in attrs.get("PRed", []): if pr.get("PR", {}).get("state", "closed") != "closed": open_prs.append(pr["PR"]) merge_state_count = Counter([o["mergeable_state"] for o in open_prs]) with open("./status/pr_state.csv", "a") as f: writer = csv.writer(f) writer.writerow([merge_state_count[k] for k in GH_MERGE_STATE_STATUS])