| # Copyright 2022 The Chromium Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| from recipe_engine import recipe_api | |
| from google.protobuf import json_format | |
| from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb2 | |
| from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb2 | |
| class StatusReportingApi(recipe_api.RecipeApi): | |
| def build_to_json(self, build): | |
| """Encodes a shard_util.SubbuildResult to a json string. | |
| Args: | |
| build(build.Build): The build to encode. | |
| Returns: | |
| A string with the Build message encoded as Json. | |
| """ | |
| return json_format.MessageToJson(build) | |
| def publish_builds( | |
| self, | |
| subbuilds, | |
| topic='projects/flutter-dashboard/topics/luci-builds-prod', | |
| only_publish_build_id=False | |
| ): | |
| """Publish builds to a pubsub topic. | |
| Args: | |
| subbuilds(dict): A dictionary with the build name as key and a value | |
| of shard_util.SubbuildResult as a value. | |
| topic(str): (optional) gcloud topic to publish message to. | |
| only_publish_build_id(bool): (optional) If True, only publish the build_id | |
| of the shard_util.SubbuildResult instead of the entire build json. | |
| """ | |
| with self.m.step.nest('Publish results') as presentation: | |
| for id_name, build in subbuilds.items(): | |
| if only_publish_build_id is True: | |
| message = build.build_id | |
| else: | |
| message = self.build_to_json(build.build_proto) | |
| cmd = [ | |
| 'pubsub', 'topics', 'publish', topic, | |
| '--message=\'%s\'' % message | |
| ] | |
| self.m.gcloud(*cmd, infra_step=True) |