This results in an identical Taskgraph diff. Differential Revision: https://phabricator.services.mozilla.com/D317114
95 lines
3.9 KiB
Python
95 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/.
|
|
"""
|
|
This transform constructs tasks generate conditioned profiles from
|
|
the condprof/kind.yml file
|
|
"""
|
|
|
|
from typing import Optional
|
|
|
|
from taskgraph.transforms.base import TransformSequence
|
|
from taskgraph.util.copy import deepcopy
|
|
from taskgraph.util.schema import Schema
|
|
|
|
from gecko_taskgraph.transforms.job import JobDescriptionSchema
|
|
from gecko_taskgraph.transforms.task import TaskDescriptionSchema
|
|
|
|
|
|
class DiffDescriptionSchema(Schema, kw_only=True):
|
|
# default is settled, but add 'full' to get both
|
|
scenarios: Optional[list[str]] = None
|
|
description: TaskDescriptionSchema.__annotations__["description"] = None
|
|
dependencies: TaskDescriptionSchema.__annotations__["dependencies"] = None
|
|
fetches: JobDescriptionSchema.__annotations__["fetches"] = None
|
|
index: TaskDescriptionSchema.__annotations__["index"] = None
|
|
task_from: Optional[str] = None
|
|
name: Optional[str] = None
|
|
run: JobDescriptionSchema.__annotations__["run"] = None
|
|
run_on_projects: TaskDescriptionSchema.__annotations__["run_on_projects"] = None
|
|
run_on_repo_type: TaskDescriptionSchema.__annotations__["run_on_repo_type"] = None
|
|
scopes: TaskDescriptionSchema.__annotations__["scopes"] = None
|
|
treeherder: TaskDescriptionSchema.__annotations__["treeherder"] = None
|
|
use_python: JobDescriptionSchema.__annotations__["use_python"] = None
|
|
worker: JobDescriptionSchema.__annotations__["worker"] = None
|
|
worker_type: TaskDescriptionSchema.__annotations__["worker_type"] = None
|
|
|
|
|
|
transforms = TransformSequence()
|
|
transforms.add_validate(DiffDescriptionSchema)
|
|
|
|
|
|
@transforms.add
|
|
def generate_scenarios(config, tasks):
|
|
for task in tasks:
|
|
cmds = task["run"]["command"]
|
|
symbol = task["treeherder"]["symbol"].split(")")[0]
|
|
index = task["index"]
|
|
jobname = index["job-name"]
|
|
label = task["name"]
|
|
run_as_root = task["run"].get("run-as-root", False)
|
|
|
|
for scenario in set(task["scenarios"]):
|
|
extra_args = ""
|
|
if scenario == "settled":
|
|
extra_args = " --force-new "
|
|
|
|
tcmd = cmds.replace("${EXTRA_ARGS}", extra_args)
|
|
tcmd = tcmd.replace("${SCENARIO}", scenario)
|
|
|
|
index["job-name"] = "%s-%s" % (jobname, scenario)
|
|
|
|
taskdesc = {
|
|
"name": "%s-%s" % (label, scenario),
|
|
"description": task["description"],
|
|
"treeherder": {
|
|
"symbol": "%s-%s)" % (symbol, scenario),
|
|
"platform": task["treeherder"]["platform"],
|
|
"kind": task["treeherder"]["kind"],
|
|
"tier": task["treeherder"]["tier"],
|
|
},
|
|
"worker-type": deepcopy(task["worker-type"]),
|
|
"worker": deepcopy(task["worker"]),
|
|
"index": deepcopy(index),
|
|
"run": {
|
|
"using": "run-task",
|
|
"clone-with": task["run"]["clone-with"],
|
|
"cwd": task["run"]["cwd"],
|
|
"checkout": task["run"]["checkout"],
|
|
"tooltool-downloads": deepcopy(task["run"]["tooltool-downloads"]),
|
|
"command": tcmd,
|
|
"run-as-root": run_as_root,
|
|
},
|
|
"run-on-projects": deepcopy(task["run-on-projects"]),
|
|
"run-on-repo-type": task.get("run-on-repo-type", ["git", "hg"]),
|
|
"scopes": deepcopy(task["scopes"]),
|
|
"dependencies": deepcopy(task["dependencies"]),
|
|
"fetches": deepcopy(task["fetches"]),
|
|
}
|
|
|
|
use_taskcluster_python = task.get("use-python", "system")
|
|
if use_taskcluster_python != "system":
|
|
taskdesc["use-python"] = use_taskcluster_python
|
|
|
|
yield taskdesc
|