Ejemplo n.º 1
0
    None,
    Required('worker'):
    object,
    Required('treeherder'):
    object,
    Required('run-on-projects'):
    list,
    Required('deadline-after'):
    basestring,
})

validate_jobs_schema_transform = functools.partial(
    validate_jobs_schema_transform_partial,
    push_apk_breakpoint_description_schema, 'PushApkBreakpoint')

transforms.add(fill_labels_tranform)
transforms.add(validate_jobs_schema_transform)
transforms.add(validate_dependent_tasks_transform)


@transforms.add
def make_task_description(config, jobs):
    for job in jobs:
        job['dependencies'] = generate_dependencies(job['dependent-tasks'])

        worker_type = get_push_apk_breakpoint_worker_type(config)
        job['worker-type'] = worker_type

        job['worker']['payload'] = {} if 'human' in worker_type else {
            'image':
            'ubuntu:16.10',
Ejemplo n.º 2
0
Transform the partner repack task into an actual task description.
"""

from __future__ import absolute_import, print_function, unicode_literals

from taskgraph.transforms.base import TransformSequence
from taskgraph.util.schema import resolve_keyed_by
from taskgraph.util.scriptworker import get_release_config
from taskgraph.util.partners import (
    check_if_partners_enabled,
    get_partner_url_config,
    apply_partner_priority,
)

transforms = TransformSequence()
transforms.add(apply_partner_priority)


@transforms.add
def populate_repack_manifests_url(config, tasks):
    for task in tasks:
        partner_url_config = get_partner_url_config(config.params,
                                                    config.graph_config)

        for k in partner_url_config:
            if config.kind.startswith(k):
                task['worker'].setdefault('env', {})['REPACK_MANIFESTS_URL'] = \
                    partner_url_config[k]
                break
        else:
            raise Exception("Can't find partner REPACK_MANIFESTS_URL")
Ejemplo n.º 3
0
# 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/.
"""
Transform the signing task into an actual task description.
"""

from __future__ import absolute_import, print_function, unicode_literals

from taskgraph.transforms.base import TransformSequence
from taskgraph.util.attributes import copy_attributes_from_dependent_job
from taskgraph.util.partners import (get_partner_config_by_kind, check_if_partners_enabled)
from taskgraph.util.signed_artifacts import generate_specifications_of_artifacts_to_sign

transforms = TransformSequence()

transforms.add(check_if_partners_enabled)


@transforms.add
def set_mac_label(config, jobs):
    for job in jobs:
        dep_job = job['primary-dependency']
        job.setdefault('label', dep_job.label.replace('notarization-part-1', 'signing'))
        assert job['label'] != dep_job.label, "Unable to determine label for {}".format(
            config.kind
        )
        yield job


@transforms.add
def define_upstream_artifacts(config, jobs):
Ejemplo n.º 4
0
    Required('attributes'): object,
    Required('treeherder'): object,
    Required('run-on-projects'): list,
    Required('worker-type'): basestring,
    Required('worker'): object,
    Required('scopes'): None,
    Required('deadline-after'): basestring,
})

validate_jobs_schema_transform = functools.partial(
    validate_jobs_schema_transform_partial,
    push_apk_description_schema,
    'PushApk'
)

transforms.add(fill_labels_tranform)
transforms.add(validate_jobs_schema_transform)
transforms.add(validate_dependent_tasks_transform)


@transforms.add
def make_task_description(config, jobs):
    for job in jobs:
        job['dependencies'] = generate_dependencies(job['dependent-tasks'])
        job['worker']['upstream-artifacts'] = generate_upstream_artifacts(job['dependencies'])
        job['worker']['google-play-track'] = get_push_apk_track(config)
        job['worker']['dry-run'] = get_push_apk_dry_run_option(config)

        rollout_percentage = get_push_apk_rollout_percentage(config)
        if rollout_percentage is not None:
            job['worker']['rollout-percentage'] = rollout_percentage
Ejemplo n.º 5
0
        Required('treeherder'):
        task_description_schema['treeherder'],
        Required('package-name'):
        optionally_keyed_by('project', basestring),
        Required('run-on-projects'):
        task_description_schema['run-on-projects'],
        Required('worker-type'):
        basestring,
        Required('worker'):
        object,
        Required('shipping-phase'):
        task_description_schema['shipping-phase'],
        Required('shipping-product'):
        task_description_schema['shipping-product'],
    }))
transforms.add(validate_dependent_tasks)
transforms.add(set_worker_data)


@transforms.add
def make_task_description(config, jobs):
    for job in jobs:
        job['dependencies'] = generate_dependencies(job['dependent-tasks'])
        dependencies_labels = job['dependencies'].keys()

        resolve_keyed_by(job,
                         'package-name',
                         item_name=job['name'],
                         project=config.params['project'])

        commands = [
Ejemplo n.º 6
0
Chunk the partner repack tasks by subpartner and locale
"""

from __future__ import absolute_import, print_function, unicode_literals

import copy

from mozbuild.chunkify import chunkify
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.partners import (
    get_repack_ids_by_platform,
    apply_partner_priority,
)

transforms = TransformSequence()
transforms.add(apply_partner_priority)


@transforms.add
def chunk_partners(config, jobs):
    for job in jobs:
        dep_job = job["primary-dependency"]
        build_platform = dep_job.attributes["build_platform"]
        repack_id = dep_job.task.get("extra", {}).get("repack_id")
        repack_ids = dep_job.task.get("extra", {}).get("repack_ids")
        copy_repack_ids = job.pop("copy-repack-ids", False)

        if copy_repack_ids:
            assert repack_ids, "dep_job {} doesn't have repack_ids!".format(
                dep_job.label)
            job.setdefault("extra", {})["repack_ids"] = repack_ids
Ejemplo n.º 7
0
        ]

        check_apks_command = (
            'python3 ./mozapkpublisher/check_apks.py --expected-package-name "{}" {}'
            .format(
                job['package-name'], ' '.join([
                    '"<{}>.apk"'.format(task_label)
                    for task_label in dependencies_labels
                ])))
        commands.append(check_apks_command)

        job['worker']['command'] = [
            '/bin/bash',
            '-cx',
            {
                'task-reference': ' && '.join(commands)
            },
        ]

        yield job


@transforms.add
def delete_non_required_fields_(config, jobs):
    for job in jobs:
        del job['package-name']
        yield job


transforms.add(delete_non_required_fields)
Ejemplo n.º 8
0
    Required('attributes'): task_description_schema['attributes'],
    Required('treeherder'): task_description_schema['treeherder'],
    Required('run-on-projects'): task_description_schema['run-on-projects'],
    Required('shipping-phase'): task_description_schema['shipping-phase'],
    Required('shipping-product'): task_description_schema['shipping-product'],
    Required('worker-type'): task_description_schema['worker-type'],
    Required('worker'): object,
})

validate_jobs_schema_transform = functools.partial(
    validate_jobs_schema_transform_partial,
    google_play_description_schema,
    'GooglePlayStrings'
)

transforms.add(fill_labels_tranform)
transforms.add(validate_jobs_schema_transform)


@transforms.add
def set_worker_data(config, jobs):
    for job in jobs:
        worker = job['worker']

        env = worker.setdefault('env', {})
        resolve_keyed_by(
            env, 'PACKAGE_NAME', item_name=job['name'],
            project=config.params['project']
        )

        yield job