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