def add_arch_migrate(migrators: MutableSequence[Migrator], gx: nx.DiGraph) -> None: """Adds rebuild migrators. Parameters ---------- migrators : list of Migrator The list of migrators to run. """ print( "========================================" "========================================", flush=True, ) print("making aarch64+ppc64le and osx-arm64 migrations", flush=True) total_graph = copy.deepcopy(gx) migrators.append( ArchRebuild( graph=total_graph, pr_limit=PR_LIMIT, name="aarch64 and ppc64le addition", ), ) migrators.append( OSXArm( graph=total_graph, pr_limit=PR_LIMIT, name="arm osx addition", piggy_back_migrations=[ Build2HostMigrator(), UpdateConfigSubGuessMigrator(), CondaForgeYAMLCleanup(), UpdateCMakeArgsMigrator(), GuardTestingMigrator(), CrossRBaseMigrator(), CrossPythonMigrator(), NoCondaInspectMigrator(), MPIPinRunAsBuildCleanup(), ], ), )
UpdateCMakeArgsMigrator, CrossRBaseMigrator, CrossPythonMigrator, Build2HostMigrator, NoCondaInspectMigrator, ) from test_migrators import run_test_migration config_migrator = UpdateConfigSubGuessMigrator() guard_testing_migrator = GuardTestingMigrator() cmake_migrator = UpdateCMakeArgsMigrator() cross_python_migrator = CrossPythonMigrator() cross_rbase_migrator = CrossRBaseMigrator() b2h_migrator = Build2HostMigrator() nci_migrator = NoCondaInspectMigrator() version_migrator_autoconf = Version( set(), piggy_back_migrations=[ config_migrator, cmake_migrator, guard_testing_migrator ], ) version_migrator_cmake = Version( set(), piggy_back_migrations=[ cmake_migrator, guard_testing_migrator, cross_rbase_migrator, cross_python_migrator, ],
def initialize_migrators( github_username: str = "", github_password: str = "", github_token: Optional[str] = None, dry_run: bool = False, ) -> Tuple[MigratorSessionContext, list, MutableSequence[Migrator]]: temp = glob.glob("/tmp/*") gx = load_graph() smithy_version = eval_cmd("conda smithy --version").strip() pinning_version = json.loads( eval_cmd("conda list conda-forge-pinning --json"))[0]["version"] migrators = [] add_arch_migrate(migrators, gx) migration_factory(migrators, gx) add_replacement_migrator( migrators, gx, "matplotlib", "matplotlib-base", ("Unless you need `pyqt`, recipes should depend only on " "`matplotlib-base`."), alt_migrator=MatplotlibBase, ) create_migration_yaml_creator(migrators=migrators, gx=gx) print("rebuild migration graph sizes:", flush=True) for m in migrators: print( f' {getattr(m, "name", m)} graph size: ' f'{len(getattr(m, "graph", []))}', flush=True, ) print(" ", flush=True) mctx = MigratorSessionContext( circle_build_url=os.getenv("CIRCLE_BUILD_URL", ""), graph=gx, smithy_version=smithy_version, pinning_version=pinning_version, github_username=github_username, github_password=github_password, github_token=github_token, dry_run=dry_run, ) print("building package import maps and version migrator", flush=True) python_nodes = { n for n, v in mctx.graph.nodes("payload") if "python" in v.get("req", "") } python_nodes.update([ k for node_name, node in mctx.graph.nodes("payload") for k in node.get("outputs_names", []) if node_name in python_nodes ], ) version_migrator = Version( python_nodes=python_nodes, pr_limit=PR_LIMIT * 4, piggy_back_migrations=[ Jinja2VarsCleanup(), DuplicateLinesCleanup(), PipMigrator(), LicenseMigrator(), CondaForgeYAMLCleanup(), ExtraJinja2KeysCleanup(), Build2HostMigrator(), NoCondaInspectMigrator(), Cos7Config(), ], ) migrators = [version_migrator] + migrators print(" ", flush=True) return mctx, temp, migrators
def add_rebuild_migration_yaml( migrators: MutableSequence[Migrator], gx: nx.DiGraph, package_names: Sequence[str], output_to_feedstock: Mapping[str, str], excluded_feedstocks: MutableSet[str], migration_yaml: str, config: dict = {}, migration_name: str = "", pr_limit: int = PR_LIMIT, ) -> None: """Adds rebuild migrator. Parameters ---------- migrators : list of Migrator The list of migrators to run. gx : networkx.DiGraph The feedstock graph package_names : list of str The package who's pin was moved output_to_feedstock : dict of str Mapping of output name to feedstock name excluded_feedstocks : set of str Feedstock names which should never be included in the migration migration_yaml : str The raw yaml for the migration variant dict config: dict The __migrator contents of the migration migration_name: str Name of the migration pr_limit : int, optional The number of PRs per hour, defaults to 5 """ total_graph = create_rebuild_graph( gx, package_names, excluded_feedstocks, include_noarch=config.get("include_noarch", False), ) # Note at this point the graph is made of all packages that have a # dependency on the pinned package via Host, run, or test. # Some packages don't have a host section so we use their # build section in its place. feedstock_names = set() for p in package_names: feedstock_names |= output_to_feedstock.get(p, {p}) feedstock_names = {p for p in feedstock_names if p in gx.nodes} - excluded_feedstocks top_level = { node for node in {gx.successors(feedstock_name) for feedstock_name in feedstock_names} if (node in total_graph) and len(list(total_graph.predecessors(node))) == 0 } cycles = list(nx.simple_cycles(total_graph)) migrator = MigrationYaml( migration_yaml, graph=total_graph, pr_limit=pr_limit, name=migration_name, top_level=top_level, cycles=cycles, piggy_back_migrations=[ Jinja2VarsCleanup(), DuplicateLinesCleanup(), PipMigrator(), LicenseMigrator(), CondaForgeYAMLCleanup(), ExtraJinja2KeysCleanup(), Build2HostMigrator(), NoCondaInspectMigrator(), Cos7Config(), ], **config, ) print(f"bump number is {migrator.bump_number}\n", flush=True) migrators.append(migrator)