beetmover.py (2562B)
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 import os 7 8 from taskgraph.transforms.base import TransformSequence 9 from taskgraph.util.dependencies import get_dependencies 10 from taskgraph.util.schema import resolve_keyed_by 11 12 from .build_components import craft_path_version, get_nightly_version 13 14 transforms = TransformSequence() 15 16 17 @transforms.add 18 def resolve_keys(config, tasks): 19 for task in tasks: 20 for key in ( 21 "treeherder.symbol", 22 "worker.bucket", 23 "worker.beetmover-application-name", 24 ): 25 resolve_keyed_by( 26 task, 27 key, 28 item_name=task["name"], 29 **{ 30 "build-type": task["attributes"]["build-type"], 31 "level": config.params["level"], 32 }, 33 ) 34 yield task 35 36 37 @transforms.add 38 def set_artifact_map(config, tasks): 39 version = config.params["version"] 40 nightly_version = get_nightly_version(config, version) 41 42 for task in tasks: 43 maven_destination = task.pop("maven-destination") 44 deps = get_dependencies(config, task) 45 task["worker"]["artifact-map"] = [ 46 { 47 "paths": { 48 artifact_path: { 49 "destinations": [ 50 maven_destination.format( 51 component=task["attributes"]["component"], 52 version=craft_path_version( 53 version, 54 task["attributes"]["build-type"], 55 nightly_version, 56 ), 57 artifact_file_name=os.path.basename(artifact_path), 58 ) 59 ] 60 } 61 for artifact_path in dep.attributes["artifacts"].values() 62 }, 63 "taskId": {"task-reference": f"<{dep.kind}>"}, 64 } 65 for dep in deps 66 ] 67 68 yield task 69 70 71 @transforms.add 72 def add_version(config, tasks): 73 version = config.params["version"] 74 nightly_version = get_nightly_version(config, version) 75 76 for task in tasks: 77 task["worker"]["version"] = craft_path_version( 78 version, task["attributes"]["build-type"], nightly_version 79 ) 80 yield task