Source code

Revision control

Copy as Markdown

Other Tools

# 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/.
"""
Transform the reprocess-symbols task description template,
taskcluster/kinds/reprocess-symbols/job-template.yml into an actual task description.
"""
import logging
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.dependencies import get_dependencies, get_primary_dependency
from taskgraph.util.treeherder import inherit_treeherder_from_dep, join_symbol
from gecko_taskgraph.util.attributes import (
copy_attributes_from_dependent_job,
sorted_unique_list,
)
logger = logging.getLogger(__name__)
transforms = TransformSequence()
@transforms.add
def gather_required_signoffs(config, jobs):
for job in jobs:
job.setdefault("attributes", {})["required_signoffs"] = sorted_unique_list(
*(
dep.attributes.get("required_signoffs", [])
for dep in get_dependencies(config, job)
)
)
yield job
@transforms.add
def fill_template(config, tasks):
for task in tasks:
dep = get_primary_dependency(config, task)
assert dep
# Fill out the dynamic fields in the task description
task["label"] = dep.label + "-reprocess-symbols"
task["worker"]["env"]["GECKO_HEAD_REPOSITORY"] = config.params[
"head_repository"
]
task["worker"]["env"]["GECKO_HEAD_REV"] = config.params["head_rev"]
task["worker"]["env"]["CRASHSTATS_SECRET"] = task["worker"]["env"][
"CRASHSTATS_SECRET"
].format(level=config.params["level"])
attributes = copy_attributes_from_dependent_job(dep)
attributes.update(task.get("attributes", {}))
task["attributes"] = attributes
treeherder = inherit_treeherder_from_dep(task, dep)
th = dep.task["extra"]["treeherder"]
th_symbol = th.get("symbol")
th_groupsymbol = th.get("groupSymbol", "?")
# Disambiguate the treeherder symbol.
sym = "Rep" + (th_symbol[1:] if th_symbol.startswith("B") else th_symbol)
treeherder.setdefault("symbol", join_symbol(th_groupsymbol, sym))
task["treeherder"] = treeherder
task["run-on-projects"] = dep.attributes.get("run_on_projects")
task["optimization"] = {"reprocess-symbols": None}
task["if-dependencies"] = [task["attributes"]["primary-kind-dependency"]]
yield task