FROM debian:buster

ARG BUILD_SERIES=dev
ARG BUILD_ID=0

ENV DEBIAN_FRONTEND noninteractive

# This Dockerfile attempts to strike a balance between image size and time it
# takes to do an incremental build on changes.
# Improvements welcome.

RUN set -eu; \
    apt-get update ; \
    apt-get install -y --no-install-recommends \
        python3 python3-pip python3-setuptools python3-wheel \
        libpython3-dev \
        make build-essential \
        ; \
    apt-get clean ; rm -rf /var/lib/apt/lists

COPY requirements.txt /opt/snikket-web-portal/requirements.txt
COPY build-requirements.txt /opt/snikket-web-portal/build-requirements.txt

WORKDIR /opt/snikket-web-portal

RUN set -eu; \
    pip3 install -r requirements.txt; \
    pip3 install -r build-requirements.txt; \
    rm -rf /root/.cache;

COPY Makefile /opt/snikket-web-portal/Makefile
COPY snikket_web/ /opt/snikket-web-portal/snikket_web
COPY babel.cfg /opt/snikket-web-portal/babel.cfg

# NOTE: abusing true(1) as a terrible way to disable a specific command. If
# one merged all the RUN commands into one, one would want to run the
# uninstall/remove commands there, but with the split up RUN commands it is
# rather pointless.
RUN set -eu; \
    make; \
    true pip3 uninstall -yr build-requirements.txt; \
    true apt-get remove -y build-essential make libpython3-dev; \
    true apt-get autoremove -y; \
    pip3 install hypercorn; \
    rm -rf /root/.cache; \
    apt-get clean ; rm -rf /var/lib/apt/lists

COPY docker/env.py /etc/snikket-web-portal/env.py
ENV SNIKKET_WEB_PYENV=/etc/snikket-web-portal/env.py

ADD docker/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
