beetmover_checksums.py (5070B)
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 Transform the checksums signing task into an actual task description. 6 """ 7 8 from taskgraph.transforms.base import TransformSequence 9 from taskgraph.util.dependencies import get_primary_dependency 10 from taskgraph.util.schema import Schema 11 from taskgraph.util.treeherder import replace_group 12 from voluptuous import Optional, Required 13 14 from gecko_taskgraph.transforms.beetmover import craft_release_properties 15 from gecko_taskgraph.transforms.task import task_description_schema 16 from gecko_taskgraph.util.attributes import copy_attributes_from_dependent_job 17 from gecko_taskgraph.util.scriptworker import ( 18 generate_beetmover_artifact_map, 19 generate_beetmover_upstream_artifacts, 20 get_beetmover_action_scope, 21 get_beetmover_bucket_scope, 22 ) 23 24 beetmover_checksums_description_schema = Schema({ 25 Required("attributes"): {str: object}, 26 Required("dependencies"): task_description_schema["dependencies"], 27 Optional("label"): str, 28 Optional("treeherder"): task_description_schema["treeherder"], 29 Optional("locale"): str, 30 Optional("shipping-phase"): task_description_schema["shipping-phase"], 31 Optional("shipping-product"): task_description_schema["shipping-product"], 32 Optional("task-from"): task_description_schema["task-from"], 33 Optional("run-on-repo-type"): task_description_schema["run-on-repo-type"], 34 }) 35 36 transforms = TransformSequence() 37 38 39 @transforms.add 40 def remove_name(config, jobs): 41 for job in jobs: 42 if "name" in job: 43 del job["name"] 44 yield job 45 46 47 transforms.add_validate(beetmover_checksums_description_schema) 48 49 50 @transforms.add 51 def make_beetmover_checksums_description(config, jobs): 52 for job in jobs: 53 dep_job = get_primary_dependency(config, job) 54 assert dep_job 55 attributes = dep_job.attributes 56 57 treeherder = job.get("treeherder", {}) 58 treeherder.setdefault( 59 "symbol", 60 replace_group(dep_job.task["extra"]["treeherder"]["symbol"], "BMcs"), 61 ) 62 dep_th_platform = ( 63 dep_job.task.get("extra", {}) 64 .get("treeherder", {}) 65 .get("machine", {}) 66 .get("platform", "") 67 ) 68 treeherder.setdefault("platform", f"{dep_th_platform}/opt") 69 treeherder.setdefault( 70 "tier", dep_job.task.get("extra", {}).get("treeherder", {}).get("tier", 1) 71 ) 72 treeherder.setdefault("kind", "build") 73 74 label = job["label"] 75 build_platform = attributes.get("build_platform") 76 77 description = ( 78 "Beetmover submission of checksums for locale '{locale}' for build '" 79 "{build_platform}/{build_type}'".format( 80 locale=attributes.get("locale", "en-US"), 81 build_platform=build_platform, 82 build_type=attributes.get("build_type"), 83 ) 84 ) 85 86 extra = {} 87 if "devedition" in build_platform: 88 extra["product"] = "devedition" 89 else: 90 extra["product"] = "firefox" 91 92 attributes = copy_attributes_from_dependent_job(dep_job) 93 attributes.update(job.get("attributes", {})) 94 95 if dep_job.attributes.get("locale"): 96 treeherder["symbol"] = "BMcs({})".format(dep_job.attributes.get("locale")) 97 attributes["locale"] = dep_job.attributes.get("locale") 98 99 bucket_scope = get_beetmover_bucket_scope(config) 100 action_scope = get_beetmover_action_scope(config) 101 102 task = { 103 "label": label, 104 "description": description, 105 "worker-type": "beetmover", 106 "scopes": [bucket_scope, action_scope], 107 "dependencies": job["dependencies"], 108 "attributes": attributes, 109 "run-on-projects": dep_job.attributes.get("run_on_projects"), 110 "run-on-repo-type": job.get("run-on-repo-type", ["git", "hg"]), 111 "treeherder": treeherder, 112 "extra": extra, 113 } 114 115 if "shipping-phase" in job: 116 task["shipping-phase"] = job["shipping-phase"] 117 118 if "shipping-product" in job: 119 task["shipping-product"] = job["shipping-product"] 120 121 yield task 122 123 124 @transforms.add 125 def make_beetmover_checksums_worker(config, jobs): 126 for job in jobs: 127 locale = job["attributes"].get("locale") 128 platform = job["attributes"]["build_platform"] 129 130 worker = { 131 "implementation": "beetmover", 132 "release-properties": craft_release_properties(config, job), 133 "upstream-artifacts": generate_beetmover_upstream_artifacts( 134 config, job, platform, locale 135 ), 136 "artifact-map": generate_beetmover_artifact_map( 137 config, job, platform=platform, locale=locale 138 ), 139 } 140 141 if locale: 142 worker["locale"] = locale 143 job["worker"] = worker 144 145 yield job