# BUILD_OS is retained for backward compatibility with build-docker.sh and cma.distributed.yml
# which pass --build-arg BUILD_OS=centos. It has no functional effect in this Dockerfile —
# OS selection is controlled exclusively by BUILD_OS_VERSION (8 for UBI8, al2023 for Amazon Linux).
ARG BUILD_OS=centos
ARG BUILD_OS_VERSION=8
ARG PLATFORM=linux/amd64
ARG PYTHON_VERSION=3.11
ARG UV_VERSION=0.9.3
ARG AIRGAPPED=false
ARG THIRD_PARTY_CONTENT_LOCATION="/third-party-content"

FROM --platform=${PLATFORM} amazonlinux:2023.3.20231218.0 AS base-centos-al2023
RUN yum -y install \
    java-21-amazon-corretto \
    tar \
    lsof \
    procps \
    && yum clean all \
    && rm -rf /var/cache/yum \
# newer ansible needs system LANG to be set to be able to work
ENV LANG C.UTF-8
RUN echo 'Installed prerequisites on amazonlinux:2023...'

FROM --platform=${PLATFORM} docker-private.infra.cloudera.com/cloudera_base/ubi8/ubi:8.10-1773904930 AS base-centos-8
RUN rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8 && \
    yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm \
    java-21-openjdk \
    curl \
    lsof \
    procps-ng \
    && yum clean all \
    && rm -rf /var/cache/yum
# newer ansible needs system LANG to be set to be able to work
ENV LANG C.UTF-8
RUN echo 'Installed prerequisites on ubi8...'

FROM base-centos-${BUILD_OS_VERSION} AS cma-base-runtime
ARG CMA_VENV_DIR=/var/lib/cma/venv
ENV CMA_VENV_DIR=${CMA_VENV_DIR}
RUN yum -y install \
    git \
    openssl \
    which \
    wget \
    rsync \
    unzip \
    sshpass \
    hostname \
    zlib \
    bzip2-libs \
    libffi \
    sqlite-libs \
    && yum clean all \
    && rm -rf /var/cache/yum
RUN echo 'Installed runtime prerequisites...'

FROM ghcr.io/astral-sh/uv:${UV_VERSION} AS uv-bin

FROM cma-base-runtime AS cma-python-installation
ARG PYTHON_VERSION
COPY --from=uv-bin /uv /uvx /bin/
# The requirements file is ADDed here because this stage has uv available for installation.
# The cma-ansible directory is only available in later stages, so we bring in just this file.
ARG SRC_CMA_REQUIREMENTS=cma-ansible/cma-setup/requirements.txt
ADD ${SRC_CMA_REQUIREMENTS} /tmp/requirements.txt
RUN uv venv ${CMA_VENV_DIR} --python ${PYTHON_VERSION}
RUN uv pip install --python ${CMA_VENV_DIR}/bin/python -r /tmp/requirements.txt
RUN touch ${CMA_VENV_DIR}/.docker-prebuilt

FROM cma-base-runtime AS cma-init-setup
COPY --from=cma-python-installation /root/.local/share/uv/python/ /root/.local/share/uv/python/
COPY --from=cma-python-installation ${CMA_VENV_DIR}/ ${CMA_VENV_DIR}/
ENV PATH="${CMA_VENV_DIR}/bin:${PATH}"
ARG CMA_ROOT_DIR
ENV CMA_HOME=${CMA_ROOT_DIR}
# for legacy compatibility:
ENV AM2CM_ROOT ${CMA_HOME}
ENV HOME /root
ARG SRC_CMA_ANSIBLE=cma-ansible
ARG SRC_CMA_TOOLS=cma-tools
ARG SRC_CMA_BIN=bin
ARG SRC_CMA_LIB=lib
ARG SRC_VERSION_INFO=version.info
ARG SRC_CMA_JDBC_DRIVERS=jdbc-drivers
WORKDIR ${CMA_HOME}
ADD ${SRC_CMA_ANSIBLE} cma-ansible
ADD ${SRC_CMA_TOOLS} cma-tools
ADD ${SRC_CMA_BIN} bin
ADD ${SRC_CMA_LIB} lib
ADD ${SRC_VERSION_INFO} version.info
ADD ${SRC_CMA_JDBC_DRIVERS} jdbc-drivers

FROM cma-init-setup AS cma-init-setup-airgapped-true
ARG CMA_EXTRAS_GPL_TAR
ARG INNER_PYPY_WEBSERVER_PORT=9003
ENV INNER_PYPY_WEBSERVER_PORT ${INNER_PYPY_WEBSERVER_PORT}
COPY ${CMA_EXTRAS_GPL_TAR} /tmp
ENV CMA_EXTRAS_GPL_TAR_LOCATION /tmp/${CMA_EXTRAS_GPL_TAR}
RUN echo "${CMA_EXTRAS_GPL_TAR} is copied into the /tmp"

FROM cma-init-setup AS cma-init-setup-airgapped-false
RUN echo "Nothing todo"

FROM cma-init-setup-airgapped-${AIRGAPPED} AS cma-setup
ARG CMA_SERVER_EXTRA_PROFILE
ARG CMA_SERVER_SSL=false
ARG CMA_SERVER_LDAP=false
ARG AIRGAPPED=false
# set setup settings
ENV CMA_SERVER_EXTRA_PROFILE ${CMA_SERVER_EXTRA_PROFILE}
ENV CMA_SERVER_SSL ${CMA_SERVER_SSL}
ENV CMA_SERVER_LDAP ${CMA_SERVER_LDAP}
ENV CMA_AIRGAPPED ${AIRGAPPED}
ENV CMA_PYPI_WEBSERVER_PORT ${INNER_PYPY_WEBSERVER_PORT}
ENV CMA_SKIP_JAVA_CHECK=true
ENV CMA_SKIP_PYTHON_CHECK=true
RUN bin/cma rebuild --verbose || { echo "--- setup.log ---"; cat /root/.cma/cma-server/logs/setup.log 2>/dev/null; exit 1; }
ENV CMA_SERVER_SSL ''
RUN echo "Setup completed!"

FROM cma-setup AS cma-final
ARG SRC_CMA_SERVER=cma-server
ARG SRC_STARTUP_SCRIPT=startup.sh
WORKDIR ${CMA_HOME}
ADD ${SRC_CMA_SERVER} cma-server
ADD ${SRC_STARTUP_SCRIPT} /usr/local/bin/startup.sh
ENV CMA_BIN_DIR=${CMA_HOME}/bin
ENV CMA_DIST_TYPE=standalone
RUN ln -s ${CMA_HOME}/bin/cma /usr/local/bin/cma
RUN ln -s ${CMA_HOME}/bin/setup-ssl.sh /usr/local/bin/setup-ssl.sh
RUN ln -s ${CMA_HOME}/bin/pypi-server.sh /usr/local/bin/pypi-server.sh

RUN ln -s ${CMA_HOME}/cma-server/cma-server.sh /usr/local/bin/cma-server.sh
ENV DOCKER_MODE=true
RUN echo "CMA image completed!"
ENTRYPOINT ["bash", "-c", "startup.sh"]
HEALTHCHECK --interval=30s --timeout=10s --retries=10 --start-period=30s CMD ["java", "-Xms16m", "-Xmx32m", "-cp", "cma-server/cma-server-4.1.0-b5.jar", "com.cloudera.migration.cma.master.server.health.HealthChecker" ]