mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
8c70a464c4
Adds a new release-partner-repack-bouncer-sub-firefox task to add the partner products. This is forked from the main bouncer submission because it diverges sufficiently that this is a cleaner approach. The get_partners_to_be_published helper is used by aliases too. Depends on D34950 Differential Revision: https://phabricator.services.mozilla.com/D35481 --HG-- extra : moz-landing-system : lando
166 lines
5.9 KiB
Python
166 lines
5.9 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/.
|
|
"""
|
|
Add from parameters.yml into bouncer submission tasks.
|
|
"""
|
|
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import logging
|
|
|
|
from taskgraph.transforms.base import TransformSequence
|
|
from taskgraph.transforms.bouncer_submission import (
|
|
FTP_PLATFORMS_PER_BOUNCER_PLATFORM,
|
|
CONFIG_PER_BOUNCER_PRODUCT as CONFIG_PER_BOUNCER_PRODUCT_VANILLA,
|
|
_craft_ftp_product,
|
|
_craft_filename_product,
|
|
)
|
|
from taskgraph.util.partners import (
|
|
check_if_partners_enabled,
|
|
get_partners_to_be_published,
|
|
)
|
|
from taskgraph.util.schema import resolve_keyed_by
|
|
from taskgraph.util.scriptworker import get_release_config
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
PARTNER_PLATFORMS_TO_BOUNCER = {
|
|
"linux-shippable": "linux",
|
|
"linux64-shippable": "linux64",
|
|
"macosx64-shippable": "osx",
|
|
"win32-shippable": "win",
|
|
"win64-shippable": "win64",
|
|
"win64-aarch64-shippable": "win64-aarch64"
|
|
}
|
|
|
|
# :lang is interpolated by bouncer at runtime
|
|
RELEASES_PARTNERS_PATH_TEMPLATE = '/{ftp_product}/releases/partners/{partner}/{sub_config}/\
|
|
{version}/{ftp_platform}/:lang/{file}'
|
|
|
|
CONFIG_PER_BOUNCER_PRODUCT = {
|
|
'installer': {
|
|
'name_postfix': "-{partner}-{sub_config}",
|
|
'path_template': RELEASES_PARTNERS_PATH_TEMPLATE,
|
|
'file_names': CONFIG_PER_BOUNCER_PRODUCT_VANILLA['installer']['file_names']
|
|
},
|
|
'stub-installer': {
|
|
'name_postfix': "-{partner}-{sub_config}-stub",
|
|
# We currently have a sole win32 stub installer that is to be used
|
|
# in all windows platforms to toggle between full installers
|
|
'path_template': RELEASES_PARTNERS_PATH_TEMPLATE.replace('{ftp_platform}', 'win32'),
|
|
'file_names': CONFIG_PER_BOUNCER_PRODUCT_VANILLA['stub-installer']['file_names']
|
|
}
|
|
}
|
|
|
|
transforms = TransformSequence()
|
|
transforms.add(check_if_partners_enabled)
|
|
|
|
|
|
@transforms.add
|
|
def make_task_worker(config, jobs):
|
|
for job in jobs:
|
|
resolve_keyed_by(
|
|
job, 'worker-type', item_name=job['name'],
|
|
**{'release-level': config.params.release_level()}
|
|
)
|
|
resolve_keyed_by(
|
|
job, 'scopes', item_name=job['name'],
|
|
**{'release-level': config.params.release_level()}
|
|
)
|
|
resolve_keyed_by(
|
|
job, 'bouncer-products', item_name=job['name'],
|
|
**{'release-type': config.params['release_type']}
|
|
)
|
|
|
|
# the schema requires at least one locale but this will not be used
|
|
job['worker']['locales'] = ["fake"]
|
|
job['worker']['entries'] = craft_bouncer_entries(config, job)
|
|
|
|
del job['locales-file']
|
|
del job['bouncer-platforms']
|
|
del job['bouncer-products']
|
|
|
|
if job['worker']['entries']:
|
|
yield job
|
|
|
|
|
|
def craft_bouncer_entries(config, job):
|
|
release_config = get_release_config(config)
|
|
|
|
product = job['shipping-product']
|
|
current_version = release_config['version']
|
|
bouncer_products = job['bouncer-products']
|
|
|
|
partners = get_partners_to_be_published(config)
|
|
entries = {}
|
|
for partner, sub_config_name, platforms in partners:
|
|
platforms = [PARTNER_PLATFORMS_TO_BOUNCER[p] for p in platforms]
|
|
entries.update({
|
|
craft_partner_bouncer_product_name(product, bouncer_product, current_version,
|
|
partner, sub_config_name): {
|
|
'options': {
|
|
'add_locales': False, # partners may use different sets of locales
|
|
'ssl_only': craft_ssl_only(bouncer_product),
|
|
},
|
|
'paths_per_bouncer_platform': craft_paths_per_bouncer_platform(
|
|
product, bouncer_product, platforms, current_version, partner,
|
|
sub_config_name
|
|
),
|
|
}
|
|
for bouncer_product in bouncer_products
|
|
})
|
|
return entries
|
|
|
|
|
|
def craft_paths_per_bouncer_platform(product, bouncer_product, bouncer_platforms, current_version,
|
|
partner, sub_config):
|
|
paths_per_bouncer_platform = {}
|
|
for bouncer_platform in bouncer_platforms:
|
|
file_names_per_platform = CONFIG_PER_BOUNCER_PRODUCT[bouncer_product]['file_names']
|
|
file_name_template = file_names_per_platform.get(
|
|
bouncer_platform, file_names_per_platform.get('default', None)
|
|
)
|
|
if not file_name_template:
|
|
# Some bouncer product like stub-installer are only meant to be on Windows.
|
|
# Thus no default value is defined there
|
|
continue
|
|
|
|
file_name_product = _craft_filename_product(product)
|
|
file_name = file_name_template.format(
|
|
product=file_name_product,
|
|
pretty_product=file_name_product.capitalize(),
|
|
version=current_version,
|
|
)
|
|
|
|
path_template = CONFIG_PER_BOUNCER_PRODUCT[bouncer_product]['path_template']
|
|
file_relative_location = path_template.format(
|
|
ftp_product=_craft_ftp_product(product),
|
|
version=current_version,
|
|
ftp_platform=FTP_PLATFORMS_PER_BOUNCER_PLATFORM[bouncer_platform],
|
|
partner=partner,
|
|
sub_config=sub_config,
|
|
file=file_name,
|
|
)
|
|
|
|
paths_per_bouncer_platform[bouncer_platform] = file_relative_location
|
|
|
|
return paths_per_bouncer_platform
|
|
|
|
|
|
def craft_partner_bouncer_product_name(product, bouncer_product, current_version,
|
|
partner, sub_config):
|
|
postfix = CONFIG_PER_BOUNCER_PRODUCT[bouncer_product].get('name_postfix', '').format(
|
|
partner=partner,
|
|
sub_config=sub_config,
|
|
)
|
|
|
|
return '{product}-{version}{postfix}'.format(
|
|
product=product.capitalize(), version=current_version, postfix=postfix
|
|
)
|
|
|
|
|
|
def craft_ssl_only(bouncer_product):
|
|
return bouncer_product == "stub-installer"
|