generate-proto.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env bash
  2. # Generate Python protobuf bindings using a specific protoc version.
  3. #
  4. # Usage:
  5. # wandb/proto/generate-proto.sh <protoc_version> <output_dir>
  6. #
  7. # Example:
  8. # wandb/proto/generate-proto.sh 27.0 wandb/proto/v5
  9. #
  10. # Protoc binaries are cached in .protoc/<version>/ at the repo root.
  11. set -euo pipefail
  12. if [ $# -ne 2 ]; then
  13. echo "Usage: $0 <protoc_version> <output_dir>" >&2
  14. exit 1
  15. fi
  16. PROTOC_VER="$1"
  17. OUT_DIR="$2"
  18. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  19. REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
  20. PROTOC_CACHE="$REPO_ROOT/.protoc"
  21. PROTOC="$PROTOC_CACHE/$PROTOC_VER/bin/protoc"
  22. PROTO_FILES=(
  23. wandb_base.proto
  24. wandb_internal.proto
  25. wandb_settings.proto
  26. wandb_telemetry.proto
  27. wandb_server.proto
  28. wandb_sync.proto
  29. wandb_api.proto
  30. )
  31. # ---------------------------------------------------------------------------
  32. # Ensure protoc is cached
  33. # ---------------------------------------------------------------------------
  34. if [ ! -x "$PROTOC" ]; then
  35. os="$(uname -s)"
  36. arch="$(uname -m)"
  37. if [ "$os" = "Darwin" ]; then
  38. if [ "$arch" = "arm64" ]; then
  39. os_arch="osx-aarch_64"
  40. else
  41. os_arch="osx-x86_64"
  42. fi
  43. else
  44. os_arch="linux-x86_64"
  45. fi
  46. echo "[INFO] Downloading protoc $PROTOC_VER..."
  47. fname="protoc-${PROTOC_VER}-${os_arch}.zip"
  48. url="https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VER}/${fname}"
  49. mkdir -p "$PROTOC_CACHE/$PROTOC_VER"
  50. curl -fsSL -o "/tmp/${fname}" "$url"
  51. unzip -qo "/tmp/${fname}" -d "$PROTOC_CACHE/$PROTOC_VER"
  52. rm -f "/tmp/${fname}"
  53. fi
  54. # ---------------------------------------------------------------------------
  55. # Generate
  56. # ---------------------------------------------------------------------------
  57. echo "[INFO] $("$PROTOC" --version) → $OUT_DIR"
  58. mkdir -p "$OUT_DIR"
  59. "$PROTOC" \
  60. -I "$REPO_ROOT" \
  61. "--python_out=$OUT_DIR" \
  62. "--pyi_out=$OUT_DIR" \
  63. "${PROTO_FILES[@]/#/$REPO_ROOT/wandb/proto/}"
  64. # protoc mirrors the import path inside OUT_DIR; move files up.
  65. if [ -d "$OUT_DIR/wandb/proto" ]; then
  66. mv -f "$OUT_DIR/wandb/proto/"*pb2* "$OUT_DIR/"
  67. rm -rf "$OUT_DIR/wandb"
  68. fi