[roll_comment] Raise failure if any comment fails

Currently, we silence all comment failures in the roll commenter. But it
would be nice for the build to turn red so that we know that a CL didn't
get commented on, as long as the failure doesn't stop it from commenting
on later CLs.

Change-Id: I25cd7d4a842f44f841c693dc552cdffc8120ff30
diff --git a/recipes/roll_comment.expected/failed_comment.json b/recipes/roll_comment.expected/failed_comment.json
index ce43e8f..1cd1a26 100644
--- a/recipes/roll_comment.expected/failed_comment.json
+++ b/recipes/roll_comment.expected/failed_comment.json
@@ -105,7 +105,7 @@
     "cmd": [],
     "name": "comment successful roll",
     "~followup_annotations": [
-      "@@@STEP_FAILURE@@@"
+      "@@@STEP_EXCEPTION@@@"
     ]
   },
   {
@@ -183,6 +183,10 @@
     ]
   },
   {
+    "failure": {
+      "failure": {},
+      "humanReason": "1 out of 2 aggregated steps failed: Step('comment successful roll.comment on 100000a') (retcode: 1)"
+    },
     "name": "$result"
   }
 ]
\ No newline at end of file
diff --git a/recipes/roll_comment.py b/recipes/roll_comment.py
index e16a39c..4150d9e 100644
--- a/recipes/roll_comment.py
+++ b/recipes/roll_comment.py
@@ -67,7 +67,9 @@
   api.gerrit.host = gitiles_to_gerrit_host(source_repo)
   roll_cl_url = 'http://go/roll-cl/%s' % commit.id
 
-  with api.step.nest('comment successful roll'):
+  # Defer results because comment failures shouldn't prevent the roller from
+  # commenting on the rest of the changes.
+  with api.step.nest('comment successful roll'), api.step.defer_results():
     change_id_regex = re.compile(r'^Change-Id:\s*(\w+)\s*$', re.MULTILINE)
     for rolled_commit in source_log:
       # Check for Change-Id in the commit message. If no Change-Id is in the
@@ -79,18 +81,12 @@
         continue
 
       revision = rolled_commit['id']
-      try:
-        api.gerrit.set_review(
-            'comment on %s' % revision,
-            revision,
-            message='Change has been successfully rolled: %s' % roll_cl_url,
-            test_data=api.json.test_api.output({}),
-        )
-      except api.step.StepFailure:
-        # Comment failures shouldn't fail the build or prevent the roller from
-        # commenting on the rest of the changes.
-        pass
-
+      api.gerrit.set_review(
+          'comment on %s' % revision,
+          revision,
+          message='Change has been successfully rolled: %s' % roll_cl_url,
+          test_data=api.json.test_api.output({}),
+      )
       cl_link = '%s/q/%s' % (api.gerrit.host, revision)
       api.step.active_result.presentation.links['gerrit link'] = cl_link
 
@@ -134,7 +130,7 @@
   # If we get a Gerrit error commenting on the first CL, we should still try
   # comment on the second one.
   yield (
-      api.status_check.test('failed_comment')
+      api.status_check.test('failed_comment', status='failure')
       + api.buildbucket.ci_build()
       + api.gitiles.log(
           'get commit message',