ARG OS_IMAGE_NAME
ARG OS_IMAGE_TAG

FROM $OS_IMAGE_NAME:$OS_IMAGE_TAG AS gluten-buildenv

MAINTAINER Hongze Zhang<hongze.zhang@intel.com>

SHELL ["/bin/bash", "-c"]

# REQUIRED PROXYS: WGET, GIT, MAVEN (also Maven mirror)
ARG HTTP_PROXY_HOST
ARG HTTP_PROXY_PORT

ENV http_proxy=${HTTP_PROXY_HOST:+"http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT"}
ENV https_proxy=${HTTP_PROXY_HOST:+"http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT"}

ARG MAVEN_MIRROR_URL

RUN if [ -n "$MAVEN_MIRROR_URL" ]; \
    then \
      MAVEN_SETTINGS_TEMPLATE="<settings><mirrors><mirror><id>mavenmirror</id><mirrorOf>central</mirrorOf><name>MavenMirror</name><url>{{MAVEN_MIRROR_URL}}</url></mirror></mirrors><proxies><proxy><id>httpproxy</id><active>{{MAVEN_PROXY_ENABLE}}</active><protocol>http</protocol><host>{{MAVEN_PROXY_HOST}}</host><port>{{MAVEN_PROXY_PORT}}</port></proxy><proxy><id>httpsproxy</id><active>{{MAVEN_PROXY_ENABLE}}</active><protocol>https</protocol><host>{{MAVEN_PROXY_HOST}}</host><port>{{MAVEN_PROXY_PORT}}</port></proxy></proxies></settings>"; \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s@{{MAVEN_MIRROR_URL}}@$MAVEN_MIRROR_URL@g"); \
    else \
      MAVEN_SETTINGS_TEMPLATE="<settings><proxies><proxy><id>httpproxy</id><active>{{MAVEN_PROXY_ENABLE}}</active><protocol>http</protocol><host>{{MAVEN_PROXY_HOST}}</host><port>{{MAVEN_PROXY_PORT}}</port></proxy><proxy><id>httpsproxy</id><active>{{MAVEN_PROXY_ENABLE}}</active><protocol>https</protocol><host>{{MAVEN_PROXY_HOST}}</host><port>{{MAVEN_PROXY_PORT}}</port></proxy></proxies></settings>"; \
    fi \
    && if [ -n "$HTTP_PROXY_HOST" ]; \
    then \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s/{{MAVEN_PROXY_ENABLE}}/true/g"); \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s/{{MAVEN_PROXY_HOST}}/$HTTP_PROXY_HOST/g"); \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s/{{MAVEN_PROXY_PORT}}/$HTTP_PROXY_PORT/g"); \
    else \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s/{{MAVEN_PROXY_ENABLE}}/false/g"); \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s/{{MAVEN_PROXY_HOST}}/localhost/g"); \
      MAVEN_SETTINGS_TEMPLATE=$(echo $MAVEN_SETTINGS_TEMPLATE | sed "s/{{MAVEN_PROXY_PORT}}/8888/g"); \
    fi \
    && MAVEN_SETTINGS=$MAVEN_SETTINGS_TEMPLATE \
    && mkdir -p /root/.m2/ \
    && echo $MAVEN_SETTINGS > /root/.m2/settings.xml

# Display environment information
RUN ulimit -a
RUN env
RUN cat /root/.m2/settings.xml

# Install deps from repo
ARG OS_IMAGE_TAG
COPY centos-$OS_IMAGE_TAG-deps.sh /tmp/deps.sh
RUN /tmp/deps.sh \
  && rm /tmp/deps.sh \
  && yum clean all \
  && dnf clean all \
  && rm -rf /var/cache/yum

# Spark binaries
WORKDIR /opt
ARG BUILD_SPARK_BINARIES

# Build & install Spark 3.2.2
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then wget https://archive.apache.org/dist/spark/spark-3.2.2/spark-3.2.2-bin-hadoop3.2.tgz; fi
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then mkdir spark322 && tar -xvf spark-3.2.2-bin-hadoop3.2.tgz -C spark322 --strip-components=1; fi

# Build & install Spark 3.3.1
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then wget https://archive.apache.org/dist/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz; fi
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then mkdir spark331 && tar -xvf spark-3.3.1-bin-hadoop3.tgz -C spark331 --strip-components=1; fi

# Build & install Spark 3.4.3
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then https://archive.apache.org/dist/spark/spark-3.4.3/spark-3.4.3-bin-hadoop3.tgz; fi
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then mkdir spark343 && tar -xvf spark-3.4.3-bin-hadoop3.tgz -C spark343 --strip-components=1; fi

# Build & install Spark 3.5.1
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then https://archive.apache.org/dist/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz; fi
RUN if [ "$BUILD_SPARK_BINARIES" = "ON" ]; then mkdir spark351 && tar -xvf spark-3.5.1-bin-hadoop3.tgz -C spark351 --strip-components=1; fi
