| Index: scripts/slave/recipe_modules/swarming/api.py
|
| diff --git a/scripts/slave/recipe_modules/swarming/api.py b/scripts/slave/recipe_modules/swarming/api.py
|
| index b45e59b7f12c98d0725f3bfb0cce60f641e1e0e2..7c5153a55519be73063dec8891cefce2a2b4ca93 100644
|
| --- a/scripts/slave/recipe_modules/swarming/api.py
|
| +++ b/scripts/slave/recipe_modules/swarming/api.py
|
| @@ -208,8 +208,8 @@ class SwarmingApi(recipe_api.RecipeApi):
|
|
|
| # Make a task, configure it to be collected through shim script.
|
| task = self.task(title, isolated_hash, make_unique, shards, extra_args)
|
| - task.collect_step_builder = lambda *args: (
|
| - self._gtest_collect_step(test_launcher_summary_output, *args))
|
| + task.collect_step_builder = lambda *args, **kwargs: (
|
| + self._gtest_collect_step(test_launcher_summary_output, *args, **kwargs))
|
| return task
|
|
|
| def check_client_version(self):
|
| @@ -217,7 +217,7 @@ class SwarmingApi(recipe_api.RecipeApi):
|
| yield self.m.swarming_client.ensure_script_version(
|
| 'swarming.py', MINIMAL_SWARMING_VERSION)
|
|
|
| - def trigger(self, tasks):
|
| + def trigger(self, tasks, **kwargs):
|
| """Asynchronously launches a set of tasks on Swarming.
|
|
|
| This steps justs posts the tasks and immediately returns. Use 'collect' to
|
| @@ -225,6 +225,8 @@ class SwarmingApi(recipe_api.RecipeApi):
|
|
|
| Args:
|
| tasks: an enumerable of SwarmingTask instances.
|
| + kwargs: passed to recipe step constructor as-is, may contain
|
| + always_run, can_fail_build, etc.
|
| """
|
| # TODO(vadimsh): Trigger multiple tasks as a single step.
|
| assert all(isinstance(t, SwarmingTask) for t in tasks)
|
| @@ -266,11 +268,12 @@ class SwarmingApi(recipe_api.RecipeApi):
|
| steps.append(self.m.python(
|
| name=self._get_step_name('trigger', task),
|
| script=self.m.swarming_client.path.join('swarming.py'),
|
| - args=args))
|
| + args=args,
|
| + **kwargs))
|
|
|
| return steps
|
|
|
| - def collect(self, tasks, followup_fn=None):
|
| + def collect(self, tasks, **kwargs):
|
| """Waits for a set of Swarming tasks to finish.
|
|
|
| Always waits for all task results. Failed tasks will be marked as such
|
| @@ -280,8 +283,8 @@ class SwarmingApi(recipe_api.RecipeApi):
|
| Args:
|
| tasks: an enumerable of SwarmingTask instances. All of them should have
|
| been triggered previously with 'trigger' method.
|
| - followup_fn: if given, will be called with each step result before step is
|
| - finalized. Can be used to customize step appearance.
|
| + kwargs: passed to recipe step constructor as-is, may contain
|
| + always_run, can_fail_build, followup_fn, etc.
|
| """
|
| # TODO(vadimsh): Implement "wait for any" to wait for first finished task.
|
| # TODO(vadimsh): Update |tasks| in-place with results of task execution.
|
| @@ -292,21 +295,24 @@ class SwarmingApi(recipe_api.RecipeApi):
|
| assert task.task_id in self._pending_tasks, (
|
| 'Trying to collect a task that was not triggered: %s' % task.task_id)
|
| self._pending_tasks.remove(task.task_id)
|
| - steps.append(task.collect_step_builder(task, followup_fn))
|
| + steps.append(task.collect_step_builder(task, **kwargs))
|
| return steps
|
|
|
| - def _default_collect_step(self, task, followup_fn):
|
| + def _default_collect_step(self, task, **kwargs):
|
| """Produces a step that collects a result of an arbitrary task."""
|
| - # Always wait for all tasks to finish even if some of them failed.
|
| + # By default wait for all tasks to finish even if some of them failed.
|
| + kwargs.setdefault('always_run', True)
|
| return self.m.python(
|
| name=self._get_step_name('swarming', task),
|
| script=self.m.swarming_client.path.join('swarming.py'),
|
| args=self._get_collect_cmd_args(task),
|
| - always_run=True,
|
| - followup_fn=followup_fn)
|
| + **kwargs)
|
|
|
| - def _gtest_collect_step(self, merged_test_output, task, followup_fn):
|
| + def _gtest_collect_step(self, merged_test_output, task, **kwargs):
|
| """Produces a step that collects and processes a result of gtest task."""
|
| + # By default wait for all tasks to finish even if some of them failed.
|
| + kwargs.setdefault('always_run', True)
|
| +
|
| # Shim script's own arguments.
|
| args = [
|
| '--swarming-client-dir', self.m.swarming_client.path,
|
| @@ -330,10 +336,9 @@ class SwarmingApi(recipe_api.RecipeApi):
|
| name=self._get_step_name('swarming', task),
|
| script=self.resource('collect_gtest_task.py'),
|
| args=args,
|
| - always_run=True,
|
| allow_subannotations=True,
|
| - followup_fn=followup_fn,
|
| - step_test_data=step_test_data)
|
| + step_test_data=step_test_data,
|
| + **kwargs)
|
|
|
| def _get_step_name(self, prefix, task):
|
| """SwarmingTask -> name of a step of a waterfall.
|
| @@ -404,7 +409,7 @@ class SwarmingTask(object):
|
| extra_args: list of command line arguments to pass to isolated tasks.
|
| collect_step_builder: callback that will be called to generate recipe step
|
| that collects and processes results of task execution, signature is
|
| - collect_step_builder(task, followup_fn).
|
| + collect_step_builder(task, **step_kwargs).
|
| """
|
| assert 'os' in dimensions
|
| self.title = title
|
|
|