1#!/usr/bin/env python3
2
3from subprocess import check_output
4import glob
5import os
6import shutil
7
8def generateProtobufs(output):
9  bazel_bin = check_output(['bazel', 'info', 'bazel-bin']).decode().strip()
10
11  go_protos = check_output([
12      'bazel',
13      'query',
14      'kind("go_proto_library", ...)',
15  ]).split()
16
17  check_output(['bazel', 'build', '-c', 'fastbuild'] + go_protos)
18
19  for rule in go_protos:
20    rule_dir  = rule.decode()[2:].rsplit(':')[0]
21    input_dir = os.path.join(bazel_bin, rule_dir, 'pkg_go_proto_',
22                             'github.com/cncf/xds/go', rule_dir)
23    input_files = glob.glob(os.path.join(input_dir, '*.go'))
24    output_dir = os.path.join(output, rule_dir)
25
26    # Ensure the output directory exists
27    os.makedirs(output_dir, 0o755, exist_ok=True)
28    for generated_file in input_files:
29      output_file = shutil.copy(generated_file, output_dir)
30      os.chmod(output_file, 0o644)
31
32
33if __name__ == "__main__":
34  workspace = check_output(['bazel', 'info', 'workspace']).decode().strip()
35  output = os.path.join(workspace, 'go')
36  generateProtobufs(output)
37