# 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 collections
import defaultdict
from taskgraph.transforms.base
import TransformSequence
from taskgraph.util.dependencies
import get_primary_dependency
from gecko_taskgraph.util.scriptworker
import (
generate_artifact_registry_gcs_sources_rpm,
get_beetmover_repo_action_scope,
get_beetmover_yum_repo_scope,
)
transforms = TransformSequence()
@transforms.add
def beetmover_rpm(config, tasks):
products_tasks = defaultdict(
lambda: [])
for task
in tasks:
dep = get_primary_dependency(config, task)
assert dep
product = dep.attributes.get(
"shipping_product")
products_tasks[product].append(task)
for product, product_tasks
in products_tasks.items():
dependencies = {}
gcs_sources = []
for task
in product_tasks:
dep = get_primary_dependency(config, task)
assert dep
dependencies[dep.label] = dep.label
gcs_sources.extend(generate_artifact_registry_gcs_sources_rpm(dep))
description = f
"Beetmover YUM submission for the {config.params['release_type']} {product} .rpm packages"
platform = f
"{product}-release/opt"
treeherder = {
"platform": platform,
"tier":
1,
"kind":
"other",
"symbol":
"BM-rpm",
}
yum_repo_scope = get_beetmover_yum_repo_scope(config)
repo_action_scope = get_beetmover_repo_action_scope(config)
attributes = {
"shippable":
True,
"shipping_product": product,
}
worker = {
"implementation":
"beetmover-import-from-gcs-to-artifact-registry",
"product": product,
"gcs-sources": gcs_sources,
}
task = {
"label": f
"{config.kind}-{platform}",
"description": description,
"worker-type":
"beetmover",
"treeherder": treeherder,
"scopes": [yum_repo_scope, repo_action_scope],
"attributes": attributes,
"shipping-phase":
"ship",
"shipping-product": product,
"dependencies": dependencies,
"worker": worker,
}
yield task