generate_go_protobuf.py 1.1 KB

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