|
| 1 | +FROM ubuntu:22.04 AS base-bazel |
| 2 | + |
| 3 | +ENV BAZEL_VERSION=7.0.0 |
| 4 | +ENV DEBIAN_FRONTEND=noninteractive |
| 5 | + |
| 6 | +RUN apt-get update && apt-get install -y \ |
| 7 | + curl \ |
| 8 | + git \ |
| 9 | + zip \ |
| 10 | + unzip \ |
| 11 | + openjdk-21-jdk \ |
| 12 | + maven \ |
| 13 | + g++ \ |
| 14 | + gcc \ |
| 15 | + golang-go \ |
| 16 | + && apt-get clean |
| 17 | + |
| 18 | +RUN apt-get install software-properties-common -y |
| 19 | +RUN add-apt-repository ppa:deadsnakes/ppa -y |
| 20 | +RUN apt-get install python3.10 python3.10-dev -y |
| 21 | + |
| 22 | +RUN curl -fsSL https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-installer-linux-x86_64.sh -o bazel-installer.sh \ |
| 23 | + && chmod +x bazel-installer.sh \ |
| 24 | + && ./bazel-installer.sh \ |
| 25 | + && rm bazel-installer.sh |
| 26 | + |
| 27 | +RUN bazel --version |
| 28 | + |
| 29 | +FROM base-bazel AS build-bazel |
| 30 | + |
| 31 | +# Run as non-root - Required for rules_python |
| 32 | +# See: https://github.com/bazelbuild/rules_python/pull/713 |
| 33 | +# Create group and user |
| 34 | +RUN groupadd -r bazeluser && useradd -r -m -g bazeluser bazeluser |
| 35 | +RUN mkdir -p /build && \ |
| 36 | + chown -R bazeluser:bazeluser /build && \ |
| 37 | + chmod -R 777 /build |
| 38 | + |
| 39 | +USER bazeluser |
| 40 | +WORKDIR /build |
| 41 | + |
| 42 | +# Copy entire repository for convenience |
| 43 | +# Invalidate cache to ensure updates are captured |
| 44 | +ARG CACHEBUST=1 |
| 45 | +COPY --chown=bazeluser:bazeluser . . |
| 46 | + |
| 47 | +################################################# |
| 48 | +##### JAVA STAGES ############################### |
| 49 | +################################################# |
| 50 | + |
| 51 | +FROM build-bazel AS build-bazel-java |
| 52 | + |
| 53 | +RUN bazel build //:java_protos_all |
| 54 | + |
| 55 | +FROM build-bazel-java AS package-bazel-java |
| 56 | + |
| 57 | +RUN /build/tools/java/package_proto_jar.sh |
| 58 | + |
| 59 | +FROM package-bazel-java AS test-bazel-java |
| 60 | + |
| 61 | +ARG OPENSEARCH_BRANCH=main |
| 62 | +ARG PROTO_SNAPSHOT_VERSION=0.4.0 |
| 63 | + |
| 64 | +ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 |
| 65 | +ENV PATH=$PATH:$JAVA_HOME/bin |
| 66 | +ENV PUB_ARTIFACTS=/build/generated/maven/publish/ |
| 67 | + |
| 68 | +RUN mvn install:install-file \ |
| 69 | + -Dfile=${PUB_ARTIFACTS}protobufs-${PROTO_SNAPSHOT_VERSION}-SNAPSHOT.jar \ |
| 70 | + -DpomFile=${PUB_ARTIFACTS}protobufs-${PROTO_SNAPSHOT_VERSION}-SNAPSHOT.pom \ |
| 71 | + -Dsources=${PUB_ARTIFACTS}protobufs-${PROTO_SNAPSHOT_VERSION}-SNAPSHOT-sources.jar \ |
| 72 | + -Djavadoc=${PUB_ARTIFACTS}protobufs-${PROTO_SNAPSHOT_VERSION}-SNAPSHOT-javadoc.jar |
| 73 | + |
| 74 | +RUN git clone --branch ${OPENSEARCH_BRANCH} https://github.com/opensearch-project/OpenSearch.git /build/opensearch |
| 75 | + |
| 76 | +WORKDIR /build/opensearch |
| 77 | + |
| 78 | +# Update transport-grpc/build.gradle to use PROTO_SNAPSHOT_VERSION |
| 79 | +RUN sed -i 's/org\.opensearch:protobufs:[0-9]\+\.[0-9]\+\.[0-9]\+/org.opensearch:protobufs:'"${PROTO_SNAPSHOT_VERSION}"'/' /build/opensearch/plugins/transport-grpc/build.gradle |
| 80 | + |
| 81 | +RUN ./gradlew :plugins:transport-grpc:test -Drepos.mavenLocal |
| 82 | +RUN ./gradlew :plugins:transport-grpc:internalClusterTest -Drepos.mavenLocal |
| 83 | + |
| 84 | +################################################# |
| 85 | +##### PYTHON STAGES ############################# |
| 86 | +################################################# |
| 87 | + |
| 88 | +FROM build-bazel AS build-bazel-python |
| 89 | + |
| 90 | +RUN bazel build //:python_protos_all |
| 91 | + |
| 92 | +################################################# |
| 93 | +##### GO STAGES ################################## |
| 94 | +################################################# |
| 95 | + |
| 96 | +FROM build-bazel AS build-bazel-go |
| 97 | + |
| 98 | +RUN bazel build //:go_protos_all |
| 99 | + |
| 100 | +FROM build-bazel-go AS package-bazel-go |
| 101 | + |
| 102 | +# Create a clean directory structure for Go protobuf files |
| 103 | +RUN mkdir -p /build/generated/go/opensearchpb && \ |
| 104 | + mkdir -p /build/generated/go/services |
| 105 | + |
| 106 | +# Copy generated Go protobuf files |
| 107 | +RUN find bazel-bin/protos/schemas -name "*.pb.go" -path "*_go_proto_pb*" -exec cp {} /build/generated/go/opensearchpb/ \; && \ |
| 108 | + find bazel-bin/protos/services -name "*.pb.go" -path "*_go_proto_pb*" -exec cp {} /build/generated/go/services/ \; && \ |
| 109 | + find bazel-bin/protos/services -name "*_grpc.pb.go" -path "*_go_proto_pb*" -exec cp {} /build/generated/go/services/ \; |
| 110 | + |
| 111 | +FROM package-bazel-go AS test-bazel-go |
| 112 | + |
| 113 | +# Set up Go module and validate generated code |
| 114 | +WORKDIR /build/generated/go |
| 115 | + |
| 116 | +# Create go.mod with proper module path |
| 117 | +RUN echo 'module github.com/opensearch-project/opensearch-protobufs/go' > go.mod && \ |
| 118 | + echo '' >> go.mod && \ |
| 119 | + echo 'go 1.19' >> go.mod && \ |
| 120 | + echo '' >> go.mod && \ |
| 121 | + echo 'require (' >> go.mod && \ |
| 122 | + echo ' google.golang.org/protobuf v1.31.0' >> go.mod && \ |
| 123 | + echo ' google.golang.org/grpc v1.58.0' >> go.mod && \ |
| 124 | + echo ')' >> go.mod |
| 125 | + |
| 126 | +# Test that Go code compiles successfully |
| 127 | +RUN go mod tidy && \ |
| 128 | + go build ./... |
0 commit comments