|
| 1 | +# ref: https://hub.docker.com/_/debian |
| 2 | +FROM debian:12 AS env |
| 3 | + |
| 4 | +############# |
| 5 | +## SETUP ## |
| 6 | +############# |
| 7 | +RUN apt-get update -qq \ |
| 8 | +&& apt-get install -qq \ |
| 9 | + git pkg-config wget make autoconf libtool zlib1g-dev gawk g++ curl subversion \ |
| 10 | + swig lsb-release \ |
| 11 | +&& apt-get clean \ |
| 12 | +&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 13 | +ENTRYPOINT ["/bin/bash", "-c"] |
| 14 | +CMD ["/bin/bash"] |
| 15 | + |
| 16 | +# Install CMake 3.28.3 |
| 17 | +RUN ARCH=$(uname -m) \ |
| 18 | +&& wget -q "https://cmake.org/files/v3.28/cmake-3.28.3-linux-${ARCH}.sh" \ |
| 19 | +&& chmod a+x cmake-3.28.3-linux-${ARCH}.sh \ |
| 20 | +&& ./cmake-3.28.3-linux-${ARCH}.sh --prefix=/usr/local/ --skip-license \ |
| 21 | +&& rm cmake-3.28.3-linux-${ARCH}.sh |
| 22 | + |
| 23 | +# Install .Net |
| 24 | +# see https://docs.microsoft.com/en-us/dotnet/core/install/linux-debian#debian-11- |
| 25 | +RUN apt-get update -qq \ |
| 26 | +&& apt-get install -qq gpg apt-transport-https \ |
| 27 | +&& wget -q "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb \ |
| 28 | +&& dpkg -i packages-microsoft-prod.deb \ |
| 29 | +&& rm packages-microsoft-prod.deb \ |
| 30 | +&& apt-get update -qq \ |
| 31 | +&& apt-get install -qq dotnet-sdk-3.1 dotnet-sdk-6.0 \ |
| 32 | +&& apt-get clean \ |
| 33 | +&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 34 | +# Trigger first run experience by running arbitrary cmd |
| 35 | +RUN dotnet --info |
| 36 | + |
| 37 | +# Java Install |
| 38 | +RUN apt-get update -qq \ |
| 39 | +&& apt-get install -qq default-jdk maven \ |
| 40 | +&& apt-get clean \ |
| 41 | +&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 42 | +ENV JAVA_HOME=/usr/lib/jvm/default-java |
| 43 | + |
| 44 | +# Install Python |
| 45 | +RUN apt-get update -qq \ |
| 46 | +&& apt-get install -qq python3 python3-dev python3-pip python3-venv \ |
| 47 | +&& apt-get clean \ |
| 48 | +&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 49 | +RUN python3 -m pip install absl-py mypy mypy-protobuf |
| 50 | + |
| 51 | +ENV TZ=America/Los_Angeles |
| 52 | +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone |
| 53 | + |
| 54 | +################ |
| 55 | +## OR-TOOLS ## |
| 56 | +################ |
| 57 | +FROM env AS devel |
| 58 | +WORKDIR /root |
| 59 | +# Copy the snk key |
| 60 | +COPY or-tools.snk /root/or-tools.snk |
| 61 | +ENV DOTNET_SNK=/root/or-tools.snk |
| 62 | + |
| 63 | +ARG SRC_GIT_BRANCH |
| 64 | +ENV SRC_GIT_BRANCH ${SRC_GIT_BRANCH:-main} |
| 65 | +ARG SRC_GIT_SHA1 |
| 66 | +ENV SRC_GIT_SHA1 ${SRC_GIT_SHA1:-unknown} |
| 67 | + |
| 68 | +ARG OR_TOOLS_PATCH |
| 69 | +ENV OR_TOOLS_PATCH ${OR_TOOLS_PATCH:-9999} |
| 70 | + |
| 71 | +# Download sources |
| 72 | +# use SRC_GIT_SHA1 to modify the command |
| 73 | +# i.e. avoid docker reusing the cache when new commit is pushed |
| 74 | +SHELL ["/bin/bash", "-c"] |
| 75 | +RUN git clone -b "${SRC_GIT_BRANCH}" --single-branch --depth=1 https://github.com/google/or-tools \ |
| 76 | +&& [[ $(cd or-tools && git rev-parse --verify HEAD) == ${SRC_GIT_SHA1} ]] |
| 77 | +WORKDIR /root/or-tools |
| 78 | + |
| 79 | +# C++ |
| 80 | +## build |
| 81 | +FROM devel AS cpp_build |
| 82 | +RUN make detect_cpp \ |
| 83 | +&& make cpp JOBS=8 |
| 84 | +## archive |
| 85 | +FROM cpp_build AS cpp_archive |
| 86 | +RUN make archive_cpp |
| 87 | + |
| 88 | +# .Net |
| 89 | +## build |
| 90 | +FROM cpp_build AS dotnet_build |
| 91 | +ENV USE_DOTNET_CORE_31=ON |
| 92 | +RUN make detect_dotnet \ |
| 93 | +&& make dotnet JOBS=8 |
| 94 | +## archive |
| 95 | +FROM dotnet_build AS dotnet_archive |
| 96 | +RUN make archive_dotnet |
| 97 | + |
| 98 | +# Java |
| 99 | +## build |
| 100 | +FROM cpp_build AS java_build |
| 101 | +RUN make detect_java \ |
| 102 | +&& make java JOBS=8 |
| 103 | +## archive |
| 104 | +FROM java_build AS java_archive |
| 105 | +RUN make archive_java |
| 106 | + |
| 107 | +# Python |
| 108 | +## build |
| 109 | +FROM cpp_build AS python_build |
| 110 | +RUN make detect_python \ |
| 111 | +&& make python JOBS=8 |
| 112 | +## archive |
| 113 | +FROM python_build AS python_archive |
| 114 | +RUN make archive_python |
0 commit comments