#------------------------------------------------------------------------------
# ==  == ====== ====   ====    |
#                   \\     ||  | Multiphase Code Repository by HZDR
# ======   //   ||  || ===//   | Website: https://doi.org/10.14278/rodare.767
# ||  ||  //    ||  // || \\   | License: GPL-3.0-or-later
# ==  == ====== ====   ==  ==  |
#------------------------------------------------------------------------------

# hadolint global ignore=DL3003, DL3006, DL3008

#------------------------------------------------------------------------------
# Build stage for ubuntu operating system
#------------------------------------------------------------------------------

# Define global ARGs
ARG USERNAME="docker"
ARG GROUPNAME="docker"
ARG USERID="1042"
ARG GROUPID="1042"
ARG FROMIMAGE="ubuntu:24.04"

#------------------------------------------------------------------------------
# Build stage for operating system and dependencies
#------------------------------------------------------------------------------
FROM $FROMIMAGE AS ubuntu

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ENV DEBIAN_FRONTEND=noninteractive

# Docker image meta data
LABEL maintainer="Helmholtz-Zentrum Dresden-Rossendorf e.V. (HZDR)" \
      description="Multiphase Code Repository by HZDR."

# Install system packages
# Install NVIDIA runtime packages: https://gitlab.com/nvidia/container-images/opengl
WORKDIR /
COPY ./etc/docker/requirements.system ./etc/docker/requirements.nvidia ./
RUN --mount=type=cache,target=/var/cache/apt \
    apt-get update \
    && xargs apt-get install -qy --fix-missing --no-install-recommends < "requirements.system" \
    # Required to run Gnuplot on Hemera cluster due to old Linux kernel version
    # See https://github.com/dnschneid/crouton/wiki/Fix-error-while-loading-shared-libraries:-libQt5Core.so.5
    # Requires adding binutils package to system requirements
    && strip --remove-section=.note.ABI-tag /usr/lib/"$(uname -m)"-linux-gnu/libQt5Core.so.5 \
    && xargs apt-get install -qy --fix-missing --no-install-recommends < "requirements.nvidia" \
    && ln -s /usr/bin/ccache /usr/local/bin/gcc \
    && ln -s /usr/bin/ccache /usr/local/bin/g++ \
    && ln -s /usr/bin/ccache /usr/local/bin/cc \
    && ln -s /usr/bin/ccache /usr/local/bin/c++ \
    && ln -s /usr/bin/ccache /usr/local/bin/aarch64-linux-gnu-g++ \
    && ln -s /usr/bin/ccache /usr/local/bin/aarch64-linux-gnu-gcc \
    && /bin/echo -e "disable = false\ncache_dir = /root/.cache/ccache" > "/etc/ccache.conf" \
    && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && locale-gen \
    && rm -rf requirements.system requirements.nvidia /var/lib/apt/lists/*

# Bugfix: Upgrade for Mesa driver in Ubuntu 24.04
RUN add-apt-repository -y ppa:kisak/kisak-mesa \
    && apt-get update \
    && apt-get install -qy --fix-missing --no-install-recommends --only-upgrade \
       libegl-mesa0 libgbm1 libgl1-mesa-dev libgl1-mesa-dri libglapi-mesa \
       libglx-mesa0 mesa-common-dev \
    && rm -rf /var/lib/apt/lists/*

# System settings
RUN sed -i -e "s/\\(^USERGROUPS_ENAB \\).*$/\\1no/"  /etc/login.defs \
    && mkdir -p /run/user/0 && chmod 0700 /run/user/0 && dbus-uuidgen > /etc/machine-id
ENV XDG_RUNTIME_DIR="/run/user/0"
ENV NO_AT_BRIDGE="1"
ENV QT_X11_NO_MITSHM="1"
ENV LC_ALL="en_US.UTF-8"
ENV LANG="en_US.UTF-8"
ENV LANGUAGE="en_US:en"

# nvidia-container-runtime
COPY ./etc/docker/10_nvidia.json /usr/share/glvnd/egl_vendor.d/10_nvidia.json
ENV NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES=${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics,compat32,utility

#------------------------------------------------------------------------------
# Build stage for communication library
#------------------------------------------------------------------------------

FROM ubuntu AS openmpi
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ARG UCX_VERSION="1.18.1"
ARG OMPI_VERSION="4.0.4"
ARG TARGETARCH

WORKDIR /build
COPY ./etc/docker/requirements.openmpi-${TARGETARCH} /build
RUN --mount=type=cache,target=/root/.cache/ccache \
    --mount=type=cache,target=/var/cache/apt \
    apt-get update \
    && xargs apt-get install -qy --fix-missing --no-install-recommends < "requirements.openmpi-${TARGETARCH}" \
    && UCX_URL="https://github.com/openucx/ucx/releases/download/v${UCX_VERSION}/ucx-${UCX_VERSION}.tar.gz" \
    && OMPI_MAJOR_VERSION=$(echo ${OMPI_VERSION} | cut -d. -f1,2) \
    && OMPI_URL="https://download.open-mpi.org/release/open-mpi/v${OMPI_MAJOR_VERSION}/openmpi-${OMPI_VERSION}.tar.bz2" \
    && curl -s -OL "${UCX_URL}" \
    && curl -s -OL "${OMPI_URL}" \
    && tar -xzf "ucx-${UCX_VERSION}.tar.gz" \
    && tar -xjf "openmpi-${OMPI_VERSION}.tar.bz2" \
    && cd "ucx-${UCX_VERSION}" \
    && mkdir build \
    && cd build \
    && ../contrib/configure-release \
        --prefix=/opt/ucx \
        --with-verbs \
    && make -j \
    && make install \
    && cd "../../openmpi-${OMPI_VERSION}" \
    && ./configure \
        --prefix=/opt/ompi \
        --with-ucx=/opt/ucx \
        --enable-mpirun-prefix-by-default \
        --with-pmi \
    && make -j install \
    && ln -s /opt/ompi/lib /opt/ompi/lib64 \
    && rm -rf /build /var/lib/apt/lists/*

# MPI Variables
ENV PATH="/opt/ompi/bin:${PATH}"
ENV LD_LIBRARY_PATH="/opt/ompi/lib:${LD_LIBRARY_PATH}"
ENV MPI_BUFFER_SIZE="20000000"
ENV MPI_ARCH_PATH="/opt/ompi"
# Set ucx as communication middleware to be used by Open MPI
ENV OMPI_MCA_pml="ucx"
# Disable transports build into Open MPI as suggested by OpenUCX
# installation instructions, see
# https://openucx.readthedocs.io/en/master/running.html#runtime-tunings
ENV OMPI_MCA_btl="^vader,tcp,openib,uct"

# MPI Compile Test
COPY ./testAddon/deployment/apptainer/mpi/mpitest.c /opt/mpitest/
RUN cd /opt/mpitest && mpicc -o mpitest mpitest.c

#------------------------------------------------------------------------------
# Build stage for Paraview
#------------------------------------------------------------------------------

FROM openmpi AS paraview
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ARG PARAVIEW=no
ARG PARAVIEW_ROOT="/opt/paraview"
ARG PARAVIEW_VERSION="6.0.0"
ARG TARGETARCH

ENV PATH="${PARAVIEW_ROOT}/bin:${PATH}"
ENV LD_LIBRARY_PATH="${PARAVIEW_ROOT}/lib:${LD_LIBRARY_PATH}"
# Hack: otherwise OpenFOAM will reset PV_PLUGIN_PATH
ENV PARAVIEW_TYPE="none"
ENV ParaView_TYPE="${PARAVIEW_TYPE}"
ENV ParaView_DIR="${PARAVIEW_ROOT}"
ENV ParaView_VERSION="${PARAVIEW_VERSION}"
ENV ParaView_INCLUDE_DIR="${PARAVIEW_ROOT}/include/paraview"
ENV ParaView_LIB_DIR="${PARAVIEW_ROOT}/lib"
ENV PV_PLUGIN_PATH="${PARAVIEW_ROOT}/plugins"

WORKDIR /build
COPY ./etc/docker/requirements.paraview /build
RUN --mount=type=cache,target=/root/.cache/ccache \
    if [[ "$PARAVIEW" =~ ^(Yes|yes)$ ]] && ! [[ "${TARGETARCH}" == "arm64" ]]; then apt-get update \
    && mkdir -p "${PARAVIEW_ROOT}" \
    && mkdir -p "${PV_PLUGIN_PATH}" \
    && mkdir -p paraviewbuild \
    && PARAVIEW_MAJOR_VERSION=$(echo ${PARAVIEW_VERSION} | cut -d. -f1,2) \
    && xargs apt-get install -qy --fix-missing --no-install-recommends < "requirements.paraview" \
    && git clone https://gitlab.kitware.com/paraview/paraview.git \
    && cd paraview \
    && git checkout "v${PARAVIEW_VERSION}" \
    && git submodule update --init --recursive \
    && cd ../paraviewbuild \
    && cmake -GNinja \
        -DPARAVIEW_USE_PYTHON=ON \
        -DPARAVIEW_USE_MPI=ON \
        -DVTK_USE_MPI=ON \
        -DVTK_SMP_IMPLEMENTATION_TYPE=TBB \
        -DCMAKE_BUILD_TYPE=Release \
        -DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON \
        -DCMAKE_INSTALL_PREFIX=${PARAVIEW_ROOT} \
        -DVTK_LEGACY_SILENT=ON \
        ../paraview \
    && ninja install \
    && ln -s "${PARAVIEW_ROOT}/include/paraview-${PARAVIEW_MAJOR_VERSION}" "${ParaView_INCLUDE_DIR}" \
    && rm -rf /build /var/lib/apt/lists/*; fi

#------------------------------------------------------------------------------
# Build stage for software of OpenFOAM Foundation
#------------------------------------------------------------------------------

FROM paraview AS openfoam
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ARG SCOTCH_VERSION="7.0.4"

# Build arguments for environment (default for x86_64)
# Note: for linuxArm64 remove -m64 option
ARG WM_PROJECT_COMMIT="a0fd65c0051fc11ef041f94e0e5aa41a1de589a6"
ARG OPENFOAM_ROOT="/opt/OpenFOAM"
ARG OFREPOSITORY="https://github.com/OpenFOAM/OpenFOAM-dev.git"
ARG WM_PROJECT="OpenFOAM"
ARG WM_PROJECT_VERSION="13-s.1"
ARG WM_ARCH="linux64"
ARG WM_COMPILER_LIB_ARCH="64"
ARG WM_CC="gcc"
ARG WM_CXX="g++"
ARG WM_CFLAGS="-m64 -fPIC"
ARG WM_CXXFLAGS="-m64 -fPIC -std=c++0x"
ARG WM_LDFLAGS="-m64"
ARG WM_COMPILER="Gcc"
ARG WM_COMPILE_OPTION="Opt"
ARG WM_PRECISION_OPTION="DP"

# Scotch Library, compiled and installed separately, because system package
# libscotch-dev is linked with OpenMPI packages. The installation directory
# has to be /usr to be correctly detected by OpenFOAM via SCOTCH_TYPE=system
RUN --mount=type=cache,target=/root/.cache/ccache \
    git clone https://gitlab.inria.fr/scotch/scotch.git \
    && mkdir -p build \
    && cd scotch \
    && git checkout "v${SCOTCH_VERSION}" \
    && cd ../build \
    && cmake \
        -GNinja \
        -DCMAKE_INSTALL_PREFIX="/usr" \
        -DCMAKE_BUILD_TYPE="Release" \
        -DCMAKE_C_FLAGS="${WM_CFLAGS} -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_DETERMINISTIC" \
        -DCMAKE_CXX_FLAGS="${WM_CXXFLAGS}" \
        -DCMAKE_EXE_LINKER_FLAGS="${WM_LDFLAGS}" \
        ../scotch \
    && ninja install \
    && cd .. \
    && rm -rf build scotch
ENV SCOTCH_VERSION="${SCOTCH_VERSION}"
ENV SCOTCH_TYPE="system"

# Create Workdir
WORKDIR ${OPENFOAM_ROOT}

# Clone sources for OpenFOAM (enable pre-commit hook)
# hadolint ignore=SC2001,SC2154
RUN git init ${WM_PROJECT}-${WM_PROJECT_VERSION} \
    && cd ${WM_PROJECT}-${WM_PROJECT_VERSION} \
    && git remote add origin ${OFREPOSITORY} \
    && git fetch --depth 1 origin ${WM_PROJECT_COMMIT} \
    && git checkout FETCH_HEAD \
    && git tag -f version-${WM_PROJECT_VERSION} ${WM_PROJECT_COMMIT}

# Apply HZDR patches to fix some functionality
COPY patches ./etc/docker/exclude.openfoam ${WM_PROJECT}-${WM_PROJECT_VERSION}/
RUN cd "${WM_PROJECT}-${WM_PROJECT_VERSION}" \
    && mv "exclude.openfoam" ".git/info/exclude" \
    && git config --local user.email "noreply@hzdr.de" \
    && git config --local user.name "root" \
    && for f in ./*.tgz; do if [[ -f $f ]]; then tar xzf "$f"; fi; done \
    && for f in ./*.patch; do if [[ -f $f ]]; then git am "$f"; fi; done \
    && if [[ "${WM_PROJECT_VERSION}" =~ [0-9]+-s.[0-9]+ ]]; then for f in ./*.sprint; do if [[ -f $f ]]; then git am "$f"; fi; done; fi \
    && for f in ./*.tgz; do rm -f "$f"; done \
    && for f in ./*.patch; do rm -f "$f"; done \
    && for f in ./*.sprint; do rm -f "$f"; done \
    && rm -f "/root/.gitconfig"

# Configure OpenFOAM tools with our custom environment
# hadolint ignore=SC2154
RUN cd "${WM_PROJECT}-${WM_PROJECT_VERSION}" \
    && ln -rsf bin/tools/pre-commit-hook .git/hooks/pre-commit \
    && ./bin/tools/foamConfigurePaths \
        --foamInstall "${OPENFOAM_ROOT}" \
        --projectName "${WM_PROJECT}-${WM_PROJECT_VERSION}" \
        --projectVersion "${WM_PROJECT_VERSION}" \
        --dependency "SCOTCH:${SCOTCH_TYPE}:${SCOTCH_VERSION}}" \
        --dependency "ParaView:${PARAVIEW_TYPE}:${PARAVIEW_VERSION}" \
    && git update-index --assume-unchanged etc/bashrc etc/config.sh/paraview etc/config.sh/scotch

## Hard coded variables
ENV WM_ARCH_OPTION="64"
ENV WM_COMPILER_TYPE="system"
ENV WM_LABEL_OPTION="Int32"
ENV WM_LABEL_SIZE="32"
ENV WM_LINK_LANGUAGE="c++"
ENV WM_MPLIB="SYSTEMOPENMPI"
ENV WM_OSTYPE="POSIX"
ENV WM_PRECISION_OPTION="DP"
ENV FOAM_SETNAN=""
ENV METIS_TYPE="none"
ENV PARMETIS_TYPE="none"
ENV ZOLTAN_TYPE="none"

## Variables set by build args
ENV WM_ARCH="${WM_ARCH}"
ENV WM_CC="${WM_CC}"
ENV WM_CFLAGS="${WM_CFLAGS}"
ENV WM_COMPILER_LIB_ARCH="${WM_COMPILER_LIB_ARCH}"
ENV WM_CXX="${WM_CXX}"
ENV WM_CXXFLAGS="${WM_CXXFLAGS}"
ENV WM_LDFLAGS="${WM_LDFLAGS}"
ENV WM_PROJECT="${WM_PROJECT}"
ENV WM_COMPILER="${WM_COMPILER}"
ENV WM_COMPILE_OPTION="${WM_COMPILE_OPTION}"
ENV WM_PRECISION_OPTION="${WM_PRECISION_OPTION}"
ENV WM_PROJECT_VERSION="${WM_PROJECT_VERSION}"
ENV FOAM_INST_DIR="${OPENFOAM_ROOT}"

## Variables set by OpenFOAM and docker variables
ENV WM_PROJECT_DIR="${FOAM_INST_DIR}/${WM_PROJECT}-${WM_PROJECT_VERSION}"
ENV WM_PROJECT_INST_DIR="${FOAM_INST_DIR}"
ENV WM_DIR="${WM_PROJECT_DIR}/wmake"
ENV WM_OPTIONS="${WM_ARCH}${WM_COMPILER}${WM_PRECISION_OPTION}${WM_LABEL_OPTION}${WM_COMPILE_OPTION}"
ENV WM_PROJECT_SITE="${FOAM_INST_DIR}/site"
ENV WM_THIRD_PARTY_DIR="${FOAM_INST_DIR}/ThirdParty-${WM_PROJECT_VERSION}"

ENV FOAM_APP="${WM_PROJECT_DIR}/applications"
ENV FOAM_APPBIN="${WM_PROJECT_DIR}/platforms/${WM_OPTIONS}/bin"
ENV FOAM_ETC="${WM_PROJECT_DIR}/etc"
ENV FOAM_EXT_LIBBIN="${WM_THIRD_PARTY_DIR}/platforms/${WM_ARCH}${WM_COMPILER}${WM_PRECISION_OPTION}${WM_LABEL_OPTION}/lib"
ENV FOAM_JOB_DIR="${FOAM_INST_DIR}/jobControl"
ENV FOAM_LIBBIN="${WM_PROJECT_DIR}/platforms/${WM_OPTIONS}/lib"
ENV FOAM_MPI="openmpi-system"
ENV FOAM_SETTINGS="WM_COMPILER=${WM_COMPILER} WM_MPLIB=${WM_MPLIB} WM_PROJECT_SITE=${WM_PROJECT_SITE}"
ENV FOAM_SIGFPE=""
ENV FOAM_SITE_APPBIN="${WM_PROJECT_SITE}/${WM_PROJECT_VERSION}/platforms/${WM_OPTIONS}/bin"
ENV FOAM_SITE_LIBBIN="${WM_PROJECT_SITE}/${WM_PROJECT_VERSION}/platforms/${WM_OPTIONS}/lib"
ENV FOAM_SOLVERS="${WM_PROJECT_DIR}/applications/solvers"
ENV FOAM_SRC="${WM_PROJECT_DIR}/src"
ENV FOAM_TUTORIALS="${WM_PROJECT_DIR}/tutorials"
ENV FOAM_UTILITIES="${WM_PROJECT_DIR}/applications/utilities"
ENV FOAM_MODULES="${WM_PROJECT_DIR}/applications/modules"

## Modify PATH and LD_LIBRARY_PATH
ENV PATH="${FOAM_SITE_APPBIN}:${FOAM_APPBIN}:${PATH}"
ENV PATH="${WM_PROJECT_DIR}/bin:${WM_PROJECT_SITE}/${WM_PROJECT_VERSION}/bin:${WM_DIR}:${PATH}"
ENV PATH="${WM_THIRD_PARTY_DIR}/platforms/${WM_ARCH}${WM_COMPILER}/gperftools-svn/bin:${PATH}"

ENV LD_LIBRARY_PATH="${FOAM_SITE_LIBBIN}:${FOAM_LIBBIN}:${FOAM_EXT_LIBBIN}:${FOAM_LIBBIN}/dummy:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="${FOAM_LIBBIN}/${FOAM_MPI}:${FOAM_EXT_LIBBIN}/${FOAM_MPI}:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="${WM_THIRD_PARTY_DIR}/platforms/${WM_ARCH}${WM_COMPILER}/gperftools-svn/lib:${LD_LIBRARY_PATH}"

# Build OpenFOAM and Clean up
RUN --mount=type=cache,target=/root/.cache/ccache \
    cd "${WM_PROJECT_DIR}" \
    && ./Allwmake -j \
    && cd "$WM_PROJECT_DIR/platforms" \
    && find . -name applications -type d -exec rm -r {} + \
    && find . -name src -type d -exec rm -r {} + \
    && find . -type d -empty -exec rm -r {} +

# Set-up environment
RUN mkdir -p "${OPENFOAM_ROOT}/site/${WM_PROJECT_VERSION}" \
    && git config --system --add safe.directory ${WM_PROJECT_DIR} \
    && git config --system --add safe.directory ${WM_PROJECT_SITE}/${WM_PROJECT_VERSION} \
    && /bin/echo -e "\n" \
                    "# enable programmable completion features.\n" \
                    "if [ -f /etc/bash_completion ] && ! shopt -oq posix; then\n" \
                    "    . /etc/bash_completion\n" \
                    "fi\n\n" \
                    "# OpenFOAM comfort features\n" \
                    ". ${WM_PROJECT_DIR}/etc/config.sh/aliases\n" \
                    ". ${WM_PROJECT_DIR}/etc/config.sh/bash_completion\n" \
                    >> "/etc/bash.bashrc"

#------------------------------------------------------------------------------
# User environment
#------------------------------------------------------------------------------

# Note: Since Ubuntu 24.04 the official docker image feature a default user
#       named ubuntu with uid 1000. Make use of it to allow OpenFOAM Foundation
#       Software to run dynamic code.
FROM openfoam AS user
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# Set user environment
ENV HOME="/home/ubuntu"
ENV WM_PROJECT_USER_DIR="${HOME}/${WM_PROJECT}/ubuntu-${WM_PROJECT_VERSION}"
ENV FOAM_RUN="${WM_PROJECT_USER_DIR}/run"
ENV FOAM_USER_APPBIN="${WM_PROJECT_USER_DIR}/platforms/${WM_OPTIONS}/bin"
ENV FOAM_USER_LIBBIN="${WM_PROJECT_USER_DIR}/platforms/${WM_OPTIONS}/lib"
ENV PATH="${FOAM_USER_APPBIN}:${PATH}"
ENV LD_LIBRARY_PATH="${FOAM_USER_LIBBIN}:${LD_LIBRARY_PATH}"
ENV XDG_RUNTIME_DIR="/run/user/1000"
RUN <<EOF
echo "ubuntu" ALL=\(root\) NOPASSWD:ALL > "/etc/sudoers.d/ubuntu"
chmod 0440 "/etc/sudoers.d/ubuntu"
touch "${HOME}/.sudo_as_admin_successful"
chown ubuntu:ubuntu "${HOME}/.sudo_as_admin_successful"
mkdir -p "/run/user/1000"
chmod 0700 "/run/user/1000"
chown ubuntu:ubuntu "/run/user/1000"
/bin/echo -e "disable = true\ncache_dir = ${HOME}/.cache/ccache" > "/etc/ccache.conf"
EOF

USER "ubuntu"
WORKDIR "${HOME}"

# Set entrypoint
# Note: Make sure that variables in heredoc are not expanded, by keeping 'EOF'
#       as buildah has a open bug concerning expansion of $@
#       https://github.com/containers/buildah/issues/5422
COPY --chmod=777 <<'EOF' /usr/bin/entry.sh
#!/bin/sh
echo "# Repository: Multiphase Code Repository by HZDR"
echo "# Version   : ${WM_PROJECT}-${WM_PROJECT_VERSION}"
echo "# Compile   : ${WM_COMPILE_OPTION}"
if [ "$#" -eq 0 ]; then
    exec bash -l
else
    exec "$@"
fi
EOF

ENTRYPOINT ["/usr/bin/entry.sh"]
CMD ["/bin/bash", "-l"]

#------------------------------------------------------------------------------
# Build stage for multiphasepy python package
#------------------------------------------------------------------------------

FROM user AS python
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

USER "root"
ARG GITLAB_PYPI_URL="https://codebase.helmholtz.cloud/api/v4/projects/8786/packages/pypi/simple"
ARG PYPI_PACKAGE="multiphasepy"

# hadolint ignore=DL3013
RUN echo -e "[global]\nextra-index-url = ${GITLAB_PYPI_URL}" > "/etc/pip.conf" \
    && pip install --break-system-packages --no-cache-dir ${PYPI_PACKAGE}
USER "ubuntu"

#------------------------------------------------------------------------------
# Build stage for code repository
#------------------------------------------------------------------------------

FROM python AS addon
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

USER "root"
WORKDIR "${WM_PROJECT_SITE}/${WM_PROJECT_VERSION}"
COPY . ${WM_PROJECT_SITE}/${WM_PROJECT_VERSION}
RUN --mount=type=cache,target=/root/.cache/ccache \
    /bin/echo -e "disable = false\ncache_dir = /root/.cache/ccache" > "/etc/ccache.conf" \
    && ./Allwclean \
    && ./Allwmake -j \
    && find . -path "./platforms" -prune -false -o -name "${WM_OPTIONS}" -type d -exec rm -r {} + \
    && find . -type d -empty -exec rm -r {} + \
    && /bin/echo -e "disable = true\ncache_dir = ${HOME}/.cache/ccache" > "/etc/ccache.conf" \
    && ./bin/tools/foamGenerateBashCompletion
USER "ubuntu"
