generate_pb.sh 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env bash
  2. # Regenerate the vendored Python protobuf bindings under src/chattolib/_pb.
  3. #
  4. # Fetches the required .proto sources into proto/ (from chattocorp/chatto's
  5. # main branch and bufbuild/protovalidate) and runs protoc.
  6. #
  7. # Requirements: protoc on PATH, curl on PATH.
  8. #
  9. # Run from the repo root: ./scripts/generate_pb.sh
  10. set -euo pipefail
  11. if ! command -v protoc >/dev/null; then
  12. echo "protoc not found on PATH" >&2
  13. exit 1
  14. fi
  15. repo_root=$(cd "$(dirname "$0")/.." && pwd)
  16. cd "$repo_root"
  17. mkdir -p proto/chatto/realtime/v1 proto/chatto/api/v1 proto/buf/validate
  18. chatto_base="https://raw.githubusercontent.com/chattocorp/chatto/main/proto/chatto"
  19. fetch() {
  20. local rel=$1
  21. local dest="proto/$rel"
  22. curl -sfL "$chatto_base/${rel#chatto/}" -o "$dest"
  23. echo " $rel"
  24. }
  25. echo "Fetching proto sources ..."
  26. fetch chatto/realtime/v1/realtime.proto
  27. fetch chatto/api/v1/viewer.proto
  28. fetch chatto/api/v1/notification_preferences.proto
  29. fetch chatto/api/v1/presence.proto
  30. fetch chatto/api/v1/users.proto
  31. fetch chatto/api/v1/user_status.proto
  32. fetch chatto/api/v1/permissions.proto
  33. curl -sfL "https://raw.githubusercontent.com/bufbuild/protovalidate/main/proto/protovalidate/buf/validate/validate.proto" \
  34. -o proto/buf/validate/validate.proto
  35. echo " buf/validate/validate.proto"
  36. echo "Regenerating Python bindings ..."
  37. rm -rf src/chattolib/_pb/chatto src/chattolib/_pb/buf
  38. mkdir -p src/chattolib/_pb
  39. protoc --proto_path=proto --python_out=src/chattolib/_pb \
  40. proto/chatto/realtime/v1/realtime.proto \
  41. proto/chatto/api/v1/viewer.proto \
  42. proto/chatto/api/v1/notification_preferences.proto \
  43. proto/chatto/api/v1/presence.proto \
  44. proto/chatto/api/v1/users.proto \
  45. proto/chatto/api/v1/user_status.proto \
  46. proto/chatto/api/v1/permissions.proto \
  47. proto/buf/validate/validate.proto
  48. # Add __init__.py at every level so the generated modules form a package.
  49. for dir in \
  50. src/chattolib/_pb/chatto \
  51. src/chattolib/_pb/chatto/api \
  52. src/chattolib/_pb/chatto/api/v1 \
  53. src/chattolib/_pb/chatto/realtime \
  54. src/chattolib/_pb/chatto/realtime/v1 \
  55. src/chattolib/_pb/buf \
  56. src/chattolib/_pb/buf/validate
  57. do
  58. touch "$dir/__init__.py"
  59. done
  60. echo "Done."