mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 05:39:41 +02:00
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
58 lines
2.3 KiB
Python
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
|