diff --git a/.github/workflows/amd64_docker_cmake.yml b/.github/workflows/amd64_docker_cmake.yml index d96a34ad11..f9aa710a47 100644 --- a/.github/workflows/amd64_docker_cmake.yml +++ b/.github/workflows/amd64_docker_cmake.yml @@ -7,7 +7,7 @@ jobs: cmake: strategy: matrix: - distro: [alpine, archlinux, centos, debian, fedora, opensuse, ubuntu] + distro: [almalinux, alpine, archlinux, debian, fedora, opensuse, rockylinux, ubuntu] lang: [cpp, python, dotnet, java] fail-fast: false name: ${{ matrix.distro }} • CMake • ${{ matrix.lang }} diff --git a/cmake/Makefile b/cmake/Makefile index d1044fc80b..ac453a7da0 100644 --- a/cmake/Makefile +++ b/cmake/Makefile @@ -38,12 +38,13 @@ help: @echo -e "\t${BOLD}clean__${RESET}: Remove a docker image for a specific distro." @echo @echo -e "\tWith ${BOLD}${RESET}:" + @echo -e "\t\t${BOLD}almalinux${RESET} (latest)" @echo -e "\t\t${BOLD}alpine${RESET} (edge)" @echo -e "\t\t${BOLD}archlinux${RESET} (latest)" - @echo -e "\t\t${BOLD}centos${RESET} (latest)" @echo -e "\t\t${BOLD}debian${RESET} (latest)" @echo -e "\t\t${BOLD}fedora${RESET} (latest)" @echo -e "\t\t${BOLD}opensuse${RESET} (tumbleweed)" + @echo -e "\t\t${BOLD}rockylinux${RESET} (9)" @echo -e "\t\t${BOLD}ubuntu${RESET} (rolling)" @echo -e "\t\t${BOLD}system_deps${RESET} (archlinux with all deps from pacman)" @echo -e "\t\t${BOLD}all${RESET}: ALL DISTROS" @@ -187,7 +188,7 @@ endif DOCKER_RUN_CMD := docker run --rm --init --net=host # Currently supported distro -DISTROS := alpine archlinux centos debian fedora opensuse ubuntu system_deps +DISTROS := almalinux alpine archlinux debian fedora opensuse rockylinux ubuntu system_deps # $* stem # $< first prerequist diff --git a/cmake/docker/centos/Dockerfile b/cmake/docker/almalinux/Dockerfile similarity index 50% rename from cmake/docker/centos/Dockerfile rename to cmake/docker/almalinux/Dockerfile index b426c687c5..54b4a3ce83 100644 --- a/cmake/docker/centos/Dockerfile +++ b/cmake/docker/almalinux/Dockerfile @@ -1,29 +1,13 @@ # Create a virtual environment with all tools installed -# ref: https://quay.io/repository/centos/centos -FROM quay.io/centos/centos:stream AS base +# ref: https://hub.docker.com/_/almalinux +FROM almalinux:latest AS base # Install system build dependencies ENV PATH=/usr/local/bin:$PATH RUN dnf -y update \ -&& dnf -y install git wget openssl-devel \ +&& dnf -y install git wget openssl-devel cmake \ && dnf -y groupinstall "Development Tools" \ && dnf clean all \ && rm -rf /var/cache/dnf - -# Install system build dependencies -ENV PATH=/usr/local/bin:$PATH -RUN dnf -y update \ -&& dnf -y install gcc-toolset-11 \ -&& dnf clean all \ -&& rm -rf /var/cache/dnf - -RUN echo "source /opt/rh/gcc-toolset-11/enable" >> /etc/bashrc -SHELL ["/bin/bash", "--login", "-c"] - -# Install CMake 3.28.3 -RUN wget -q "https://cmake.org/files/v3.28/cmake-3.28.3-linux-x86_64.sh" \ -&& chmod a+x cmake-3.28.3-linux-x86_64.sh \ -&& ./cmake-3.28.3-linux-x86_64.sh --prefix=/usr/local/ --skip-license \ -&& rm cmake-3.28.3-linux-x86_64.sh CMD [ "/usr/bin/bash" ] # Install SWIG 4.2.0 diff --git a/cmake/docker/centos/cpp.Dockerfile b/cmake/docker/almalinux/cpp.Dockerfile similarity index 94% rename from cmake/docker/centos/cpp.Dockerfile rename to cmake/docker/almalinux/cpp.Dockerfile index 36a302dea3..d98d1b4220 100644 --- a/cmake/docker/centos/cpp.Dockerfile +++ b/cmake/docker/almalinux/cpp.Dockerfile @@ -1,4 +1,4 @@ -FROM ortools/cmake:centos_base AS env +FROM ortools/cmake:almalinux_base AS env RUN cmake -version FROM env AS devel diff --git a/cmake/docker/centos/dotnet.Dockerfile b/cmake/docker/almalinux/dotnet.Dockerfile similarity index 95% rename from cmake/docker/centos/dotnet.Dockerfile rename to cmake/docker/almalinux/dotnet.Dockerfile index 0764f086ab..81263cc77f 100644 --- a/cmake/docker/centos/dotnet.Dockerfile +++ b/cmake/docker/almalinux/dotnet.Dockerfile @@ -1,4 +1,4 @@ -FROM ortools/cmake:centos_swig AS env +FROM ortools/cmake:almalinux_swig AS env # see: https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-centos8 RUN dnf -y update \ && dnf -y install dotnet-sdk-6.0 \ diff --git a/cmake/docker/centos/java.Dockerfile b/cmake/docker/almalinux/java.Dockerfile similarity index 94% rename from cmake/docker/centos/java.Dockerfile rename to cmake/docker/almalinux/java.Dockerfile index c480333b01..41d38ec708 100644 --- a/cmake/docker/centos/java.Dockerfile +++ b/cmake/docker/almalinux/java.Dockerfile @@ -1,4 +1,4 @@ -FROM ortools/cmake:centos_swig AS env +FROM ortools/cmake:almalinux_swig AS env RUN dnf -y update \ && dnf -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel maven \ && dnf clean all \ diff --git a/cmake/docker/centos/python.Dockerfile b/cmake/docker/almalinux/python.Dockerfile similarity index 81% rename from cmake/docker/centos/python.Dockerfile rename to cmake/docker/almalinux/python.Dockerfile index 32ad5979a5..5105f27c7b 100644 --- a/cmake/docker/centos/python.Dockerfile +++ b/cmake/docker/almalinux/python.Dockerfile @@ -1,10 +1,11 @@ -FROM ortools/cmake:centos_swig AS env +FROM ortools/cmake:almalinux_swig AS env ENV PATH=/root/.local/bin:$PATH RUN dnf -y update \ -&& dnf -y install python3.11-devel python3.11-numpy python3.11-pip \ +&& dnf -y install python3-devel python3-pip python3-numpy \ && dnf clean all \ && rm -rf /var/cache/dnf -RUN python3.11 -m pip install absl-py mypy mypy-protobuf pandas +RUN python3 -m pip install \ + absl-py mypy mypy-protobuf pandas FROM env AS devel WORKDIR /home/project diff --git a/cmake/docker/rockylinux/Dockerfile b/cmake/docker/rockylinux/Dockerfile new file mode 100644 index 0000000000..ceb9608d63 --- /dev/null +++ b/cmake/docker/rockylinux/Dockerfile @@ -0,0 +1,27 @@ +# Create a virtual environment with all tools installed +# ref: https://hub.docker.com/_/rockylinux +FROM rockylinux:9 AS base +# Install system build dependencies +ENV PATH=/usr/local/bin:$PATH +RUN dnf -y update \ +&& dnf -y install git wget openssl-devel cmake \ +&& dnf -y groupinstall "Development Tools" \ +&& dnf clean all \ +&& rm -rf /var/cache/dnf +CMD [ "/usr/bin/bash" ] + +# Install SWIG 4.2.0 +FROM base AS swig +RUN dnf -y update \ +&& dnf -y install pcre2-devel \ +&& dnf clean all \ +&& rm -rf /var/cache/dnf \ +&& wget -q "https://downloads.sourceforge.net/project/swig/swig/swig-4.2.0/swig-4.2.0.tar.gz" \ +&& tar xvf swig-4.2.0.tar.gz \ +&& rm swig-4.2.0.tar.gz \ +&& cd swig-4.2.0 \ +&& ./configure --prefix=/usr \ +&& make -j 4 \ +&& make install \ +&& cd .. \ +&& rm -rf swig-4.2.0 diff --git a/cmake/docker/rockylinux/cpp.Dockerfile b/cmake/docker/rockylinux/cpp.Dockerfile new file mode 100644 index 0000000000..b17e3c0da4 --- /dev/null +++ b/cmake/docker/rockylinux/cpp.Dockerfile @@ -0,0 +1,29 @@ +FROM ortools/cmake:rockylinux_base AS env +RUN cmake -version + +FROM env AS devel +WORKDIR /home/project +COPY . . + +FROM devel AS build +RUN cmake -S. -Bbuild -DBUILD_DEPS=ON +RUN cmake --build build --target all -v +RUN cmake --build build --target install + +FROM build AS test +RUN CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test + +FROM env AS install_env +COPY --from=build /usr/local /usr/local/ + +FROM install_env AS install_devel +WORKDIR /home/sample +COPY cmake/samples/cpp . + +FROM install_devel AS install_build +RUN cmake -S. -Bbuild +RUN cmake --build build --target all -v +RUN cmake --build build --target install + +FROM install_build AS install_test +RUN cmake --build build --target test diff --git a/cmake/docker/rockylinux/dotnet.Dockerfile b/cmake/docker/rockylinux/dotnet.Dockerfile new file mode 100644 index 0000000000..eae5b9bcdc --- /dev/null +++ b/cmake/docker/rockylinux/dotnet.Dockerfile @@ -0,0 +1,35 @@ +FROM ortools/cmake:rockylinux_swig AS env +# see: https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-centos8 +RUN dnf -y update \ +&& dnf -y install dotnet-sdk-6.0 \ +&& dnf clean all \ +&& rm -rf /var/cache/dnf +# Trigger first run experience by running arbitrary cmd +RUN dotnet --info + +# Add the library src to our build env +FROM env AS devel +WORKDIR /home/project +COPY . . + +FROM devel AS build +RUN cmake -version +RUN cmake -S. -Bbuild -DBUILD_DOTNET=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF +RUN cmake --build build --target all -v +RUN cmake --build build --target install -v + +FROM build AS test +RUN CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test -v + +FROM env AS install_env +WORKDIR /home/sample +COPY --from=build /home/project/build/dotnet/packages/*.nupkg ./ + +FROM install_env AS install_devel +COPY cmake/samples/dotnet . + +FROM install_devel AS install_build +RUN dotnet build + +FROM install_build AS install_test +RUN dotnet test diff --git a/cmake/docker/rockylinux/java.Dockerfile b/cmake/docker/rockylinux/java.Dockerfile new file mode 100644 index 0000000000..602bf2c42e --- /dev/null +++ b/cmake/docker/rockylinux/java.Dockerfile @@ -0,0 +1,31 @@ +FROM ortools/cmake:rockylinux_swig AS env +RUN dnf -y update \ +&& dnf -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel maven \ +&& dnf clean all \ +&& rm -rf /var/cache/dnf + +FROM env AS devel +WORKDIR /home/project +COPY . . + +FROM devel AS build +RUN cmake -S. -Bbuild -DBUILD_JAVA=ON -DSKIP_GPG=ON \ + -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF +RUN cmake --build build --target all -v +RUN cmake --build build --target install + +FROM build AS test +RUN CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test + +FROM env AS install_env +COPY --from=build /usr/local /usr/local/ + +FROM install_env AS install_devel +WORKDIR /home/sample +COPY cmake/samples/java . + +FROM install_devel AS install_build +RUN mvn compile + +FROM install_build AS install_test +RUN mvn test diff --git a/cmake/docker/rockylinux/python.Dockerfile b/cmake/docker/rockylinux/python.Dockerfile new file mode 100644 index 0000000000..269b43e664 --- /dev/null +++ b/cmake/docker/rockylinux/python.Dockerfile @@ -0,0 +1,34 @@ +FROM ortools/cmake:rockylinux_swig AS env +ENV PATH=/root/.local/bin:$PATH +RUN dnf -y update \ +&& dnf -y install python3-devel python3-pip python3-numpy \ +&& dnf clean all \ +&& rm -rf /var/cache/dnf +RUN python3 -m pip install \ + absl-py mypy mypy-protobuf pandas + +FROM env AS devel +WORKDIR /home/project +COPY . . + +FROM devel AS build +RUN cmake -S. -Bbuild -DBUILD_PYTHON=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF +RUN cmake --build build --target all -v +RUN cmake --build build --target install + +FROM build AS test +RUN CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test + +FROM env AS install_env +WORKDIR /home/sample +COPY --from=build /home/project/build/python/dist/*.whl . +RUN python3 -m pip install *.whl + +FROM install_env AS install_devel +COPY cmake/samples/python . + +FROM install_devel AS install_build +RUN python3 -m compileall . + +FROM install_build AS install_test +RUN python3 sample.py