mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 00:32:11 +00:00
Bug 1465117 - Take two at updating backfill task. Use modifier this time. r=dustin,jmaher
MozReview-Commit-ID: CAs0WRb839r --HG-- extra : rebase_source : 5da88d38315f8b6795aa6d5a97de63883eda1ab0
This commit is contained in:
parent
cd8c9f6a3e
commit
3ba851c889
@ -272,7 +272,6 @@ class MachCommands(MachCommandBase):
|
|||||||
help='Action callback name (Python function name)')
|
help='Action callback name (Python function name)')
|
||||||
def test_action_callback(self, **options):
|
def test_action_callback(self, **options):
|
||||||
import taskgraph.parameters
|
import taskgraph.parameters
|
||||||
from taskgraph.util.taskcluster import get_task_definition
|
|
||||||
import taskgraph.actions
|
import taskgraph.actions
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
@ -288,12 +287,6 @@ class MachCommands(MachCommandBase):
|
|||||||
try:
|
try:
|
||||||
self.setup_logging()
|
self.setup_logging()
|
||||||
task_id = options['task_id']
|
task_id = options['task_id']
|
||||||
if options['task']:
|
|
||||||
task = load_data(options['task'])
|
|
||||||
elif task_id:
|
|
||||||
task = get_task_definition(task_id)
|
|
||||||
else:
|
|
||||||
task = None
|
|
||||||
|
|
||||||
if options['input']:
|
if options['input']:
|
||||||
input = load_data(options['input'])
|
input = load_data(options['input'])
|
||||||
@ -308,7 +301,6 @@ class MachCommands(MachCommandBase):
|
|||||||
return taskgraph.actions.trigger_action_callback(
|
return taskgraph.actions.trigger_action_callback(
|
||||||
task_group_id=options['task_group_id'],
|
task_group_id=options['task_group_id'],
|
||||||
task_id=task_id,
|
task_id=task_id,
|
||||||
task=task,
|
|
||||||
input=input,
|
input=input,
|
||||||
callback=options['callback'],
|
callback=options['callback'],
|
||||||
parameters=parameters,
|
parameters=parameters,
|
||||||
|
@ -44,6 +44,23 @@ logger = logging.getLogger(__name__)
|
|||||||
'title': 'Depth',
|
'title': 'Depth',
|
||||||
'description': ('The number of previous pushes before the current '
|
'description': ('The number of previous pushes before the current '
|
||||||
'push to attempt to trigger this task on.')
|
'push to attempt to trigger this task on.')
|
||||||
|
},
|
||||||
|
'inclusive': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'default': False,
|
||||||
|
'title': 'Inclusive Range',
|
||||||
|
'description': ('If true, the backfill will also retrigger the task '
|
||||||
|
'on the selected push.')
|
||||||
|
},
|
||||||
|
'addGeckoProfile': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'default': False,
|
||||||
|
'title': 'Add Gecko Profile',
|
||||||
|
'description': 'If true, appends --geckoProfile to mozharness options.'
|
||||||
|
},
|
||||||
|
'testPath': {
|
||||||
|
'type': 'string',
|
||||||
|
'title': 'Test Path',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'additionalProperties': False
|
'additionalProperties': False
|
||||||
@ -53,8 +70,9 @@ logger = logging.getLogger(__name__)
|
|||||||
def backfill_action(parameters, graph_config, input, task_group_id, task_id, task):
|
def backfill_action(parameters, graph_config, input, task_group_id, task_id, task):
|
||||||
label = task['metadata']['name']
|
label = task['metadata']['name']
|
||||||
pushes = []
|
pushes = []
|
||||||
depth = input.get('depth', 5)
|
inclusive_tweak = 1 if input.get('inclusive') else 0
|
||||||
end_id = int(parameters['pushlog_id']) - 1
|
depth = input.get('depth', 5) + inclusive_tweak
|
||||||
|
end_id = int(parameters['pushlog_id']) - (1 - inclusive_tweak)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
start_id = max(end_id - depth, 0)
|
start_id = max(end_id - depth, 0)
|
||||||
@ -90,8 +108,22 @@ def backfill_action(parameters, graph_config, input, task_group_id, task_id, tas
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if label in full_task_graph.tasks.keys():
|
if label in full_task_graph.tasks.keys():
|
||||||
create_tasks(
|
def modifier(task):
|
||||||
[label], full_task_graph, label_to_taskid,
|
if task.label != label:
|
||||||
push_params, push_decision_task_id, push)
|
return task
|
||||||
|
if input.get('addGeckoProfile'):
|
||||||
|
mh = task.task['payload'].setdefault('env', {}) \
|
||||||
|
.get('MOZHARNESS_OPTIONS', '')
|
||||||
|
task.task['payload']['env']['MOZHARNESS_OPTIONS'] = mh + ' --geckoProfile'
|
||||||
|
task.task['extra']['treeherder']['symbol'] += '-p'
|
||||||
|
|
||||||
|
if input.get('testPath'):
|
||||||
|
env = task.task['payload'].setdefault('env', {})
|
||||||
|
env['MOZHARNESS_TEST_PATHS'] = input.get('testPath')
|
||||||
|
task.task['extra']['treeherder']['symbol'] += '-b'
|
||||||
|
return task
|
||||||
|
|
||||||
|
create_tasks([label], full_task_graph, label_to_taskid,
|
||||||
|
push_params, push_decision_task_id, push, modifier=modifier)
|
||||||
else:
|
else:
|
||||||
logging.info('Could not find {} on {}. Skipping.'.format(label, push))
|
logging.info('Could not find {} on {}. Skipping.'.format(label, push))
|
||||||
|
@ -111,13 +111,18 @@ def update_parent(task, graph):
|
|||||||
|
|
||||||
|
|
||||||
def create_tasks(to_run, full_task_graph, label_to_taskid,
|
def create_tasks(to_run, full_task_graph, label_to_taskid,
|
||||||
params, decision_task_id=None, suffix=''):
|
params, decision_task_id=None, suffix='', modifier=lambda t: t):
|
||||||
"""Create new tasks. The task definition will have {relative-datestamp':
|
"""Create new tasks. The task definition will have {relative-datestamp':
|
||||||
'..'} rendered just like in a decision task. Action callbacks should use
|
'..'} rendered just like in a decision task. Action callbacks should use
|
||||||
this function to create new tasks,
|
this function to create new tasks,
|
||||||
allowing easy debugging with `mach taskgraph action-callback --test`.
|
allowing easy debugging with `mach taskgraph action-callback --test`.
|
||||||
This builds up all required tasks to run in order to run the tasks requested.
|
This builds up all required tasks to run in order to run the tasks requested.
|
||||||
|
|
||||||
|
Optionally this function takes a `modifier` function that is passed in each
|
||||||
|
task before it is put into a new graph. It should return a valid task. Note
|
||||||
|
that this is passed _all_ tasks in the graph, not just the set in to_run. You
|
||||||
|
may want to skip modifying tasks not in your to_run list.
|
||||||
|
|
||||||
If you wish to create the tasks in a new group, leave out decision_task_id."""
|
If you wish to create the tasks in a new group, leave out decision_task_id."""
|
||||||
if suffix != '':
|
if suffix != '':
|
||||||
suffix = '-{}'.format(suffix)
|
suffix = '-{}'.format(suffix)
|
||||||
@ -129,7 +134,7 @@ def create_tasks(to_run, full_task_graph, label_to_taskid,
|
|||||||
|
|
||||||
target_graph = full_task_graph.graph.transitive_closure(to_run)
|
target_graph = full_task_graph.graph.transitive_closure(to_run)
|
||||||
target_task_graph = TaskGraph(
|
target_task_graph = TaskGraph(
|
||||||
{l: full_task_graph[l] for l in target_graph.nodes},
|
{l: modifier(full_task_graph[l]) for l in target_graph.nodes},
|
||||||
target_graph)
|
target_graph)
|
||||||
target_task_graph.for_each_task(update_parent)
|
target_task_graph.for_each_task(update_parent)
|
||||||
optimized_task_graph, label_to_taskid = optimize_task_graph(target_task_graph,
|
optimized_task_graph, label_to_taskid = optimize_task_graph(target_task_graph,
|
||||||
|
@ -21,7 +21,7 @@ class Task(object):
|
|||||||
|
|
||||||
- task_id -- TaskCluster taskId under which this task will be created
|
- task_id -- TaskCluster taskId under which this task will be created
|
||||||
|
|
||||||
This class is just a convenience wraper for the data type and managing
|
This class is just a convenience wrapper for the data type and managing
|
||||||
display, comparison, serialization, etc. It has no functionality of its own.
|
display, comparison, serialization, etc. It has no functionality of its own.
|
||||||
"""
|
"""
|
||||||
def __init__(self, kind, label, attributes, task,
|
def __init__(self, kind, label, attributes, task,
|
||||||
|
Loading…
Reference in New Issue
Block a user