# 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")