Skip to content

Commit ed7b331

Browse files
committed
Update Dockerfile
1 parent 3768eaf commit ed7b331

File tree

1 file changed

+119
-24
lines changed

1 file changed

+119
-24
lines changed

tests/slo_workloads/Dockerfile

Lines changed: 119 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,126 @@
1-
FROM ubuntu:22.04 AS build
1+
FROM ubuntu:22.04
22

3-
ARG SRC_PATH
4-
ARG BINARY_NAME
5-
ARG REF="unknown"
3+
ARG PRESET=release-test-clang
4+
ARG REF=unknown
65

7-
RUN apt-get update \
8-
&& apt-get install -y --no-install-recommends python3 \
9-
&& apt-get clean \
10-
&& rm -rf /var/lib/apt/lists/*
6+
# Install software-properties-common for add-apt-repository
7+
RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test
118

12-
COPY build/ /build/
13-
COPY certs/ /certs/
14-
COPY contrib/ /contrib/
15-
COPY library/cpp/ /library/cpp/
16-
COPY tools/ /tools/
17-
COPY util/ /util/
18-
COPY ydb/library/yverify_stream/ /ydb/library/yverify_stream/
19-
COPY ydb/public/api/ /ydb/public/api/
20-
COPY ydb/public/lib/protobuf/ /ydb/public/lib/protobuf/
21-
COPY ydb/public/lib/validation/ /ydb/public/lib/validation/
22-
COPY ydb/public/sdk/cpp/ /ydb/public/sdk/cpp/
9+
# Install C++ tools and libraries
10+
RUN apt-get -y update && apt-get -y install \
11+
git gdb wget ninja-build libidn11-dev ragel yasm libc-ares-dev libre2-dev \
12+
rapidjson-dev zlib1g-dev libxxhash-dev libzstd-dev libsnappy-dev libgtest-dev libgmock-dev \
13+
libbz2-dev liblz4-dev libdouble-conversion-dev libssl-dev libstdc++-13-dev gcc-13 g++-13 \
14+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
2315

24-
COPY ./ya /
16+
# Install CMake
17+
ENV CMAKE_VERSION=3.27.7
18+
RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \
19+
-q -O cmake-install.sh \
20+
&& chmod u+x cmake-install.sh \
21+
&& ./cmake-install.sh --skip-license --prefix=/usr/local \
22+
&& rm cmake-install.sh
2523

26-
RUN ./ya make -r -D REF=${REF} ydb/public/sdk/cpp/tests/slo_workloads/${SRC_PATH} && cp ydb/public/sdk/cpp/tests/slo_workloads/${SRC_PATH}/${BINARY_NAME} /slo-workload-bin
24+
# Install LLVM
25+
ENV LLVM_VERSION=16
26+
RUN wget https://apt.llvm.org/llvm.sh && \
27+
chmod u+x llvm.sh && \
28+
./llvm.sh ${LLVM_VERSION} && \
29+
rm llvm.sh
2730

28-
FROM ubuntu:22.04
31+
# Update alternatives to use clang-16 by default
32+
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10000 && \
33+
update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 10000 && \
34+
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} 10000
35+
36+
# Update alternatives to use gcc-13 by default
37+
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \
38+
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10000
39+
40+
# Install abseil-cpp
41+
ENV ABSEIL_CPP_VERSION=20230802.0
42+
ENV ABSEIL_CPP_INSTALL_DIR=/root/ydb_deps/absl
43+
RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \
44+
tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \
45+
mkdir build && cd build && \
46+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON .. && \
47+
cmake --build . --config Release && \
48+
cmake --install . --config Release --prefix ${ABSEIL_CPP_INSTALL_DIR} && \
49+
rm -rf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz abseil-cpp-${ABSEIL_CPP_VERSION}
50+
51+
# Install protobuf
52+
ENV PROTOBUF_VERSION=3.21.12
53+
ENV PROTOBUF_INSTALL_DIR=/root/ydb_deps/protobuf
54+
RUN wget -O protobuf-${PROTOBUF_VERSION}.tar.gz https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz && \
55+
tar -xvzf protobuf-${PROTOBUF_VERSION}.tar.gz && cd protobuf-${PROTOBUF_VERSION} && \
56+
mkdir build && cd build && \
57+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_INSTALL=ON -Dprotobuf_ABSL_PROVIDER=package .. && \
58+
cmake --build . --config Release && \
59+
cmake --install . --config Release --prefix ${PROTOBUF_INSTALL_DIR} && \
60+
rm -rf protobuf-${PROTOBUF_VERSION}.tar.gz protobuf-${PROTOBUF_VERSION}
61+
62+
# Install grpc
63+
ENV GRPC_VERSION=1.54.3
64+
ENV GRPC_INSTALL_DIR=/root/ydb_deps/grpc
65+
RUN wget -O grpc-${GRPC_VERSION}.tar.gz https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VERSION}.tar.gz && \
66+
tar -xvzf grpc-${GRPC_VERSION}.tar.gz && cd grpc-${GRPC_VERSION} && \
67+
mkdir build && cd build && \
68+
cmake -G Ninja -DCMAKE_PREFIX_PATH="${ABSEIL_CPP_INSTALL_DIR};${PROTOBUF_INSTALL_DIR}" \
69+
-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \
70+
-DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_BUILD_CSHARP_EXT=OFF \
71+
-DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_RE2_PROVIDER=package \
72+
-DgRPC_SSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ABSL_PROVIDER=package \
73+
-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
74+
-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF .. && \
75+
cmake --build . --config Release && \
76+
cmake --install . --config Release --prefix ${GRPC_INSTALL_DIR} && \
77+
rm -rf grpc-${GRPC_VERSION}.tar.gz grpc-${GRPC_VERSION}
78+
79+
# Install base64
80+
ENV BASE64_VERSION=0.5.2
81+
ENV BASE64_INSTALL_DIR=/root/ydb_deps/base64
82+
RUN wget -O base64-${BASE64_VERSION}.tar.gz https://github.com/aklomp/base64/archive/refs/tags/v${BASE64_VERSION}.tar.gz && \
83+
tar -xvzf base64-${BASE64_VERSION}.tar.gz && cd base64-${BASE64_VERSION} && \
84+
mkdir build && cd build && \
85+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \
86+
cmake --build . --config Release && \
87+
cmake --install . --config Release --prefix ${BASE64_INSTALL_DIR} && \
88+
rm -rf base64-${BASE64_VERSION}.tar.gz base64-${BASE64_VERSION}
89+
90+
# Install brotli
91+
ENV BROTLI_VERSION=1.1.0
92+
ENV BROTLI_INSTALL_DIR=/root/ydb_deps/brotli
93+
RUN wget -O brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz && \
94+
tar -xvzf brotli-${BROTLI_VERSION}.tar.gz && cd brotli-${BROTLI_VERSION} && \
95+
mkdir build && cd build && \
96+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \
97+
cmake --build . --config Release && \
98+
cmake --install . --config Release --prefix ${BROTLI_INSTALL_DIR} && \
99+
rm -rf brotli-${BROTLI_VERSION}.tar.gz brotli-${BROTLI_VERSION}
100+
101+
# Install jwt-cpp
102+
ENV JWT_CPP_VERSION=0.7.0
103+
ENV JWT_CPP_INSTALL_DIR=/root/ydb_deps/jwt-cpp
104+
RUN wget -O jwt-cpp-${JWT_CPP_VERSION}.tar.gz https://github.com/Thalhammer/jwt-cpp/archive/refs/tags/v${JWT_CPP_VERSION}.tar.gz && \
105+
tar -xvzf jwt-cpp-${JWT_CPP_VERSION}.tar.gz && cd jwt-cpp-${JWT_CPP_VERSION} && \
106+
mkdir build && cd build && \
107+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \
108+
cmake --build . --config Release && \
109+
cmake --install . --config Release --prefix ${JWT_CPP_INSTALL_DIR} && \
110+
rm -rf jwt-cpp-${JWT_CPP_VERSION}.tar.gz jwt-cpp-${JWT_CPP_VERSION}
111+
112+
# Install ccache 4.8.1 or above
113+
ENV CCACHE_VERSION=4.8.1
114+
RUN wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \
115+
&& tar -xf ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \
116+
&& cp ccache-${CCACHE_VERSION}-linux-x86_64/ccache /usr/local/bin/ \
117+
&& rm -rf ccache-${CCACHE_VERSION}-linux-x86_64 ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz
118+
119+
COPY . /ydb-cpp-sdk
120+
WORKDIR /ydb-cpp-sdk
121+
RUN rm -rf build
122+
123+
RUN cmake -DSLO_BRANCH_REF=${REF} --preset ${PRESET}
124+
RUN cmake --build --preset default --target slo-key-value
29125

30-
COPY --from=build /slo-workload-bin /
31-
ENTRYPOINT ["/slo-workload-bin"]
126+
ENTRYPOINT ["./build/tests/slo_workloads/key_value/slo-key-value"]

0 commit comments

Comments
 (0)