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 9from taskgraph.transforms.base import TransformSequence 10from taskgraph.util.scriptworker import get_release_config 11from taskgraph.util.schema import ( 12 resolve_keyed_by, 13) 14 15import logging 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", "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 35def 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("--previous-version={}".format(partial.split("build")[0].strip())) 44 45 for job in jobs: 46 job["run"]["mach"].extend(extra_params) 47 yield job 48 49 50@transforms.add 51def handle_keyed_by(config, jobs): 52 """Resolve fields that can be keyed by project, etc.""" 53 fields = [ 54 "run.config", 55 "run.product-field", 56 "run.extra-config", 57 ] 58 59 release_config = get_release_config(config) 60 version = release_config["version"] 61 62 for job in jobs: 63 for field in fields: 64 resolve_keyed_by(item=job, field=field, item_name=job['name'], 65 project=config.params['project']) 66 67 for cfg in job["run"]["config"]: 68 job["run"]["mach"].extend(["--config", cfg]) 69 70 if config.kind == "cron-bouncer-check": 71 job["run"]["mach"].extend([ 72 "--product-field={}".format(job["run"]["product-field"]), 73 "--products-url={}".format(job["run"]["products-url"]), 74 ]) 75 del job["run"]["product-field"] 76 del job["run"]["products-url"] 77 elif config.kind == "release-bouncer-check": 78 job["run"]["mach"].append("--version={}".format(version)) 79 80 del job["run"]["config"] 81 82 if 'extra-config' in job['run']: 83 env = job['worker'].setdefault('env', {}) 84 env['EXTRA_MOZHARNESS_CONFIG'] = json.dumps(job['run']['extra-config']) 85 del job["run"]["extra-config"] 86 87 yield job 88 89 90@transforms.add 91def command_to_string(config, jobs): 92 """Convert command to string to make it work properly with run-task""" 93 for job in jobs: 94 job["run"]["mach"] = ' '.join(map(shell_quote, job["run"]["mach"])) 95 yield job 96