Adds a present builds steps.

Before this change the main build was always green even if some of the
subbuilds failed.

Change-Id: Ib1fdb53ed4bf7ffc7366a59cc4b8c7aad2f1601b
Bug: https://github.com/flutter/flutter/issues/81855
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/16787
Reviewed-by: Keyong Han <keyonghan@google.com>
Commit-Queue: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipes/engine_v2/engine_v2.expected/basic.json b/recipes/engine_v2/engine_v2.expected/basic.json
index b0e7355..2db096f 100644
--- a/recipes/engine_v2/engine_v2.expected/basic.json
+++ b/recipes/engine_v2/engine_v2.expected/basic.json
@@ -390,6 +390,26 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "display builds"
+  },
+  {
+    "cmd": [],
+    "name": "display builds.builder-subbuild1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@8945511751514863186@https://cr-buildbucket.appspot.com/build/8945511751514863186@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "display builds.builder-subbuild2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@8945511751514863187@https://cr-buildbucket.appspot.com/build/8945511751514863187@@@"
+    ]
+  },
+  {
     "name": "$result"
   }
 ]
\ No newline at end of file
diff --git a/recipes/engine_v2/engine_v2.py b/recipes/engine_v2/engine_v2.py
index 3b2b124..60e23f3 100644
--- a/recipes/engine_v2/engine_v2.py
+++ b/recipes/engine_v2/engine_v2.py
@@ -18,9 +18,12 @@
 from PB.recipes.flutter.engine import EnvProperties
 
 from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb2
+from PB.go.chromium.org.luci.buildbucket.proto \
+  import builds_service as builds_service_pb2
 from google.protobuf import struct_pb2
 
 DEPS = [
+    'flutter/display_util',
     'flutter/repo_util',
     'flutter/shard_util_v2',
     'recipe_engine/buildbucket',
@@ -55,8 +58,14 @@
   with api.step.nest('launch builds') as presentation:
     tasks = api.shard_util_v2.schedule(builds, presentation)
   with api.step.nest('collect builds') as presentation:
-    api.shard_util_v2.collect([build.build_id for build in tasks.values()],
-                              presentation)
+    results = api.shard_util_v2.collect(
+        [build.build_id for build in tasks.values()],
+        presentation)
+  api.display_util.display_builds(
+      step_name='display builds',
+      builds=[b.build_proto for b in results.values()],
+        raise_on_failure=True,
+    )
 
 
 def GenTests(api):
@@ -77,6 +86,7 @@
       "ninja": {"config": "ios_debug", "targets": []},
       "generators": [{"name": "generator1", "script": "script1.sh"}]
   }]
+
   yield api.test(
       'basic', api.properties(builds=builds),
       api.buildbucket.try_build(
@@ -84,11 +94,11 @@
           builder='try-builder',
           git_repo='https://github.com/repo/a',
           revision='a' * 40,
-          build_number=123
+          build_number=123,
       ),
       api.shard_util_v2.child_build_steps(
           builds=[try_subbuild1, try_subbuild2],
           launch_step="launch builds",
           collect_step="collect builds",
-      )
+      ),
   )