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