Revert "Roll Recipe DEPS"

This reverts commit 310f4d02c1e2d01181c1db18acf05f2846f94cd4.

Reason for revert: Broke uploads

Original change's description:
> Roll Recipe DEPS
> 
> BUG=skia:
> 
> Change-Id: I3e32207e5809e126d53ee8ec2158eb855c1a26d2
> Reviewed-on: https://skia-review.googlesource.com/8671
> Commit-Queue: Eric Boren <borenet@google.com>
> Reviewed-by: Ravi Mistry <rmistry@google.com>
> 

TBR=borenet@google.com,rmistry@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Change-Id: If6eed7a72aa7178afd23d0a4a7786e23b27c1ac2
Reviewed-on: https://skia-review.googlesource.com/8681
Reviewed-by: Eric Boren <borenet@google.com>
Commit-Queue: Eric Boren <borenet@google.com>
diff --git a/infra/bots/recipe_modules/core/api.py b/infra/bots/recipe_modules/core/api.py
index 1c4554d..eb6dc94 100644
--- a/infra/bots/recipe_modules/core/api.py
+++ b/infra/bots/recipe_modules/core/api.py
@@ -41,19 +41,22 @@
         git = 'git.bat'
       else:
         git = 'git'
-      with self.m.step.context({'cwd': repo_path}):
-        self.m.step('git remote set-url',
-                    cmd=[git, 'remote', 'set-url', 'origin', repo.url],
-                    infra_step=True)
-        self.m.step('git fetch',
-                    cmd=[git, 'fetch'],
-                    infra_step=True)
-        self.m.step('git reset',
-                    cmd=[git, 'reset', '--hard', repo.revision],
-                    infra_step=True)
-        self.m.step('git clean',
-                    cmd=[git, 'clean', '-d', '-f'],
-                    infra_step=True)
+      self.m.step('git remote set-url',
+                  cmd=[git, 'remote', 'set-url', 'origin', repo.url],
+                  cwd=repo_path,
+                  infra_step=True)
+      self.m.step('git fetch',
+                  cmd=[git, 'fetch'],
+                  cwd=repo_path,
+                  infra_step=True)
+      self.m.step('git reset',
+                  cmd=[git, 'reset', '--hard', repo.revision],
+                  cwd=repo_path,
+                  infra_step=True)
+      self.m.step('git clean',
+                  cmd=[git, 'clean', '-d', '-f'],
+                  cwd=repo_path,
+                  infra_step=True)
 
   def checkout_steps(self):
     """Run the steps to obtain a checkout of Skia."""
@@ -155,14 +158,14 @@
         )
 
     self.m.gclient.c = gclient_cfg
-    with self.m.step.context({'cwd': self.m.vars.checkout_root}):
-      update_step = self.m.bot_update.ensure_checkout(
-          patch_root=patch_root,
-          **checkout_kwargs)
+    update_step = self.m.bot_update.ensure_checkout(
+        cwd=self.m.vars.checkout_root,
+        patch_root=patch_root,
+        **checkout_kwargs)
 
     self.m.vars.got_revision = (
         update_step.presentation.properties['got_revision'])
 
     if self.m.vars.need_chromium_checkout:
-      with self.m.step.context({'cwd': self.m.vars.checkout_root}):
-        self.m.gclient.runhooks(env=self.m.vars.gclient_env)
+      self.m.gclient.runhooks(cwd=self.m.vars.checkout_root,
+                              env=self.m.vars.gclient_env)
diff --git a/infra/bots/recipe_modules/infra/example.py b/infra/bots/recipe_modules/infra/example.py
index 8463da6..2c9134b 100644
--- a/infra/bots/recipe_modules/infra/example.py
+++ b/infra/bots/recipe_modules/infra/example.py
@@ -25,10 +25,10 @@
   # Run the infra tests.
   infra_tests = api.vars.skia_dir.join(
       'infra', 'bots', 'infra_tests.py')
-  with api.step.context({'cwd': api.vars.skia_dir}):
-    api.step('infra_tests',
-          cmd=['python', infra_tests],
-          env=api.infra.go_env)
+  api.step('infra_tests',
+           cmd=['python', infra_tests],
+           cwd=api.vars.skia_dir,
+           env=api.infra.go_env)
 
 
 def GenTests(api):
diff --git a/infra/bots/recipe_modules/run/api.py b/infra/bots/recipe_modules/run/api.py
index 48a6d1f..03f7448 100644
--- a/infra/bots/recipe_modules/run/api.py
+++ b/infra/bots/recipe_modules/run/api.py
@@ -76,21 +76,13 @@
                        env=env,
                        infra_step=True)
 
-  def _run(self, steptype, **kwargs):
-    """Wrapper for running a step."""
-    cwd = kwargs.pop('cwd', None)
-    if cwd:
-      with self.m.step.context({'cwd': cwd}):
-        return steptype(**kwargs)
-    return steptype(**kwargs)
-
   def __call__(self, steptype, name, abort_on_failure=True,
                fail_build_on_failure=True, env=None, **kwargs):
     """Run a step. If it fails, keep going but mark the build status failed."""
     env = env or {}
     env.update(self.m.vars.default_env)
     try:
-      return self._run(steptype, name=name, env=env, **kwargs)
+      return steptype(name=name, env=env, **kwargs)
     except self.m.step.StepFailure as e:
       if abort_on_failure or fail_build_on_failure:
         self._failed.append(e)
@@ -129,14 +121,14 @@
         args=[src, dst],
         infra_step=True)
 
-  def with_retry(self, steptype, name, attempts, **kwargs):
+  def with_retry(self, steptype, name, attempts, *args, **kwargs):
     for attempt in xrange(attempts):
       step_name = name
       if attempt > 0:
         step_name += ' (attempt %d)' % (attempt + 1)
       try:
-        res = self._run(steptype, name=step_name, **kwargs)
-        return res
+        steptype(step_name, *args, **kwargs)
+        return
       except self.m.step.StepFailure:
         if attempt == attempts - 1:
           raise
diff --git a/infra/bots/recipe_modules/upload_dm_results/api.py b/infra/bots/recipe_modules/upload_dm_results/api.py
index 3005f3e..2cf7699 100644
--- a/infra/bots/recipe_modules/upload_dm_results/api.py
+++ b/infra/bots/recipe_modules/upload_dm_results/api.py
@@ -57,7 +57,7 @@
     files_to_upload = self.m.file.glob(
         'find images',
         results_dir.join('*'),
-        test_data=[results_dir.join('someimage.png')],
+        test_data=['someimage.png'],
         infra_step=True)
     if len(files_to_upload) > 0:
       self.cp('images', results_dir.join('*'), image_dest_path)
diff --git a/infra/bots/recipe_modules/upload_nano_results/api.py b/infra/bots/recipe_modules/upload_nano_results/api.py
index e4a5bbb..bfec2fd 100644
--- a/infra/bots/recipe_modules/upload_nano_results/api.py
+++ b/infra/bots/recipe_modules/upload_nano_results/api.py
@@ -17,16 +17,16 @@
     now = self.m.time.utcnow()
     src_path = self.m.path['start_dir'].join(
         'perfdata', builder_name, 'data')
-    with self.m.step.context({'cwd': src_path}):
-      results = self.m.file.glob(
-          'find results',
-          '*.json',
-          test_data=[src_path.join('nanobench_abc123.json')],
-          infra_step=True)
+    results = self.m.file.glob(
+        'find results',
+        '*.json',
+        cwd=src_path,
+        test_data=['nanobench_abc123.json'],
+        infra_step=True)
     if len(results) != 1:  # pragma: nocover
       raise Exception('Unable to find nanobench or skpbench JSON file!')
 
-    src = results[0]
+    src = src_path.join(results[0])
     basename = self.m.path.basename(src)
     gs_path = '/'.join((
         'nano-json-v1', str(now.year).zfill(4),
diff --git a/infra/bots/recipes/swarm_RecreateSKPs.py b/infra/bots/recipes/swarm_RecreateSKPs.py
index bb281bb..af4a387 100644
--- a/infra/bots/recipes/swarm_RecreateSKPs.py
+++ b/infra/bots/recipes/swarm_RecreateSKPs.py
@@ -88,18 +88,18 @@
   src_dir = api.vars.checkout_root.join('src')
   out_dir = src_dir.join('out', 'Release')
 
-  with api.step.context({'cwd': src_dir}):
-    # Call GN.
-    platform = 'linux64'  # This bot only runs on linux; don't bother checking.
-    gn = src_dir.join('buildtools', platform, 'gn')
-    api.step('GN',
-             [gn, 'gen', out_dir],
-             env={'CPPFLAGS': '-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1',
-                  'GYP_GENERATORS': 'ninja'})
-
-    # Build Chrome.
-    api.step('Build Chrome',
-             ['ninja', '-C', out_dir, 'chrome'])
+  # Call GN.
+  platform = 'linux64'  # This bot only runs on linux; don't bother checking.
+  gn = src_dir.join('buildtools', platform, 'gn')
+  api.step('GN',
+           [gn, 'gen', out_dir],
+           env={'CPPFLAGS': '-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1',
+                'GYP_GENERATORS': 'ninja'},
+           cwd=src_dir)
+  # Build Chrome.
+  api.step('Build Chrome',
+           ['ninja', '-C', out_dir, 'chrome'],
+           cwd=src_dir)
 
   # Clean up the output dir.
   output_dir = api.path['start_dir'].join('skp_output')
@@ -120,10 +120,10 @@
          '--target_dir', output_dir]
   if 'Canary' not in api.properties['buildername']:
     cmd.append('--upload_to_partner_bucket')
-  with api.step.context({'cwd': api.vars.skia_dir}):
-    api.step('Recreate SKPs',
-             cmd=cmd,
-             env=env)
+  api.step('Recreate SKPs',
+           cmd=cmd,
+           cwd=api.vars.skia_dir,
+           env=env)
 
   # Upload the SKPs.
   if 'Canary' not in api.properties['buildername']:
@@ -136,10 +136,10 @@
            '--gitcookies', str(update_skps_gitcookies)]
     env.update(api.infra.go_env)
     with gitcookies_auth(api, UPDATE_SKPS_KEY):
-      with api.step.context({'cwd': api.vars.skia_dir}):
-        api.step('Upload SKPs',
-                 cmd=cmd,
-                 env=env)
+      api.step('Upload SKPs',
+               cmd=cmd,
+               cwd=api.vars.skia_dir,
+               env=env)
 
 
 def GenTests(api):
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_CPU_BENCH_10k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_CPU_BENCH_10k_SKPs.json
index 5f38d92..89d4437 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_CPU_BENCH_10k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_CPU_BENCH_10k_SKPs.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-1",
+      "stepname:ct-nanobench-1 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-1]"
     ],
-    "name": "[trigger] ct-nanobench-1",
+    "name": "[trigger] ct-nanobench-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-2",
+      "stepname:ct-nanobench-2 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-2]"
     ],
-    "name": "[trigger] ct-nanobench-2",
+    "name": "[trigger] ct-nanobench-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-3",
+      "stepname:ct-nanobench-3 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-3]"
     ],
-    "name": "[trigger] ct-nanobench-3",
+    "name": "[trigger] ct-nanobench-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-4",
+      "stepname:ct-nanobench-4 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-4]"
     ],
-    "name": "[trigger] ct-nanobench-4",
+    "name": "[trigger] ct-nanobench-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-5",
+      "stepname:ct-nanobench-5 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-5]"
     ],
-    "name": "[trigger] ct-nanobench-5",
+    "name": "[trigger] ct-nanobench-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-1"
     ],
-    "name": "ct-nanobench-1",
+    "name": "ct-nanobench-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1418,7 +1418,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-2"
     ],
-    "name": "ct-nanobench-2",
+    "name": "ct-nanobench-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1547,7 +1547,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-3"
     ],
-    "name": "ct-nanobench-3",
+    "name": "ct-nanobench-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1676,7 +1676,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-4"
     ],
-    "name": "ct-nanobench-4",
+    "name": "ct-nanobench-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1805,7 +1805,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-5"
     ],
-    "name": "ct-nanobench-5",
+    "name": "ct-nanobench-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_100k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_100k_SKPs.json
index c04e749..ee4d8db 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_100k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_100k_SKPs.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-1",
+      "stepname:ct-dm-1 on Ubuntu-14.04",
       "[dummy hash for ct-dm-1]"
     ],
-    "name": "[trigger] ct-dm-1",
+    "name": "[trigger] ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-2",
+      "stepname:ct-dm-2 on Ubuntu-14.04",
       "[dummy hash for ct-dm-2]"
     ],
-    "name": "[trigger] ct-dm-2",
+    "name": "[trigger] ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-3",
+      "stepname:ct-dm-3 on Ubuntu-14.04",
       "[dummy hash for ct-dm-3]"
     ],
-    "name": "[trigger] ct-dm-3",
+    "name": "[trigger] ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-4",
+      "stepname:ct-dm-4 on Ubuntu-14.04",
       "[dummy hash for ct-dm-4]"
     ],
-    "name": "[trigger] ct-dm-4",
+    "name": "[trigger] ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-5",
+      "stepname:ct-dm-5 on Ubuntu-14.04",
       "[dummy hash for ct-dm-5]"
     ],
-    "name": "[trigger] ct-dm-5",
+    "name": "[trigger] ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-1"
     ],
-    "name": "ct-dm-1",
+    "name": "ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-2"
     ],
-    "name": "ct-dm-2",
+    "name": "ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-3"
     ],
-    "name": "ct-dm-3",
+    "name": "ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1475,7 +1475,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-4"
     ],
-    "name": "ct-dm-4",
+    "name": "ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1537,7 +1537,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-5"
     ],
-    "name": "ct-dm-5",
+    "name": "ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs.json
index 56fdf58..007b73b 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-1",
+      "stepname:ct-dm-1 on Ubuntu-14.04",
       "[dummy hash for ct-dm-1]"
     ],
-    "name": "[trigger] ct-dm-1",
+    "name": "[trigger] ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-2",
+      "stepname:ct-dm-2 on Ubuntu-14.04",
       "[dummy hash for ct-dm-2]"
     ],
-    "name": "[trigger] ct-dm-2",
+    "name": "[trigger] ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-3",
+      "stepname:ct-dm-3 on Ubuntu-14.04",
       "[dummy hash for ct-dm-3]"
     ],
-    "name": "[trigger] ct-dm-3",
+    "name": "[trigger] ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-4",
+      "stepname:ct-dm-4 on Ubuntu-14.04",
       "[dummy hash for ct-dm-4]"
     ],
-    "name": "[trigger] ct-dm-4",
+    "name": "[trigger] ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-5",
+      "stepname:ct-dm-5 on Ubuntu-14.04",
       "[dummy hash for ct-dm-5]"
     ],
-    "name": "[trigger] ct-dm-5",
+    "name": "[trigger] ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-1"
     ],
-    "name": "ct-dm-1",
+    "name": "ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-2"
     ],
-    "name": "ct-dm-2",
+    "name": "ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-3"
     ],
-    "name": "ct-dm-3",
+    "name": "ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1475,7 +1475,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-4"
     ],
-    "name": "ct-dm-4",
+    "name": "ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1537,7 +1537,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-5"
     ],
-    "name": "ct-dm-5",
+    "name": "ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs_Trybot.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs_Trybot.json
index df1708d..0cf3472 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs_Trybot.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_10k_SKPs_Trybot.json
@@ -969,10 +969,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-1",
+      "stepname:ct-dm-1 on Ubuntu-14.04",
       "[dummy hash for ct-dm-1]"
     ],
-    "name": "[trigger] ct-dm-1",
+    "name": "[trigger] ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1041,10 +1041,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-2",
+      "stepname:ct-dm-2 on Ubuntu-14.04",
       "[dummy hash for ct-dm-2]"
     ],
-    "name": "[trigger] ct-dm-2",
+    "name": "[trigger] ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1113,10 +1113,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-3",
+      "stepname:ct-dm-3 on Ubuntu-14.04",
       "[dummy hash for ct-dm-3]"
     ],
-    "name": "[trigger] ct-dm-3",
+    "name": "[trigger] ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1185,10 +1185,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-4",
+      "stepname:ct-dm-4 on Ubuntu-14.04",
       "[dummy hash for ct-dm-4]"
     ],
-    "name": "[trigger] ct-dm-4",
+    "name": "[trigger] ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1257,10 +1257,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-5",
+      "stepname:ct-dm-5 on Ubuntu-14.04",
       "[dummy hash for ct-dm-5]"
     ],
-    "name": "[trigger] ct-dm-5",
+    "name": "[trigger] ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1295,7 +1295,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-1"
     ],
-    "name": "ct-dm-1",
+    "name": "ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1357,7 +1357,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-2"
     ],
-    "name": "ct-dm-2",
+    "name": "ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1419,7 +1419,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-3"
     ],
-    "name": "ct-dm-3",
+    "name": "ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1481,7 +1481,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-4"
     ],
-    "name": "ct-dm-4",
+    "name": "ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1543,7 +1543,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-5"
     ],
-    "name": "ct-dm-5",
+    "name": "ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs.json
index 1672719..37db16c 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-1",
+      "stepname:ct-dm-1 on Ubuntu-14.04",
       "[dummy hash for ct-dm-1]"
     ],
-    "name": "[trigger] ct-dm-1",
+    "name": "[trigger] ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-2",
+      "stepname:ct-dm-2 on Ubuntu-14.04",
       "[dummy hash for ct-dm-2]"
     ],
-    "name": "[trigger] ct-dm-2",
+    "name": "[trigger] ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-3",
+      "stepname:ct-dm-3 on Ubuntu-14.04",
       "[dummy hash for ct-dm-3]"
     ],
-    "name": "[trigger] ct-dm-3",
+    "name": "[trigger] ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-4",
+      "stepname:ct-dm-4 on Ubuntu-14.04",
       "[dummy hash for ct-dm-4]"
     ],
-    "name": "[trigger] ct-dm-4",
+    "name": "[trigger] ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-5",
+      "stepname:ct-dm-5 on Ubuntu-14.04",
       "[dummy hash for ct-dm-5]"
     ],
-    "name": "[trigger] ct-dm-5",
+    "name": "[trigger] ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-1"
     ],
-    "name": "ct-dm-1",
+    "name": "ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-2"
     ],
-    "name": "ct-dm-2",
+    "name": "ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-3"
     ],
-    "name": "ct-dm-3",
+    "name": "ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1475,7 +1475,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-4"
     ],
-    "name": "ct-dm-4",
+    "name": "ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1537,7 +1537,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-5"
     ],
-    "name": "ct-dm-5",
+    "name": "ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_2slaves_failure.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_2slaves_failure.json
index cec7817..01be8bb 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_2slaves_failure.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_2slaves_failure.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-1",
+      "stepname:ct-dm-1 on Ubuntu-14.04",
       "[dummy hash for ct-dm-1]"
     ],
-    "name": "[trigger] ct-dm-1",
+    "name": "[trigger] ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-2",
+      "stepname:ct-dm-2 on Ubuntu-14.04",
       "[dummy hash for ct-dm-2]"
     ],
-    "name": "[trigger] ct-dm-2",
+    "name": "[trigger] ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-3",
+      "stepname:ct-dm-3 on Ubuntu-14.04",
       "[dummy hash for ct-dm-3]"
     ],
-    "name": "[trigger] ct-dm-3",
+    "name": "[trigger] ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-4",
+      "stepname:ct-dm-4 on Ubuntu-14.04",
       "[dummy hash for ct-dm-4]"
     ],
-    "name": "[trigger] ct-dm-4",
+    "name": "[trigger] ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-5",
+      "stepname:ct-dm-5 on Ubuntu-14.04",
       "[dummy hash for ct-dm-5]"
     ],
-    "name": "[trigger] ct-dm-5",
+    "name": "[trigger] ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-1"
     ],
-    "name": "ct-dm-1",
+    "name": "ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "step returned non-zero exit code: 1",
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
@@ -1355,7 +1355,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-2"
     ],
-    "name": "ct-dm-2",
+    "name": "ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1417,7 +1417,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-3"
     ],
-    "name": "ct-dm-3",
+    "name": "ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "step returned non-zero exit code: 1",
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
@@ -1483,7 +1483,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-4"
     ],
-    "name": "ct-dm-4",
+    "name": "ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1545,7 +1545,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-5"
     ],
-    "name": "ct-dm-5",
+    "name": "ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1592,7 +1592,7 @@
   },
   {
     "name": "$result",
-    "reason": "Failed steps: ct-dm-1, ct-dm-3",
+    "reason": "Failed steps: ct-dm-1 on Ubuntu-14.04, ct-dm-3 on Ubuntu-14.04",
     "recipe_result": null,
     "status_code": 1
   }
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_slave3_failure.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_slave3_failure.json
index b14bdfe..8d47674 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_slave3_failure.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_DM_1m_SKPs_slave3_failure.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-1",
+      "stepname:ct-dm-1 on Ubuntu-14.04",
       "[dummy hash for ct-dm-1]"
     ],
-    "name": "[trigger] ct-dm-1",
+    "name": "[trigger] ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-2",
+      "stepname:ct-dm-2 on Ubuntu-14.04",
       "[dummy hash for ct-dm-2]"
     ],
-    "name": "[trigger] ct-dm-2",
+    "name": "[trigger] ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-3",
+      "stepname:ct-dm-3 on Ubuntu-14.04",
       "[dummy hash for ct-dm-3]"
     ],
-    "name": "[trigger] ct-dm-3",
+    "name": "[trigger] ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-4",
+      "stepname:ct-dm-4 on Ubuntu-14.04",
       "[dummy hash for ct-dm-4]"
     ],
-    "name": "[trigger] ct-dm-4",
+    "name": "[trigger] ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-dm-5",
+      "stepname:ct-dm-5 on Ubuntu-14.04",
       "[dummy hash for ct-dm-5]"
     ],
-    "name": "[trigger] ct-dm-5",
+    "name": "[trigger] ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-1"
     ],
-    "name": "ct-dm-1",
+    "name": "ct-dm-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-2"
     ],
-    "name": "ct-dm-2",
+    "name": "ct-dm-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-3"
     ],
-    "name": "ct-dm-3",
+    "name": "ct-dm-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "step returned non-zero exit code: 1",
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
@@ -1479,7 +1479,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-4"
     ],
-    "name": "ct-dm-4",
+    "name": "ct-dm-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1541,7 +1541,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-dm-5"
     ],
-    "name": "ct-dm-5",
+    "name": "ct-dm-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1588,7 +1588,7 @@
   },
   {
     "name": "$result",
-    "reason": "Failed steps: ct-dm-3",
+    "reason": "Failed steps: ct-dm-3 on Ubuntu-14.04",
     "recipe_result": null,
     "status_code": 1
   }
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_10k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_10k_SKPs.json
index 315da4e..fea21fc 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_10k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_10k_SKPs.json
@@ -966,10 +966,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-1",
+      "stepname:ct-nanobench-1 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-1]"
     ],
-    "name": "[trigger] ct-nanobench-1",
+    "name": "[trigger] ct-nanobench-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1041,10 +1041,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-2",
+      "stepname:ct-nanobench-2 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-2]"
     ],
-    "name": "[trigger] ct-nanobench-2",
+    "name": "[trigger] ct-nanobench-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1116,10 +1116,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-3",
+      "stepname:ct-nanobench-3 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-3]"
     ],
-    "name": "[trigger] ct-nanobench-3",
+    "name": "[trigger] ct-nanobench-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1191,10 +1191,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-4",
+      "stepname:ct-nanobench-4 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-4]"
     ],
-    "name": "[trigger] ct-nanobench-4",
+    "name": "[trigger] ct-nanobench-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1266,10 +1266,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-5",
+      "stepname:ct-nanobench-5 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-5]"
     ],
-    "name": "[trigger] ct-nanobench-5",
+    "name": "[trigger] ct-nanobench-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1304,7 +1304,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-1"
     ],
-    "name": "ct-nanobench-1",
+    "name": "ct-nanobench-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1433,7 +1433,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-2"
     ],
-    "name": "ct-nanobench-2",
+    "name": "ct-nanobench-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1562,7 +1562,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-3"
     ],
-    "name": "ct-nanobench-3",
+    "name": "ct-nanobench-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1691,7 +1691,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-4"
     ],
-    "name": "ct-nanobench-4",
+    "name": "ct-nanobench-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1820,7 +1820,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-5"
     ],
-    "name": "ct-nanobench-5",
+    "name": "ct-nanobench-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_1k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_1k_SKPs.json
index f193155..04ee768 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_1k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_GPU_BENCH_1k_SKPs.json
@@ -966,10 +966,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-1",
+      "stepname:ct-nanobench-1 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-1]"
     ],
-    "name": "[trigger] ct-nanobench-1",
+    "name": "[trigger] ct-nanobench-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1041,10 +1041,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-2",
+      "stepname:ct-nanobench-2 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-2]"
     ],
-    "name": "[trigger] ct-nanobench-2",
+    "name": "[trigger] ct-nanobench-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1116,10 +1116,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-3",
+      "stepname:ct-nanobench-3 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-3]"
     ],
-    "name": "[trigger] ct-nanobench-3",
+    "name": "[trigger] ct-nanobench-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1191,10 +1191,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-4",
+      "stepname:ct-nanobench-4 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-4]"
     ],
-    "name": "[trigger] ct-nanobench-4",
+    "name": "[trigger] ct-nanobench-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1266,10 +1266,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-nanobench-5",
+      "stepname:ct-nanobench-5 on Ubuntu-14.04",
       "[dummy hash for ct-nanobench-5]"
     ],
-    "name": "[trigger] ct-nanobench-5",
+    "name": "[trigger] ct-nanobench-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1304,7 +1304,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-1"
     ],
-    "name": "ct-nanobench-1",
+    "name": "ct-nanobench-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1433,7 +1433,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-2"
     ],
-    "name": "ct-nanobench-2",
+    "name": "ct-nanobench-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1562,7 +1562,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-3"
     ],
-    "name": "ct-nanobench-3",
+    "name": "ct-nanobench-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1691,7 +1691,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-4"
     ],
-    "name": "ct-nanobench-4",
+    "name": "ct-nanobench-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1820,7 +1820,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-5"
     ],
-    "name": "ct-nanobench-5",
+    "name": "ct-nanobench-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_100k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_100k_SKPs.json
index eeeb6d1..a8e5c19 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_100k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_100k_SKPs.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-1",
+      "stepname:ct-get_images_from_skps-1 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-1]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-1",
+    "name": "[trigger] ct-get_images_from_skps-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-2",
+      "stepname:ct-get_images_from_skps-2 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-2]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-2",
+    "name": "[trigger] ct-get_images_from_skps-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-3",
+      "stepname:ct-get_images_from_skps-3 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-3]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-3",
+    "name": "[trigger] ct-get_images_from_skps-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-4",
+      "stepname:ct-get_images_from_skps-4 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-4]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-4",
+    "name": "[trigger] ct-get_images_from_skps-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-5",
+      "stepname:ct-get_images_from_skps-5 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-5]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-5",
+    "name": "[trigger] ct-get_images_from_skps-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-1"
     ],
-    "name": "ct-get_images_from_skps-1",
+    "name": "ct-get_images_from_skps-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-2"
     ],
-    "name": "ct-get_images_from_skps-2",
+    "name": "ct-get_images_from_skps-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-3"
     ],
-    "name": "ct-get_images_from_skps-3",
+    "name": "ct-get_images_from_skps-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1475,7 +1475,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-4"
     ],
-    "name": "ct-get_images_from_skps-4",
+    "name": "ct-get_images_from_skps-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1537,7 +1537,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-5"
     ],
-    "name": "ct-get_images_from_skps-5",
+    "name": "ct-get_images_from_skps-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs.json
index 05ec60a..212d21f 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-1",
+      "stepname:ct-get_images_from_skps-1 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-1]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-1",
+    "name": "[trigger] ct-get_images_from_skps-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-2",
+      "stepname:ct-get_images_from_skps-2 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-2]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-2",
+    "name": "[trigger] ct-get_images_from_skps-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-3",
+      "stepname:ct-get_images_from_skps-3 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-3]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-3",
+    "name": "[trigger] ct-get_images_from_skps-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-4",
+      "stepname:ct-get_images_from_skps-4 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-4]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-4",
+    "name": "[trigger] ct-get_images_from_skps-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-5",
+      "stepname:ct-get_images_from_skps-5 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-5]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-5",
+    "name": "[trigger] ct-get_images_from_skps-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-1"
     ],
-    "name": "ct-get_images_from_skps-1",
+    "name": "ct-get_images_from_skps-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-2"
     ],
-    "name": "ct-get_images_from_skps-2",
+    "name": "ct-get_images_from_skps-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-3"
     ],
-    "name": "ct-get_images_from_skps-3",
+    "name": "ct-get_images_from_skps-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1475,7 +1475,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-4"
     ],
-    "name": "ct-get_images_from_skps-4",
+    "name": "ct-get_images_from_skps-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1537,7 +1537,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-5"
     ],
-    "name": "ct-get_images_from_skps-5",
+    "name": "ct-get_images_from_skps-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs_Trybot.json b/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs_Trybot.json
index b06fc43..501e50b 100644
--- a/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs_Trybot.json
+++ b/infra/bots/recipes/swarm_ct_skps.expected/CT_IMG_DECODE_10k_SKPs_Trybot.json
@@ -963,10 +963,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-1",
+      "stepname:ct-get_images_from_skps-1 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-1]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-1",
+    "name": "[trigger] ct-get_images_from_skps-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1035,10 +1035,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-2",
+      "stepname:ct-get_images_from_skps-2 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-2]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-2",
+    "name": "[trigger] ct-get_images_from_skps-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1107,10 +1107,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-3",
+      "stepname:ct-get_images_from_skps-3 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-3]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-3",
+    "name": "[trigger] ct-get_images_from_skps-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1179,10 +1179,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-4",
+      "stepname:ct-get_images_from_skps-4 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-4]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-4",
+    "name": "[trigger] ct-get_images_from_skps-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1251,10 +1251,10 @@
       "--tag",
       "slavename:skiabot-linux-swarm-000",
       "--tag",
-      "stepname:ct-get_images_from_skps-5",
+      "stepname:ct-get_images_from_skps-5 on Ubuntu-14.04",
       "[dummy hash for ct-get_images_from_skps-5]"
     ],
-    "name": "[trigger] ct-get_images_from_skps-5",
+    "name": "[trigger] ct-get_images_from_skps-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1289,7 +1289,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-1"
     ],
-    "name": "ct-get_images_from_skps-1",
+    "name": "ct-get_images_from_skps-1 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1351,7 +1351,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-2"
     ],
-    "name": "ct-get_images_from_skps-2",
+    "name": "ct-get_images_from_skps-2 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1413,7 +1413,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-3"
     ],
-    "name": "ct-get_images_from_skps-3",
+    "name": "ct-get_images_from_skps-3 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1475,7 +1475,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-4"
     ],
-    "name": "ct-get_images_from_skps-4",
+    "name": "ct-get_images_from_skps-4 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -1537,7 +1537,7 @@
       "--task-output-dir",
       "[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-5"
     ],
-    "name": "ct-get_images_from_skps-5",
+    "name": "ct-get_images_from_skps-5 on Ubuntu-14.04",
     "~followup_annotations": [
       "@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
diff --git a/infra/bots/recipes/swarm_ct_skps.py b/infra/bots/recipes/swarm_ct_skps.py
index 20142fc7..298c67d 100644
--- a/infra/bots/recipes/swarm_ct_skps.py
+++ b/infra/bots/recipes/swarm_ct_skps.py
@@ -426,7 +426,7 @@
 
   yield(
     api.test('CT_DM_1m_SKPs_slave3_failure') +
-    api.step_data('ct-dm-3', retcode=1) +
+    api.step_data('ct-dm-3 on Ubuntu-14.04', retcode=1) +
     api.properties(
         buildername='Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs',
         mastername=mastername,
@@ -443,8 +443,8 @@
 
   yield(
     api.test('CT_DM_1m_SKPs_2slaves_failure') +
-    api.step_data('ct-dm-1', retcode=1) +
-    api.step_data('ct-dm-3', retcode=1) +
+    api.step_data('ct-dm-1 on Ubuntu-14.04', retcode=1) +
+    api.step_data('ct-dm-3 on Ubuntu-14.04', retcode=1) +
     api.properties(
         buildername='Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs',
         mastername=mastername,
diff --git a/infra/bots/recipes/swarm_infra.py b/infra/bots/recipes/swarm_infra.py
index bb70a6a..3a57055 100644
--- a/infra/bots/recipes/swarm_infra.py
+++ b/infra/bots/recipes/swarm_infra.py
@@ -23,11 +23,12 @@
   api.infra.update_go_deps()
 
   # Run the infra tests.
-  infra_tests = api.vars.skia_dir.join('infra', 'bots', 'infra_tests.py')
-  with api.step.context({'cwd': api.vars.skia_dir}):
-    api.step('infra_tests',
-             cmd=['python', infra_tests],
-             env=api.infra.go_env)
+  infra_tests = api.vars.skia_dir.join(
+      'infra', 'bots', 'infra_tests.py')
+  api.step('infra_tests',
+           cmd=['python', infra_tests],
+           cwd=api.vars.skia_dir,
+           env=api.infra.go_env)
 
 
 def GenTests(api):
diff --git a/infra/bots/recipes/swarm_presubmit.py b/infra/bots/recipes/swarm_presubmit.py
index 940591e..6a3f52b 100644
--- a/infra/bots/recipes/swarm_presubmit.py
+++ b/infra/bots/recipes/swarm_presubmit.py
@@ -21,27 +21,33 @@
   api.vars.setup()
   api.core.checkout_steps()
 
-  with api.step.context({'cwd': api.vars.skia_dir}):
-    # git-cl wants us to be on a branch.
-    branch = 'tmp_%s' % api.uuid.random()
-    api.step('create git branch',
-             cmd=['git', 'checkout', '-b', branch])
-    try:
-      api.step('git status',
-               cmd=['git', 'status'])
-  
-      depot_tools_path = api.depot_tools.package_repo_resource()
-      env = {'PATH': api.path.pathsep.join([str(depot_tools_path), '%(PATH)s'])}
-      api.step('presubmit',
-               cmd=['git', 'cl', 'presubmit', '--force', '-v', '-v'],
-               env=env)
-    finally:
-      api.step('git reset',
-               cmd=['git', 'reset', '--hard', 'origin/master'])
-      api.step('checkout origin/master',
-               cmd=['git', 'checkout', 'origin/master'])
-      api.step('delete git branch',
-               cmd=['git', 'branch', '-D', branch])
+  # git-cl wants us to be on a branch.
+  branch = 'tmp_%s' % api.uuid.random()
+  api.step('create git branch',
+           cmd=['git', 'checkout', '-b', branch],
+           cwd=api.vars.skia_dir)
+  try:
+    api.step('git status',
+             cmd=['git', 'status'],
+             cwd=api.vars.skia_dir)
+
+    depot_tools_path = api.depot_tools.package_repo_resource()
+    env = {'PATH': api.path.pathsep.join([str(depot_tools_path), '%(PATH)s'])}
+    api.step('presubmit',
+             cmd=['git', 'cl', 'presubmit', '--force', '-v', '-v'],
+             cwd=api.vars.skia_dir,
+             env=env)
+  finally:
+    api.step('git reset',
+             cmd=['git', 'reset', '--hard', 'origin/master'],
+             cwd=api.vars.skia_dir)
+    api.step('checkout origin/master',
+             cmd=['git', 'checkout', 'origin/master'],
+             cwd=api.vars.skia_dir)
+    api.step('delete git branch',
+             cmd=['git', 'branch', '-D', branch],
+             cwd=api.vars.skia_dir)
+             
 
 
 def GenTests(api):
diff --git a/infra/config/recipes.cfg b/infra/config/recipes.cfg
index 0fa6be0..a791e99 100644
--- a/infra/config/recipes.cfg
+++ b/infra/config/recipes.cfg
@@ -5,17 +5,17 @@
   project_id: "build"
   url: "https://chromium.googlesource.com/chromium/tools/build.git"
   branch: "master"
-  revision: "6b450ffd2718390976e2b3b5741e66659c4bb9ad"
+  revision: "c6915f4e3f0da5847c186303c98b792fdd63075e"
 }
 deps {
   project_id: "depot_tools"
   url: "https://chromium.googlesource.com/chromium/tools/depot_tools.git"
   branch: "master"
-  revision: "d8ee616eb8985326da7de2f0f93632a2d156a8d8"
+  revision: "2a6c76ea36e165144a491c9e89b9fd79959fc98c"
 }
 deps {
   project_id: "recipe_engine"
   url: "https://chromium.googlesource.com/external/github.com/luci/recipes-py.git"
   branch: "master"
-  revision: "e8470584a8a0a7a00541b1ab57e48f2793795743"
+  revision: "a7a17ae6545a9ff04b71b3655ff4d08a0de32926"
 }