gecko-dev/taskcluster/taskgraph/transforms/chunk_partners.py
Tom Prince af51107381 Bug 1501776: [taskgraph] Make single_dep use primary-dependency to match multi_dep; r=aki
To make switching between `single_dep` and `multi_dep` easier, change
the `dependent-task` to `primary-dependency`.

Differential Revision: https://phabricator.services.mozilla.com/D9722

--HG--
extra : moz-landing-system : lando
2018-10-24 22:41:38 +00:00

58 lines
2.3 KiB
Python

# 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/.
"""
Chunk the partner repack tasks by subpartner and locale
"""
from __future__ import absolute_import, print_function, unicode_literals
import copy
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.partners import get_partner_config_by_kind, locales_per_build_platform
transforms = TransformSequence()
repack_ids_by_platform = {}
def _check_repack_ids_by_platform(platform, repack_id):
"""avoid dup chunks, since mac signing and repackages both chunk"""
if repack_ids_by_platform.get(platform, {}).get(repack_id):
return True
repack_ids_by_platform.setdefault(platform, {})['repack_id'] = True
@transforms.add
def chunk_partners(config, jobs):
partner_configs = get_partner_config_by_kind(config, config.kind)
for job in jobs:
dep_job = job['primary-dependency']
build_platform = dep_job.attributes["build_platform"]
# already chunked
if dep_job.task.get('extra', {}).get('repack_id'):
repack_id = dep_job.task['extra']['repack_id']
if _check_repack_ids_by_platform(build_platform, repack_id):
continue
partner_job = copy.deepcopy(job)
partner_job.setdefault('extra', {}).setdefault('repack_id', repack_id)
yield partner_job
continue
# not already chunked
for partner, partner_config in partner_configs.iteritems():
for sub_partner, cfg in partner_config.iteritems():
if build_platform not in cfg.get("platforms", []):
continue
locales = locales_per_build_platform(build_platform, cfg.get('locales', []))
for locale in locales:
repack_id = "{}/{}/{}".format(partner, sub_partner, locale)
if _check_repack_ids_by_platform(build_platform, repack_id):
continue
partner_job = copy.deepcopy(job) # don't overwrite dict values here
partner_job.setdefault('extra', {})
partner_job['extra']['repack_id'] = repack_id
yield partner_job