release_flatpak_push.py (2978B)
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 release-flatpak-push kind into an actual task description. 6 """ 7 8 from taskgraph.transforms.base import TransformSequence 9 from taskgraph.util.schema import Schema, optionally_keyed_by, resolve_keyed_by 10 from voluptuous import Optional, Required 11 12 from gecko_taskgraph.transforms.task import task_description_schema 13 from gecko_taskgraph.util.attributes import release_level 14 from gecko_taskgraph.util.scriptworker import add_scope_prefix 15 16 push_flatpak_description_schema = Schema({ 17 Required("name"): str, 18 Required("task-from"): task_description_schema["task-from"], 19 Required("dependencies"): task_description_schema["dependencies"], 20 Required("description"): task_description_schema["description"], 21 Required("treeherder"): task_description_schema["treeherder"], 22 Required("run-on-projects"): task_description_schema["run-on-projects"], 23 Required("worker-type"): optionally_keyed_by("release-level", str), 24 Required("worker"): object, 25 Optional("scopes"): [str], 26 Required("shipping-phase"): task_description_schema["shipping-phase"], 27 Required("shipping-product"): task_description_schema["shipping-product"], 28 Required("flathub-scope"): str, 29 Optional("extra"): task_description_schema["extra"], 30 Optional("attributes"): task_description_schema["attributes"], 31 Optional("run-on-repo-type"): task_description_schema["run-on-repo-type"], 32 }) 33 34 transforms = TransformSequence() 35 transforms.add_validate(push_flatpak_description_schema) 36 37 38 @transforms.add 39 def make_task_description(config, jobs): 40 for job in jobs: 41 if len(job["dependencies"]) != 1: 42 raise Exception("Exactly 1 dependency is required") 43 44 job["worker"]["upstream-artifacts"] = generate_upstream_artifacts( 45 job["dependencies"] 46 ) 47 48 resolve_keyed_by( 49 job, 50 "worker.channel", 51 item_name=job["name"], 52 **{"release-type": config.params["release_type"]}, 53 ) 54 resolve_keyed_by( 55 job, 56 "worker-type", 57 item_name=job["name"], 58 **{"release-level": release_level(config.params)}, 59 ) 60 if release_level(config.params) == "production": 61 job.setdefault("scopes", []).append( 62 add_scope_prefix( 63 config, 64 "{}:{}".format(job["flathub-scope"], job["worker"]["channel"]), 65 ) 66 ) 67 del job["flathub-scope"] 68 69 yield job 70 71 72 def generate_upstream_artifacts(dependencies): 73 return [ 74 { 75 "taskId": {"task-reference": f"<{task_kind}>"}, 76 "taskType": "build", 77 "paths": ["public/build/target.flatpak.tar.xz"], 78 } 79 for task_kind in dependencies.keys() 80 ]