summaryrefslogtreecommitdiffstats
path: root/taskcluster/gecko_taskgraph/transforms/bouncer_aliases.py
blob: ffa28546c5e875cd317b7ebc291fe95eb5a77627 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
Add from parameters.yml into bouncer submission tasks.
"""


import logging

from taskgraph.transforms.base import TransformSequence
from taskgraph.util.schema import resolve_keyed_by

from gecko_taskgraph.transforms.bouncer_submission import craft_bouncer_product_name
from gecko_taskgraph.transforms.bouncer_submission_partners import (
    craft_partner_bouncer_product_name,
)
from gecko_taskgraph.util.attributes import release_level
from gecko_taskgraph.util.partners import get_partners_to_be_published
from gecko_taskgraph.util.scriptworker import get_release_config

logger = logging.getLogger(__name__)

transforms = TransformSequence()


@transforms.add
def make_task_worker(config, jobs):
    for job in jobs:
        resolve_keyed_by(
            job,
            "worker-type",
            item_name=job["name"],
            **{"release-level": release_level(config.params["project"])},
        )
        resolve_keyed_by(
            job,
            "scopes",
            item_name=job["name"],
            **{"release-level": release_level(config.params["project"])},
        )
        resolve_keyed_by(
            job,
            "bouncer-products-per-alias",
            item_name=job["name"],
            project=config.params["project"],
        )
        if "partner-bouncer-products-per-alias" in job:
            resolve_keyed_by(
                job,
                "partner-bouncer-products-per-alias",
                item_name=job["name"],
                project=config.params["project"],
            )

        job["worker"]["entries"] = craft_bouncer_entries(config, job)

        del job["bouncer-products-per-alias"]
        if "partner-bouncer-products-per-alias" in job:
            del job["partner-bouncer-products-per-alias"]

        if job["worker"]["entries"]:
            yield job
        else:
            logger.warn(
                'No bouncer entries defined in bouncer submission task for "{}". \
Job deleted.'.format(
                    job["name"]
                )
            )


def craft_bouncer_entries(config, job):
    release_config = get_release_config(config)

    product = job["shipping-product"]
    current_version = release_config["version"]
    bouncer_products_per_alias = job["bouncer-products-per-alias"]

    entries = {
        bouncer_alias: craft_bouncer_product_name(
            product,
            bouncer_product,
            current_version,
        )
        for bouncer_alias, bouncer_product in bouncer_products_per_alias.items()
    }

    partner_bouncer_products_per_alias = job.get("partner-bouncer-products-per-alias")
    if partner_bouncer_products_per_alias:
        partners = get_partners_to_be_published(config)
        for partner, sub_config_name, _ in partners:
            entries.update(
                {
                    bouncer_alias.replace(
                        "PARTNER", f"{partner}-{sub_config_name}"
                    ): craft_partner_bouncer_product_name(
                        product,
                        bouncer_product,
                        current_version,
                        partner,
                        sub_config_name,
                    )
                    for bouncer_alias, bouncer_product in partner_bouncer_products_per_alias.items()  # NOQA: E501
                }
            )

    return entries