Bug 1492664 - add {artifact-reference: ..}; r=tomprince
[gecko.git] / taskcluster / taskgraph / transforms / beetmover_push_to_release.py
blob07e242a0ffa0282045cceda6c7fa8ec5c8068468
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4 """
5 Transform the beetmover-push-to-release task into a task description.
6 """
8 from __future__ import absolute_import, print_function, unicode_literals
10 from taskgraph.transforms.base import TransformSequence
11 from taskgraph.util.schema import (
12 Schema,
13 taskref_or_string,
15 from taskgraph.util.scriptworker import (
16 get_beetmover_bucket_scope, add_scope_prefix,
17 get_worker_type_for_scope,
19 from taskgraph.transforms.job import job_description_schema
20 from taskgraph.transforms.task import task_description_schema
21 from voluptuous import Required, Optional
23 # Voluptuous uses marker objects as dictionary *keys*, but they are not
24 # comparable, so we cast all of the keys back to regular strings
25 task_description_schema = {str(k): v for k, v in task_description_schema.schema.iteritems()}
26 job_description_schema = {str(k): v for k, v in job_description_schema.schema.iteritems()}
29 beetmover_push_to_release_description_schema = Schema({
30 Required('name'): basestring,
31 Required('product'): basestring,
32 Required('treeherder-platform'): basestring,
33 Optional('attributes'): {basestring: object},
34 Optional('job-from'): task_description_schema['job-from'],
35 Optional('run'): {basestring: object},
36 Optional('run-on-projects'): task_description_schema['run-on-projects'],
37 Optional('dependencies'): {basestring: taskref_or_string},
38 Optional('index'): {basestring: basestring},
39 Optional('routes'): [basestring],
40 Required('shipping-phase'): task_description_schema['shipping-phase'],
41 Required('shipping-product'): task_description_schema['shipping-product'],
42 Optional('extra'): task_description_schema['extra'],
46 transforms = TransformSequence()
47 transforms.add_validate(beetmover_push_to_release_description_schema)
50 @transforms.add
51 def make_beetmover_push_to_release_description(config, jobs):
52 for job in jobs:
53 treeherder = job.get('treeherder', {})
54 treeherder.setdefault('symbol', 'Rel(BM-C)')
55 treeherder.setdefault('tier', 1)
56 treeherder.setdefault('kind', 'build')
57 treeherder.setdefault('platform', job['treeherder-platform'])
59 label = job['name']
60 description = (
61 "Beetmover push to release for '{product}'".format(
62 product=job['product']
66 bucket_scope = get_beetmover_bucket_scope(config)
67 action_scope = add_scope_prefix(config, 'beetmover:action:push-to-releases')
69 task = {
70 'label': label,
71 'description': description,
72 'worker-type': get_worker_type_for_scope(config, bucket_scope),
73 'scopes': [bucket_scope, action_scope],
74 'product': job['product'],
75 'dependencies': job['dependencies'],
76 'attributes': job.get('attributes', {}),
77 'run-on-projects': job.get('run-on-projects'),
78 'treeherder': treeherder,
79 'shipping-phase': job.get('shipping-phase', 'push'),
80 'shipping-product': job.get('shipping-product'),
81 'routes': job.get('routes', []),
82 'extra': job.get('extra', {}),
85 yield task
88 @transforms.add
89 def make_beetmover_push_to_release_worker(config, jobs):
90 for job in jobs:
91 worker = {
92 'implementation': 'beetmover-push-to-release',
93 'product': job['product'],
95 job["worker"] = worker
96 del(job['product'])
98 yield job