# Highly-Optimized Docker Image of pyLoad (ubuntu variant)
#      ____________
#   _ /       |    \ ___________ _ _______________ _ ___ _______________
#  /  |    ___/    |   _ __ _  _| |   ___  __ _ __| |   \\    ___  ___ _\
# /   \___/  ______/  | '_ \ || | |__/ _ \/ _` / _` |    \\  / _ \/ _ `/ \
# \       |   o|      | .__/\_, |____\___/\__,_\__,_|    // /_//_/\_, /  /
#  \______\    /______|_|___|__/________________________//______ /___/__/
#          \  /
#           \/

ARG IMAGE_TAG="bionic"
ARG IMAGE_CREATED
ARG IMAGE_AUTHORS="Walter Purcaro <vuolter@gmail.com>"
ARG IMAGE_URL="https://github.com/pyload/pyload"
ARG IMAGE_DOCUMENTATION="https://github.com/pyload/pyload/blob/main/README.md"
ARG IMAGE_SOURCE="https://github.com/pyload/pyload/blob/main/Dockerfile"
ARG IMAGE_VERSION="2.0.0"
ARG IMAGE_REVISION
ARG IMAGE_VENDOR="pyload"
ARG IMAGE_LICENSES="ISC"
ARG IMAGE_TITLE="pyLoad"
ARG IMAGE_DESCRIPTION="The free and open-source Download Manager written in pure Python"


ARG APT_INSTALL_OPTIONS="--no-install-recommends --assume-yes"
ARG PIP_INSTALL_OPTIONS="--disable-pip-version-check --no-cache-dir --no-compile --upgrade"


FROM lsiobase/ubuntu:$IMAGE_TAG AS builder

ARG APT_PACKAGES="python3 python3-distutils python3-pip python3-pycurl openssl sqlite tesseract-ocr unrar"
ARG PIP_PACKAGES="pip setuptools wheel"

RUN echo "**** install binary packages ****" && \
    apt-get update && \
    apt-get install $APT_INSTALL_OPTIONS $APT_PACKAGES && \
    \
    echo "**** install pip package ****" && \
    pip3 install $PIP_INSTALL_OPTIONS $PIP_PACKAGES


FROM builder AS wheels_builder

COPY setup.cfg /source/setup.cfg
WORKDIR /wheels

RUN echo "**** build pyLoad dependencies ****" && \
    python3 -c "import configparser as cp; c = cp.ConfigParser(); c.read('/source/setup.cfg'); print(c['options']['install_requires'] + c['options.extras_require']['extra'])" | \
    xargs pip3 wheel --wheel-dir=.


FROM builder AS source_builder

ARG PIP_PACKAGES="Babel Jinja2"

COPY . /source
WORKDIR /source

RUN echo "**** build pyLoad locales ****" && \
    pip3 install $PIP_INSTALL_OPTIONS $PIP_PACKAGES && \
    python3 setup.py build_locale


FROM builder AS package_builder

COPY --from=wheels_builder /wheels /wheels
COPY --from=source_builder /source /source
WORKDIR /package

RUN echo "**** build pyLoad package ****" && \
    pip3 install $PIP_INSTALL_OPTIONS --find-links=/wheels --no-index --prefix=. /source[extra]


FROM builder

# Set Python to force stdin, stdout and stderr to be totally unbuffered.
ENV PYTHONUNBUFFERED="1"

# Stop if any script (fix-attrs or cont-init) has failed.
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS="2"

ARG TEMPDIR="/root/.cache /tmp/* /var/lib/apt/lists/* /var/tmp/*"

RUN echo "**** create s6 fix-attr script ****" && \
    echo -e "/config true abc 0644 0755\n \
    /downloads false abc 0644 0755" > /etc/fix-attrs.d/10-run && \
    \
    echo "**** create s6 service script ****" && \
    mkdir -p /etc/services.d/pyload && \
    echo -e "#!/usr/bin/with-contenv bash\n\n \
    umask 022\n \
    exec s6-setuidgid abc pyload --userdir /config --storagedir /downloads" > /etc/services.d/pyload/run && \
    \
    echo "**** cleanup ****" && \
    apt-get clean && \
    rm -rf $TEMPDIR && \
    \
    echo "**** finalize ****"

COPY --from=package_builder /package /usr/local

EXPOSE 8000 9666

VOLUME /config /downloads

LABEL org.opencontainers.image.created=$IMAGE_CREATED
LABEL org.opencontainers.image.authors=$IMAGE_AUTHORS
LABEL org.opencontainers.image.url=$IMAGE_URL
LABEL org.opencontainers.image.documentation=$IMAGE_DOCUMENTATION
LABEL org.opencontainers.image.source=$IMAGE_SOURCE
LABEL org.opencontainers.image.version=$IMAGE_VERSION
LABEL org.opencontainers.image.revision=$IMAGE_REVISION
LABEL org.opencontainers.image.vendor=$IMAGE_VENDOR
LABEL org.opencontainers.image.licenses=$IMAGE_LICENSES
LABEL org.opencontainers.image.title=$IMAGE_TITLE
LABEL org.opencontainers.image.description=$IMAGE_DESCRIPTION