diff --git a/conda_forge_tick/make_migrators.py b/conda_forge_tick/make_migrators.py index 10ccac12f..4fb9de8aa 100644 --- a/conda_forge_tick/make_migrators.py +++ b/conda_forge_tick/make_migrators.py @@ -35,7 +35,6 @@ ) from conda_forge_tick.migrators import ( AddNVIDIATools, - ArchRebuild, CDTMigrator, CombineV1ConditionsMigrator, CondaForgeYAMLCleanup, @@ -52,6 +51,7 @@ Jinja2VarsCleanup, LibboostMigrator, LicenseMigrator, + LinuxAarch64, MigrationYaml, Migrator, MiniMigrator, @@ -245,9 +245,9 @@ def add_arch_migrate(migrators: MutableSequence[Migrator], gx: nx.DiGraph) -> No The list of migrators to run. """ - with fold_log_lines("making aarch64+ppc64le migrator"): + with fold_log_lines("making aarch64 migrator"): migrators.append( - ArchRebuild( + LinuxAarch64( total_graph=gx, pr_limit=PR_LIMIT, ), diff --git a/conda_forge_tick/migrators/__init__.py b/conda_forge_tick/migrators/__init__.py index ff0193d98..c682af866 100644 --- a/conda_forge_tick/migrators/__init__.py +++ b/conda_forge_tick/migrators/__init__.py @@ -1,5 +1,5 @@ # flake8: noqa -from .arch import ArchRebuild, OSXArm, WinArm64 +from .arch import ArchRebuild, LinuxAarch64, OSXArm, WinArm64 from .broken_rebuild import RebuildBroken from .conda_forge_yaml_cleanup import CondaForgeYAMLCleanup from .core import ( diff --git a/conda_forge_tick/migrators/arch.py b/conda_forge_tick/migrators/arch.py index 6e0c92bec..ba26a393f 100644 --- a/conda_forge_tick/migrators/arch.py +++ b/conda_forge_tick/migrators/arch.py @@ -68,7 +68,11 @@ def _filter_stubby_and_ignored_nodes(graph, ignored_packages): class ArchRebuild(GraphMigrator): - """A Migrator that adds aarch64 and ppc64le builds to feedstocks.""" + """ + A Migrator that adds aarch64 and ppc64le builds to feedstocks. + + Note: Superseded by subclass LinuxAarch64Rebuild to skip ppc64le. + """ allowed_schema_versions = {0, 1} migrator_version = 1 @@ -86,6 +90,7 @@ class ArchRebuild(GraphMigrator): "linux_aarch64": "default", "linux_ppc64le": "default", } + list_filename = "arch_rebuild.txt" def __init__( self, @@ -100,7 +105,7 @@ def __init__( if total_graph is not None: if target_packages is None: # We are constraining the scope of this migrator - target_packages = load_target_packages("arch_rebuild.txt") + target_packages = load_target_packages(self.list_filename) outputs_lut = get_outputs_lut(total_graph, graph, effective_graph) @@ -199,8 +204,8 @@ def pr_body( body = super().pr_body(feedstock_ctx) body = body.format( dedent( - """\ - This feedstock is being rebuilt as part of the aarch64/ppc64le migration. + f"""\ + This feedstock is being rebuilt as part of the {"/".join(list(self.arches))} migration. **Feel free to merge the PR if CI is all green, but please don't close it without reaching out the the ARM migrators first at @conda-forge/arm-arch.** @@ -213,6 +218,23 @@ def remote_branch(self, feedstock_ctx: FeedstockContext) -> str: return super().remote_branch(feedstock_ctx) + "_arch" +class LinuxAarch64(ArchRebuild): + """A migrator to add linux-aarch64 to a feedstock.""" + + arches = {"linux_aarch64": "default"} + list_filename = "linux-aarch64.txt" + + def __init__(self, *args, **kwargs): + kwargs.setdefault("name", "linux aarch64 addition") + super().__init__(*args, **kwargs) + + def pr_title(self, feedstock_ctx: FeedstockContext) -> str: + return "Linux Aarch64 Migrator" + + def remote_branch(self, feedstock_ctx: FeedstockContext) -> str: + return super().remote_branch(feedstock_ctx) + "_linuxaarch64" + + class _CrossCompileRebuild(GraphMigrator): """A Migrator that adds arch platform builds to feedstocks.""" diff --git a/conda_forge_tick/models/pr_info.py b/conda_forge_tick/models/pr_info.py index d025b2b96..719001311 100644 --- a/conda_forge_tick/models/pr_info.py +++ b/conda_forge_tick/models/pr_info.py @@ -49,6 +49,7 @@ class MigratorName(StrEnum): VERSION = "Version" ARCH_REBUILD = "ArchRebuild" + LINUX_AARCH64 = "LinuxAarch64Rebuild" OSX_ARM = "OSXArm" WIN_ARM64 = "WinArm64" MIGRATION_YAML = "MigrationYaml" diff --git a/conda_forge_tick/status_report.py b/conda_forge_tick/status_report.py index 2de741cba..89da9a652 100644 --- a/conda_forge_tick/status_report.py +++ b/conda_forge_tick/status_report.py @@ -21,8 +21,8 @@ from conda_forge_tick.lazy_json_backends import LazyJson, get_all_keys_for_hashmap from conda_forge_tick.make_migrators import load_migrators from conda_forge_tick.migrators import ( - ArchRebuild, GraphMigrator, + LinuxAarch64, MatplotlibBase, MigrationYamlCreator, Migrator, @@ -505,7 +505,7 @@ def main(migrator_filter: str | list[str] | None = None) -> None: paused_status[migrator_name] = f"{migrator.name} Migration Status" elif ( mgconf.get("longterm", False) - or isinstance(migrator, ArchRebuild) + or isinstance(migrator, LinuxAarch64) or isinstance(migrator, OSXArm) or isinstance(migrator, WinArm64) ): diff --git a/tests/test_migrator_to_json.py b/tests/test_migrator_to_json.py index 2bbe98f7f..30e083906 100644 --- a/tests/test_migrator_to_json.py +++ b/tests/test_migrator_to_json.py @@ -222,12 +222,19 @@ def test_migrator_to_json_replacement(): assert dumps(migrator2.to_lazy_json_data()) == lzj_data -def test_migrator_to_json_arch(): +@pytest.mark.parametrize( + "MigratorCls,name", + ( + [conda_forge_tick.migrators.ArchRebuild, "aarch64andppc64leaddition"], + [conda_forge_tick.migrators.LinuxAarch64, "linuxaarch64addition"], + ), +) +def test_migrator_to_json_arch(MigratorCls, name): gx = nx.DiGraph() gx.add_node("conda", reqs=["python"], payload={}, blah="foo") gx.graph["outputs_lut"] = {} - migrator = conda_forge_tick.migrators.ArchRebuild( + migrator = MigratorCls( target_packages=["python"], pr_limit=5, total_graph=gx, @@ -238,14 +245,14 @@ def test_migrator_to_json_arch(): lzj_data = dumps(data) print("lazy json data:\n", lzj_data) assert data["__migrator__"] is True - assert data["class"] == "ArchRebuild" - assert data["name"] == "aarch64andppc64leaddition" + assert data["class"] == MigratorCls.__name__ + assert data["name"] == name migrator2 = make_from_lazy_json_data(loads(lzj_data)) assert [pgm.__class__.__name__ for pgm in migrator2.piggy_back_migrations] == [ pgm.__class__.__name__ for pgm in migrator.piggy_back_migrations ] - assert isinstance(migrator2, conda_forge_tick.migrators.ArchRebuild) + assert isinstance(migrator2, MigratorCls) assert dumps(migrator2.to_lazy_json_data()) == lzj_data