taskcluster/taskgraph/transforms/build_attrs.py
author Narcis Beleuzu <nbeleuzu@mozilla.com>
Sat, 19 Jun 2021 07:06:41 +0300
changeset 583818 668013f3e2015d408903d31f55d2ffdd08137bfd
parent 554551 994ae8e4833c90447d91f0e26a718573cff5a514
permissions -rw-r--r--
Backed out 2 changesets (bug 1701770) for causing tp5n crashes. Backed out changeset 2351f158ef88 (bug 1701770) Backed out changeset 4af044ed9208 (bug 1701770)

# 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/.
from __future__ import absolute_import, print_function, unicode_literals

from taskgraph.transforms.base import TransformSequence
from taskgraph.util.platforms import platform_family

transforms = TransformSequence()


@transforms.add
def set_build_attributes(config, jobs):
    """
    Set the build_platform and build_type attributes based on the job name.
    Although not all jobs using this transform are actual "builds", the try
    option syntax treats them as such, and this arranges the attributes
    appropriately for that purpose.
    """
    for job in jobs:
        build_platform, build_type = job["name"].split("/")

        # pgo builds are represented as a different platform, type opt
        if build_type == "pgo":
            build_platform = build_platform + "-pgo"
            build_type = "opt"

        attributes = job.setdefault("attributes", {})
        attributes.update(
            {
                "build_platform": build_platform,
                "build_type": build_type,
            }
        )

        yield job


@transforms.add
def set_schedules_optimization(config, jobs):
    """Set the `skip-unless-affected` optimization based on the build platform."""
    for job in jobs:
        # don't add skip-unless-schedules if there's already a when defined
        if "when" in job:
            yield job
            continue

        build_platform = job["attributes"]["build_platform"]
        job.setdefault("optimization", {"build": [platform_family(build_platform)]})
        yield job