generate-protos.sh
1 #!/usr/bin/env bash 2 set -euo pipefail 3 4 # Parse command line arguments 5 BUILD_ARGS="" 6 while [[ $# -gt 0 ]]; do 7 case $1 in 8 --no-cache) 9 BUILD_ARGS="--no-cache" 10 shift 11 ;; 12 *) 13 echo "Unknown option: $1" 14 echo "Usage: $0 [--no-cache]" 15 exit 1 16 ;; 17 esac 18 done 19 20 if ! docker info >/dev/null 2>&1; then 21 echo "Docker is not available. Please install Docker or start Docker daemon and try again." 22 exit 1 23 fi 24 25 echo "Building Docker image for proto compilation..." 26 IMAGE_NAME="mlflow-protos-gen" 27 docker build -t "$IMAGE_NAME" -f dev/Dockerfile.protos $BUILD_ARGS . 28 29 echo "Running proto compilation..." 30 CONTAINER_NAME="mlflow-protos-gen-$$" 31 # Cleanup function to ensure container is always removed 32 cleanup() { 33 echo "Cleaning up container..." 34 docker rm "$CONTAINER_NAME" 2>/dev/null || true 35 } 36 # Set trap to call cleanup on EXIT (normal or error) 37 trap cleanup EXIT 38 39 docker run --name "$CONTAINER_NAME" "$IMAGE_NAME" python dev/generate_protos.py 40 41 echo "Copying generated files back..." 42 docker cp "$CONTAINER_NAME:/mlflow/mlflow/protos/." "mlflow/protos/" 43 docker cp "$CONTAINER_NAME:/mlflow/tests/protos/." "tests/protos/" 44 docker cp "$CONTAINER_NAME:/mlflow/mlflow/java/client/src/main/java/." "mlflow/java/client/src/main/java/" 45 46 echo "Generating GraphQL schema from Protobuf files..." 47 uv run ./dev/proto_to_graphql/code_generator.py 48 49 echo "Generating REST API from Protobuf files..." 50 uv run ./dev/gen_rest_api.py 51 52 echo "Done!"