Files
tubestation/taskcluster/taskgraph/transforms/beetmover_cdns.py
Aki Sasaki 354b0684f2 bug 1412690 - add task dependencies. r=rail
This patch adds the `release_deps` transform, which adds every
kind-dependency task that has the same product as a task dependency
(with some exceptions).

This patch made it clear that we need a standard way of defining
product.

MozReview-Commit-ID: 4xOJRQSCTgF
2017-10-29 17:40:50 -07:00

100 lines
3.4 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/.
"""
Transform the beetmover-cdns task into a task description.
"""
from __future__ import absolute_import, print_function, unicode_literals
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.schema import validate_schema, Schema
from taskgraph.util.scriptworker import (
get_beetmover_bucket_scope, get_beetmover_action_scope
)
from taskgraph.transforms.job import job_description_schema
from taskgraph.transforms.task import task_description_schema
from voluptuous import Any, Required, Optional
# Voluptuous uses marker objects as dictionary *keys*, but they are not
# comparable, so we cast all of the keys back to regular strings
task_description_schema = {str(k): v for k, v in task_description_schema.schema.iteritems()}
job_description_schema = {str(k): v for k, v in job_description_schema.schema.iteritems()}
transforms = TransformSequence()
taskref_or_string = Any(
basestring,
{Required('task-reference'): basestring})
beetmover_cdns_description_schema = Schema({
Required('name'): basestring,
Required('product'): basestring,
Required('treeherder-platform'): basestring,
Optional('attributes'): {basestring: object},
Optional('job-from'): task_description_schema['job-from'],
Optional('run'): {basestring: object},
Optional('run-on-projects'): task_description_schema['run-on-projects'],
Required('worker-type'): Any(
job_description_schema['worker-type'],
{'by-project': {basestring: job_description_schema['worker-type']}},
),
Optional('dependencies'): {basestring: taskref_or_string},
})
@transforms.add
def validate(config, jobs):
for job in jobs:
label = job['name']
yield validate_schema(
beetmover_cdns_description_schema, job,
"In cdns-signing ({!r} kind) task for {!r}:".format(config.kind, label))
@transforms.add
def make_beetmover_cdns_description(config, jobs):
for job in jobs:
treeherder = job.get('treeherder', {})
treeherder.setdefault('symbol', 'Rel(BM-C)')
treeherder.setdefault('tier', 1)
treeherder.setdefault('kind', 'build')
treeherder.setdefault('platform', job['treeherder-platform'])
label = job['name']
description = (
"Beetmover push to cdns for '{product}'".format(
product=job['product']
)
)
bucket_scope = get_beetmover_bucket_scope(config)
action_scope = get_beetmover_action_scope(config)
task = {
'label': label,
'description': description,
'worker-type': 'scriptworker-prov-v1/beetmoverworker-dev',
'scopes': [bucket_scope, action_scope],
'product': job['product'],
'dependencies': job['dependencies'],
'attributes': job.get('attributes', {}),
'run-on-projects': job.get('run-on-projects'),
'treeherder': treeherder,
}
yield task
@transforms.add
def make_beetmover_cdns_worker(config, jobs):
for job in jobs:
worker = {
'implementation': 'beetmover-cdns',
'product': job['product'],
}
job["worker"] = worker
del(job['product'])
yield job