treeherder.py (1753B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 6 from taskgraph.transforms.base import TransformSequence 7 from taskgraph.util.dependencies import get_dependencies, get_primary_dependency 8 from taskgraph.util.schema import resolve_keyed_by 9 from taskgraph.util.treeherder import inherit_treeherder_from_dep, join_symbol 10 11 transforms = TransformSequence() 12 13 14 @transforms.add 15 def resolve_keys(config, tasks): 16 for task in tasks: 17 if not task["attributes"].get("build-type"): 18 task["attributes"]["build-type"] = task["name"] 19 20 resolve_keyed_by( 21 task, 22 "treeherder.symbol", 23 item_name=task["name"], 24 **{ 25 "build-type": task["attributes"]["build-type"], 26 "level": config.params["level"], 27 }, 28 ) 29 yield task 30 31 32 @transforms.add 33 def build_treeherder_definition(config, tasks): 34 for task in tasks: 35 primary_dep = get_primary_dependency(config, task) 36 if not primary_dep and task.get("primary-dependency"): 37 primary_dep = task.pop("primary-dependency") 38 39 elif not primary_dep: 40 deps = list(get_dependencies(config, task)) 41 primary_dep = deps[0] 42 43 task.setdefault("treeherder", {}).update( 44 inherit_treeherder_from_dep(task, primary_dep) 45 ) 46 task_group = primary_dep.task["extra"]["treeherder"].get("groupSymbol", "?") 47 job_symbol = task["treeherder"].pop("symbol") 48 full_symbol = join_symbol(task_group, job_symbol) 49 task["treeherder"]["symbol"] = full_symbol 50 51 yield task