Truncate error message that becomes summary_markdown build property

If a summary_markdown field longer than 4000 bytes is sent to
buildbucket's UpdateBuild API, the call is rejected.

Change-Id: I01cb5f40d98f381472a6c04292c298d7de5f9282
Reviewed-on: https://dart-review.googlesource.com/c/recipes/+/207060
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: William Hesse <whesse@google.com>
diff --git a/recipe_modules/dart/api.py b/recipe_modules/dart/api.py
index 948622d..0bd9e8c 100644
--- a/recipe_modules/dart/api.py
+++ b/recipe_modules/dart/api.py
@@ -879,7 +879,7 @@
         self.collect_all(sharded_steps)
     except recipe_api.AggregatedStepFailure as failure:
       if self.has_infra_failure(failure):
-        raise recipe_api.InfraFailure(failure.reason)
+        raise recipe_api.InfraFailure(failure.reason[0:3000])
       else:
         raise
     self._process_test_results(test_steps)