# 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_monitor specific requirements
FROM common-dependencies AS traffic-monitor

RUN	yum -y install \
		# gcc is necessary in case -gcflags 'all=-N -l' is passed to go build
		gcc && \
	yum -y clean all

COPY GO_VERSION /
RUN go_version=$(cat /GO_VERSION) && \
	curl -Lo go.tar.gz https://dl.google.com/go/go${go_version}.linux-amd64.tar.gz && \
	tar -C /usr/local -xvzf go.tar.gz && \
	ln -s /usr/local/go/bin/go /usr/bin/go && \
	rm go.tar.gz

###

CMD /trafficcontrol/build/clean_build.sh traffic_monitor

# vi:syntax=Dockerfile
