Index: infra/bots/recipes/swarm_infra.py |
diff --git a/infra/bots/recipes/swarm_infra.py b/infra/bots/recipes/swarm_infra.py |
index 3c32faa262fe6f5a5f8247ed791e7a93adaa25a3..bfc004b1385fd38b83352e8ad6dbd8223c65c41c 100644 |
--- a/infra/bots/recipes/swarm_infra.py |
+++ b/infra/bots/recipes/swarm_infra.py |
@@ -15,16 +15,32 @@ DEPS = [ |
] |
+UPDATE_GO_ATTEMPTS = 5 |
+ |
+ |
def RunSteps(api): |
api.vars.setup() |
api.core.checkout_steps() |
+ # Attempt to update go dependencies. This fails flakily sometimes, so perform |
+ # multiple attempts. |
gopath = api.vars.checkout_root.join('gopath') |
env = {'GOPATH': gopath} |
- api.step('update_go_pkgs', |
- cmd=['go', 'get', '-u', 'go.skia.org/infra/...'], |
- env=env) |
+ name = 'update go pkgs' |
+ for attempt in xrange(UPDATE_GO_ATTEMPTS): |
+ step_name = name |
+ if attempt > 0: |
+ step_name += ' (attempt %d)' % (attempt + 1) |
+ try: |
+ api.step(step_name, |
+ cmd=['go', 'get', '-u', 'go.skia.org/infra/...'], |
+ env=env) |
+ break |
+ except api.step.StepFailure: |
+ if attempt == UPDATE_GO_ATTEMPTS - 1: |
+ raise |
+ # Run the infra tests. |
infra_tests = api.vars.skia_dir.join( |
'infra', 'bots', 'infra_tests.py') |
api.step('infra_tests', |
@@ -44,3 +60,31 @@ def GenTests(api): |
path_config='kitchen', |
swarm_out_dir='[SWARM_OUT_DIR]') |
) |
+ |
+ yield ( |
+ api.test('failed_one_update') + |
+ api.properties(buildername='Housekeeper-PerCommit-InfraTests', |
+ mastername='client.skia.fyi', |
+ slavename='dummy-slave', |
+ buildnumber=5, |
+ revision='abc123', |
+ path_config='kitchen', |
+ swarm_out_dir='[SWARM_OUT_DIR]') + |
+ api.step_data('update go pkgs', retcode=1) |
+ ) |
+ |
+ yield ( |
+ api.test('failed_all_updates') + |
+ api.properties(buildername='Housekeeper-PerCommit-InfraTests', |
+ mastername='client.skia.fyi', |
+ slavename='dummy-slave', |
+ buildnumber=5, |
+ revision='abc123', |
+ path_config='kitchen', |
+ swarm_out_dir='[SWARM_OUT_DIR]') + |
+ api.step_data('update go pkgs', retcode=1) + |
+ api.step_data('update go pkgs (attempt 2)', retcode=1) + |
+ api.step_data('update go pkgs (attempt 3)', retcode=1) + |
+ api.step_data('update go pkgs (attempt 4)', retcode=1) + |
+ api.step_data('update go pkgs (attempt 5)', retcode=1) |
+ ) |