/ dev / generate-protos.sh
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!"