fune/taskcluster/taskgraph/transforms/iris.py
Andrew Halberstadt d024a31639 Bug 1726573 - Run 'pyupgrade --py36-plus' on taskcluster/taskgraph directory, r=taskgraph-reviewers,bhearsum
This patch was generated via:

  $ pyupgrade --py36-plus $(find taskcluster/taskgraph -name "*.py" -type f)
  $ autoflake --remove-all-unused-imports -i $(find taskcluster/taskgraph -name "*.py" -type f)

The same set of commands are being applied to standalone taskgraph as well so
they remain in sync.

Differential Revision: https://phabricator.services.mozilla.com/D123234
2021-08-24 19:35:46 +00:00

124 lines
3.9 KiB
Python

# 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/.
"""
Take the base iris task definition and generate all of the actual test chunks
for all combinations of test categories and test platforms.
"""
from copy import deepcopy
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.schema import resolve_keyed_by
transforms = TransformSequence()
@transforms.add
def make_iris_tasks(config, jobs):
# Each platform will get a copy of the test categories
platforms = config.config.get("iris-build-platforms")
# The fields needing to be resolve_keyed_by'd
fields = [
"dependencies.build",
"fetches.build",
"run.command",
"run-on-projects",
"treeherder.platform",
"worker.docker-image",
"worker.artifacts",
"worker.env.PATH",
"worker.max-run-time",
"worker-type",
]
for job in jobs:
for platform in platforms:
# Make platform-specific clones of each iris task
clone = deepcopy(job)
basename = clone["name"]
clone["description"] = clone["description"].format(basename)
clone["name"] = clone["name"] + "-" + platform
# resolve_keyed_by picks the correct values based on
# the `by-platform` keys in the task definitions
for field in fields:
resolve_keyed_by(
clone,
field,
clone["name"],
**{
"platform": platform,
},
)
# iris uses this to select the tests to run in this chunk
clone["worker"]["env"]["CURRENT_TEST_DIR"] = basename
# Clean up some entries when they aren't needed
if clone["worker"]["docker-image"] is None:
del clone["worker"]["docker-image"]
if clone["worker"]["env"]["PATH"] is None:
del clone["worker"]["env"]["PATH"]
yield clone
@transforms.add
def fill_email_data(config, tasks):
format_kwargs = {
"head_rev": config.params["head_rev"],
"project": config.params["project"],
"th_root": "https://treeherder.mozilla.org/#/",
"tiers": "&tier=1%2C2%2C3",
}
for task in tasks:
format_kwargs["task_name"] = task["name"]
format_kwargs["filterstring"] = "&searchStr=iris%20{}".format(task["name"])
format_kwargs["chunk"] = task["worker"]["env"]["CURRENT_TEST_DIR"]
resolve_keyed_by(
task,
"notify.email",
item_name=task["name"],
**{
"project": config.params["project"],
},
)
email = task["notify"].get("email")
if email:
email["link"]["href"] = email["link"]["href"].format(**format_kwargs)
email["subject"] = email["subject"].format(**format_kwargs)
yield task
@transforms.add
def add_notify_email(config, tasks):
for task in tasks:
notify = task.pop("notify", {})
email_config = notify.get("email")
if email_config:
extra = task.setdefault("extra", {})
notify = extra.setdefault("notify", {})
notify["email"] = {
"subject": email_config["subject"],
"content": email_config["message"],
"link": email_config.get("link", None),
}
routes = task.setdefault("routes", [])
routes.extend(
[
f"notify.email.{address}.on-{reason}"
for address in email_config["emails"]
for reason in email_config["on-reasons"]
]
)
yield task