pw_presubmit, util: Save build metadata to GCS

Save build metadata to GCS so it's easier for other tooling to extract
that metadata without requiring `bb`.

Testing: reran http://go/bbid/8838531764020419504 with this recipe at
https://ci.chromium.org/swarming/task/5577a409e4381010?server=chrome-swarming.appspot.com

Change-Id: Ib2af975887fadb1707072b8aa7322b8e14896b51
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/57681
Commit-Queue: Rob Mohr <mohrr@google.com>
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Reviewed-by: Oliver Newman <olivernewman@google.com>
diff --git a/recipe_modules/util/api.py b/recipe_modules/util/api.py
index 5bdd2e9..5ea10e2 100644
--- a/recipe_modules/util/api.py
+++ b/recipe_modules/util/api.py
@@ -13,9 +13,11 @@
 # the License.
 """Utility functions common to multiple recipes that don't fit elsewhere."""
 
+import json
 import re
 
 import attr
+from google.protobuf import json_format
 from recipe_engine import recipe_api
 
 
@@ -91,3 +93,15 @@
                     pass
 
         return result
+
+    def build_metadata(self):
+        return {
+            'bb_id': self.m.buildbucket.build.id,
+            'swarming_id': self.m.swarming.task_id,
+            'builder': self.m.buildbucket_util.full_builder_name(),
+            'url': self.m.buildbucket_util.build_url,
+            'triggers': [
+                json.loads(json_format.MessageToJson(x))
+                for x in self.m.scheduler.triggers
+            ],
+        }