FROM registry.access.redhat.com/ubi8/ubi-minimal:latest AS builder
RUN microdnf install autoconf automake make m4 cmake gcc gcc-c++ libtool which 
ADD ./vendor/piumarta-peg /peg
WORKDIR /peg
RUN make install
WORKDIR / 
COPY ./vendor/RedisGraph /RedisGraph
WORKDIR /RedisGraph
RUN make
COPY requirements.txt /tmp/requirements.txt

# NOTE: in docker we are unable to modify the vm.overcommit_memory setting which is set to 0 by default in this image ... currently no way around this
# https://github.com/openfirmware/docker-redis/issues/1

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3

ARG IMAGE_NAME
ARG IMAGE_DISPLAY_NAME
ARG IMAGE_NAME_ARCH
ARG IMAGE_MAINTAINER
ARG IMAGE_VENDOR
ARG IMAGE_VERSION
ARG IMAGE_DESCRIPTION
ARG IMAGE_SUMMARY
ARG IMAGE_OPENSHIFT_TAGS
ARG SELF_METER_IMAGE_TAG
ARG VCS_REF
ARG VCS_URL

LABEL org.label-schema.vendor="Red Hat" \
      org.label-schema.name="$IMAGE_NAME_ARCH" \
      org.label-schema.description="$IMAGE_DESCRIPTION" \
      org.label-schema.vcs-ref=$VCS_REF \
      org.label-schema.vcs-url=$VCS_URL \
      org.label-schema.license="Red Hat Advanced Cluster Management for Kubernetes EULA" \
      org.label-schema.schema-version="1.0" \
      name="$IMAGE_NAME" \
      maintainer="$IMAGE_MAINTAINER" \
      vendor="$IMAGE_VENDOR" \
      version="$IMAGE_VERSION" \
      release="$VCS_REF" \
      description="$IMAGE_DESCRIPTION" \
      summary="$IMAGE_SUMMARY" \
      io.k8s.display-name="$IMAGE_DISPLAY_NAME" \
      io.k8s.description="$IMAGE_DESCRIPTION" \
      io.openshift.tags="$IMAGE_OPENSHIFT_TAGS"

# To update the RedisGraph version follow instructions in README.md
COPY ./vendor/redis.tar.gz /redis.tar.gz
COPY --from=builder /tmp/requirements.txt /tmp/requirements.txt

RUN	set -ex; \
    # install dependencies
    deps="wget make tar gzip gcc diffutils shadow-utils"; \
    microdnf update; \
    microdnf install $deps ca-certificates python2 python2-pip stunnel --nodocs; \
    # python setup tools
    pip2 install -r /tmp/requirements.txt; \
	groupadd -r redis && useradd -r -g redis redis; \
    # for redis-sentinel see: http://redis.io/topics/sentinel
    # install redis
    # because we aren't downloading, we can skip the sha verification
	mkdir -p /usr/src/redis; \
	tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1; \
	rm redis.tar.gz; \
    # disable Redis protected mode [1] as it is unnecessary in context of Docker
    # (ports are not automatically exposed when running inside Docker, but rather explicitly by specifying -p / -P)
    # [1]: https://github.com/antirez/redis/commit/edd4d555df57dc84265fdfb4ef59a4678832f6da
    grep -E '^ *createBoolConfig[(]"protected-mode",.*, *1 *,.*[)],$' /usr/src/redis/src/config.c; \
    sed -ri 's!^( *createBoolConfig[(]"protected-mode",.*, *)1( *,.*[)],)$!\10\2!' /usr/src/redis/src/config.c; \
    grep -E '^ *createBoolConfig[(]"protected-mode",.*, *0 *,.*[)],$' /usr/src/redis/src/config.c; \
    # for future reference, we modify this directly in the source instead of just supplying a default configuration flag because apparently "if you specify any argument to redis-server, [it assumes] you are going to specify everything"
    # see also https://github.com/docker-library/redis/issues/4#issuecomment-50780840
    # (more exactly, this makes sure the default behavior of "save on SIGTERM" stays functional by default)
	make -C /usr/src/redis -j "$(nproc)"; \
	make -C /usr/src/redis install; \
    rm -r /usr/src/redis; \
	# microdnf remove $deps; \
    microdnf clean all


RUN mkdir /data && chown redis:redis /data && mkdir /rg && chown redis:redis /rg
VOLUME /data

# Add RedisGraph
ENV LIBDIR /usr/lib/redis/modules
RUN mkdir -p "$LIBDIR"
COPY --from=builder /RedisGraph/src/redisgraph.so "$LIBDIR"
ADD Procfile /Procfile
ADD redis-server.conf /etc/stunnel/redis-server.conf
COPY redis.conf /usr/local/etc/redis/redis.conf
COPY redisPwd.conf /usr/local/etc/redis/redisPwd.conf
COPY start-redis-process.sh /
COPY docker-entrypoint.sh /

WORKDIR /

ENV USER_UID=10001 \
    USER_NAME=redis

COPY build/bin /usr/local/bin
RUN  /usr/local/bin/user_setup

EXPOSE 6379 6380
ENTRYPOINT ["/usr/local/bin/entrypoint"]

USER ${USER_UID}
