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/.
5 Transform the beetmover-push-to-release task into a task description.
8 from __future__
import absolute_import
, print_function
, unicode_literals
10 from taskgraph
.transforms
.base
import TransformSequence
11 from taskgraph
.util
.schema
import (
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
)
51 def make_beetmover_push_to_release_description(config
, 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'])
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')
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', {}),
89 def make_beetmover_push_to_release_worker(config
, jobs
):
92 'implementation': 'beetmover-push-to-release',
93 'product': job
['product'],
95 job
["worker"] = worker