# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
    # Change BASE_IMAGE to centos when RHEL_VERSION=7
ARG BASE_IMAGE=rockylinux \
    RHEL_VERSION=8
FROM ${BASE_IMAGE}:${RHEL_VERSION} as common-dependencies
ARG RHEL_VERSION=8

MAINTAINER dev@trafficcontrol.apache.org

# top level of trafficcontrol directory must be mounted as a volume:
# docker run --volume /trafficcontrol:$(pwd) ...
VOLUME /trafficcontrol

### Common for all sub-component builds
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-* && \
	rpm --import "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-${RHEL_VERSION%%.*}" && \
	yum -y update ca-certificates && \
	yum -y install \
		git \
		rpm-build \
		rsync \
		epel-release && \
	yum -y clean all

### traffic_router specific requirements
FROM common-dependencies AS traffic-router

RUN	yum -y install \
		which  \
		curl \
		java-11-openjdk \
		java-11-openjdk-devel && \
	yum -y clean all

ENV JAVA_HOME=/usr/lib/jvm/java
WORKDIR /opt
RUN curl -L https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.tar.gz | tar xzf - && \
    alternatives --install /usr/bin/mvn mvn /opt/apache-maven*/bin/mvn 1

###

CMD /trafficcontrol/build/clean_build.sh traffic_router

# vi:syntax=Dockerfile
