bouncer_check.py (3273B)
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 import logging 6 from shlex import quote as shell_quote 7 8 from taskgraph.transforms.base import TransformSequence 9 from taskgraph.util import json 10 from taskgraph.util.schema import resolve_keyed_by 11 12 from gecko_taskgraph.util.attributes import release_level 13 from gecko_taskgraph.util.scriptworker import get_release_config 14 15 logger = logging.getLogger(__name__) 16 17 transforms = TransformSequence() 18 19 20 @transforms.add 21 def add_command(config, jobs): 22 for job in jobs: 23 command = [ 24 "python", 25 "testing/mozharness/scripts/release/bouncer_check.py", 26 ] 27 job["run"].update({ 28 "using": "mach", 29 "mach": command, 30 }) 31 yield job 32 33 34 @transforms.add 35 def add_previous_versions(config, jobs): 36 release_config = get_release_config(config) 37 if not release_config.get("partial_versions"): 38 for job in jobs: 39 yield job 40 else: 41 extra_params = [] 42 for partial in release_config["partial_versions"].split(","): 43 extra_params.append( 44 "--previous-version={}".format(partial.split("build")[0].strip()) 45 ) 46 47 for job in jobs: 48 job["run"]["mach"].extend(extra_params) 49 yield job 50 51 52 @transforms.add 53 def handle_keyed_by(config, jobs): 54 """Resolve fields that can be keyed by project, etc.""" 55 fields = [ 56 "run.config", 57 "run.product-field", 58 "run.extra-config", 59 ] 60 61 release_config = get_release_config(config) 62 version = release_config["version"] 63 64 for job in jobs: 65 for field in fields: 66 resolve_keyed_by( 67 item=job, 68 field=field, 69 item_name=job["name"], 70 **{ 71 "project": config.params["project"], 72 "release-level": release_level(config.params), 73 "release-type": config.params["release_type"], 74 }, 75 ) 76 77 for cfg in job["run"]["config"]: 78 job["run"]["mach"].extend(["--config", cfg]) 79 80 if config.kind == "cron-bouncer-check": 81 job["run"]["mach"].extend([ 82 "--product-field={}".format(job["run"]["product-field"]), 83 "--products-url={}".format(job["run"]["products-url"]), 84 ]) 85 del job["run"]["product-field"] 86 del job["run"]["products-url"] 87 elif config.kind == "release-bouncer-check": 88 job["run"]["mach"].append(f"--version={version}") 89 90 del job["run"]["config"] 91 92 if "extra-config" in job["run"]: 93 env = job["worker"].setdefault("env", {}) 94 env["EXTRA_MOZHARNESS_CONFIG"] = json.dumps( 95 job["run"]["extra-config"], sort_keys=True 96 ) 97 del job["run"]["extra-config"] 98 99 yield job 100 101 102 @transforms.add 103 def command_to_string(config, jobs): 104 """Convert command to string to make it work properly with run-task""" 105 for job in jobs: 106 job["run"]["mach"] = " ".join(map(shell_quote, job["run"]["mach"])) 107 yield job