# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. from taskgraph.transforms.base import TransformSequence from gecko_taskgraph.util.platforms import architecture from gecko_taskgraph.util.scriptworker import ( generate_artifact_registry_gcs_sources, get_beetmover_apt_repo_scope, get_beetmover_repo_action_scope, ) transforms = TransformSequence() @transforms.add def filter_out_extra_langpacks(config, tasks): """Langpacks are architecture-independent so we only upload them from the x86_64 tasks""" for task in tasks: deps = list(task["dependencies"]) for dep in deps: dep_task = config.kind_dependencies_tasks[task["dependencies"][dep]] if not filter_beetmover_apt_dep(dep_task): del task["dependencies"][dep] yield task @transforms.add def beetmover_apt(config, tasks): apt_repo_scope = get_beetmover_apt_repo_scope(config) repo_action_scope = get_beetmover_repo_action_scope(config) for task in tasks: product = task["attributes"]["shipping_product"] gcs_sources = [] for dep_label in task["dependencies"].values(): dep = config.kind_dependencies_tasks[dep_label] gcs_sources.extend(generate_artifact_registry_gcs_sources(dep)) description = f"Beetmover APT submissions for the {product} {config.params['release_type']} .deb packages" task.update({ "label": f"{config.kind}-{product}", "description": description, "scopes": [apt_repo_scope, repo_action_scope], }) task.setdefault("worker", {}).update({ "product": task["attributes"]["shipping_product"], "gcs-sources": gcs_sources, }) task.setdefault("treeherder", {})["platform"] = f"{product}-release/opt" yield task def filter_beetmover_apt_dep(task): # We only create beetmover-apt tasks for l10n beetmover-repackage tasks that # beetmove langpack .deb packages. The langpack .deb packages support all # architectures, so we generate them only on x86_64 tasks. return is_x86_64_l10n_task(task) or is_not_l10n_task(task) def is_x86_64_l10n_task(task): locale = task.attributes.get("locale") return locale and architecture(task.attributes["build_platform"]) == "x86_64" def is_not_l10n_task(task): return not task.attributes.get("locale")