Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(617)

Unified Diff: scripts/slave/recipe_modules/swarming/api.py

Issue 313693003: Swarming: conditionally run tests on swarming in chromium_trybot recipe. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « scripts/slave/recipe_modules/isolate/test_api.py ('k') | scripts/slave/recipe_modules/test_utils/api.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « scripts/slave/recipe_modules/isolate/test_api.py ('k') | scripts/slave/recipe_modules/test_utils/api.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698