bouncer_aliases.py (3460B)
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 Add from parameters.yml into bouncer submission tasks. 6 """ 7 8 import logging 9 10 from taskgraph.transforms.base import TransformSequence 11 from taskgraph.util.schema import resolve_keyed_by 12 13 from gecko_taskgraph.transforms.bouncer_submission import craft_bouncer_product_name 14 from gecko_taskgraph.transforms.bouncer_submission_partners import ( 15 craft_partner_bouncer_product_name, 16 ) 17 from gecko_taskgraph.util.attributes import release_level 18 from gecko_taskgraph.util.partners import get_partners_to_be_published 19 from gecko_taskgraph.util.scriptworker import get_release_config 20 21 logger = logging.getLogger(__name__) 22 23 transforms = TransformSequence() 24 25 26 @transforms.add 27 def make_task_worker(config, jobs): 28 for job in jobs: 29 resolve_keyed_by( 30 job, 31 "worker-type", 32 item_name=job["name"], 33 **{"release-level": release_level(config.params)}, 34 ) 35 resolve_keyed_by( 36 job, 37 "scopes", 38 item_name=job["name"], 39 **{"release-level": release_level(config.params)}, 40 ) 41 resolve_keyed_by( 42 job, 43 "bouncer-products-per-alias", 44 item_name=job["name"], 45 **{"release-type": config.params["release_type"]}, 46 ) 47 if "partner-bouncer-products-per-alias" in job: 48 resolve_keyed_by( 49 job, 50 "partner-bouncer-products-per-alias", 51 item_name=job["name"], 52 **{"release-type": config.params["release_type"]}, 53 ) 54 55 job["worker"]["entries"] = craft_bouncer_entries(config, job) 56 57 del job["bouncer-products-per-alias"] 58 if "partner-bouncer-products-per-alias" in job: 59 del job["partner-bouncer-products-per-alias"] 60 61 if job["worker"]["entries"]: 62 yield job 63 else: 64 logger.warning( 65 'No bouncer entries defined in bouncer submission task for "{}". \ 66 Job deleted.'.format(job["name"]) 67 ) 68 69 70 def craft_bouncer_entries(config, job): 71 release_config = get_release_config(config) 72 73 product = job["shipping-product"] 74 current_version = release_config["version"] 75 bouncer_products_per_alias = job["bouncer-products-per-alias"] 76 77 entries = { 78 bouncer_alias: craft_bouncer_product_name( 79 product, 80 bouncer_product, 81 current_version, 82 ) 83 for bouncer_alias, bouncer_product in bouncer_products_per_alias.items() 84 } 85 86 partner_bouncer_products_per_alias = job.get("partner-bouncer-products-per-alias") 87 if partner_bouncer_products_per_alias: 88 partners = get_partners_to_be_published(config) 89 for partner, sub_config_name, _ in partners: 90 entries.update({ 91 bouncer_alias.replace( 92 "PARTNER", f"{partner}-{sub_config_name}" 93 ): craft_partner_bouncer_product_name( 94 product, 95 bouncer_product, 96 current_version, 97 partner, 98 sub_config_name, 99 ) 100 for bouncer_alias, bouncer_product in partner_bouncer_products_per_alias.items() # NOQA: E501 101 }) 102 103 return entries