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