# Copyright 2022 The gRPC Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. FROM arm64v8/debian:11 #================= # Basic C core dependencies # C/C++ dependencies according to https://github.com/grpc/grpc/blob/master/BUILDING.md RUN apt-get update && apt-get install -y \ build-essential \ autoconf \ libtool \ pkg-config \ && apt-get clean # GCC RUN apt-get update && apt-get install -y \ gcc \ g++ \ && apt-get clean # libc6 RUN apt-get update && apt-get install -y \ libc6 \ libc6-dbg \ libc6-dev \ && apt-get clean # Tools RUN apt-get update && apt-get install -y \ bzip2 \ curl \ dnsutils \ git \ lcov \ make \ strace \ time \ unzip \ wget \ zip \ && apt-get clean #================= # Setup git to access working directory across docker boundary. # This avoids the "fatal: detected dubious ownership in repository XYZ" # git error. RUN git config --global --add safe.directory '*' RUN git config --global protocol.file.allow always #==================== # run_tests.py python dependencies # Basic python dependencies to be able to run tools/run_tests python scripts # These dependencies are not sufficient to build gRPC Python, gRPC Python # deps are defined elsewhere (e.g. python_deps.include) RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ python3-setuptools \ python3-yaml \ && apt-get clean # use pinned version of pip to avoid sudden breakages RUN python3 -m pip install --upgrade pip==19.3.1 # TODO(jtattermusch): currently six is needed for tools/run_tests scripts # but since our python2 usage is deprecated, we should get rid of it. RUN python3 -m pip install six==1.16.0 # Google Cloud Platform API libraries # These are needed for uploading test results to BigQuery (e.g. by tools/run_tests scripts) RUN python3 -m pip install --upgrade google-auth==1.23.0 google-api-python-client==1.12.8 oauth2client==4.1.0 #================ # C# dependencies # cmake >=3.6 needed to build grpc_csharp_ext RUN apt-get update && apt-get install -y cmake && apt-get clean # Install mono RUN apt-get update && apt-get install -y apt-transport-https dirmngr && apt-get clean RUN apt-key adv --no-tty --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF RUN echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list RUN apt-get update && apt-get install -y \ mono-devel \ ca-certificates-mono \ nuget \ && apt-get clean # Install .NET Core 3.1 (to be able to run the netcoreapp3.1 targets) RUN DOTNET_DOWNLOAD_VERSION=3.1.415 \ && DOTNET_DOWNLOAD_ARCH="$(uname -m | sed s/x86_64/x64/ | sed s/aarch64/arm64/)" \ && curl -sSL -o dotnet.tar.gz https://dotnetcli.blob.core.windows.net/dotnet/Sdk/$DOTNET_DOWNLOAD_VERSION/dotnet-sdk-$DOTNET_DOWNLOAD_VERSION-linux-$DOTNET_DOWNLOAD_ARCH.tar.gz \ && mkdir -p /usr/share/dotnet \ && tar -zxf dotnet.tar.gz -C /usr/share/dotnet \ && rm dotnet.tar.gz # Install .NET 6 RUN DOTNET_DOWNLOAD_VERSION=6.0.100 \ && DOTNET_DOWNLOAD_ARCH="$(uname -m | sed s/x86_64/x64/ | sed s/aarch64/arm64/)" \ && curl -sSL -o dotnet.tar.gz https://dotnetcli.blob.core.windows.net/dotnet/Sdk/$DOTNET_DOWNLOAD_VERSION/dotnet-sdk-$DOTNET_DOWNLOAD_VERSION-linux-$DOTNET_DOWNLOAD_ARCH.tar.gz \ && mkdir -p /usr/share/dotnet \ && tar -zxf dotnet.tar.gz -C /usr/share/dotnet \ && rm dotnet.tar.gz # Make sure "dotnet" is on PATH RUN ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet # Trigger the population of the local package cache ENV NUGET_XMLDOC_MODE skip RUN mkdir warmup \ && cd warmup \ && dotnet new \ && cd .. \ && rm -rf warmup #================= # Install ccache # Install ccache from source since ccache 3.x packaged with most linux distributions # does not support Redis backend for caching. RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \ && tar -zxf ccache.tar.gz \ && cd ccache-4.7.5 \ && mkdir build && cd build \ && cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \ && make -j4 && make install \ && cd ../.. \ && rm -rf ccache-4.7.5 ccache.tar.gz RUN mkdir /var/local/jenkins # Define the default command. CMD ["bash"]