## Vue BUILDER

# pull official base image
FROM node:16.14-alpine3.15 as build-vue

RUN mkdir -p /home/app/client

# set work directory
WORKDIR /home/app/client

# copy dependencies - package
COPY ./client/package*.json ./

RUN npm install

COPY ./client .

RUN npm run build


## Adopsiolib-python BUILDER

# pull adopsio image
FROM xhimorin/adopsiolib-python:latest as build-flask

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update && \
    apt-get install -y --no-install-recommends gcc

# lint
RUN pip install --upgrade pip
#RUN pip install flake8==3.8.4
COPY ./server /usr/src/app/
#RUN flake8 --ignore=E501,F401 .

# install python dependencies
COPY ./server/requirements.txt .
RUN pip wheel \
        --no-cache-dir \
        --no-deps \
        --wheel-dir /usr/src/app/wheels -r requirements.txt


## Python light version

# pull official base image
FROM python:3.8-slim-buster

# create directory for the app user
RUN mkdir -p /home/app

# create the app user
RUN addgroup --system app && adduser --system --group app

# create the appropriate directories
ENV HOME=/home/app
ENV BACKEND_HOME=/home/app/backend
ENV CLIENT_HOME=/home/app/client

RUN mkdir $BACKEND_HOME
RUN mkdir $CLIENT_HOME

WORKDIR $BACKEND_HOME

# install dependencies
RUN apt-get update && apt-get install -y --no-install-recommends netcat
COPY --from=build-flask /usr/src/app/wheels /wheels
COPY --from=build-flask /usr/src/app/requirements.txt .
COPY --from=build-flask /usr/local/adopsio-0.1.0 /usr/local/adopsio-0.1.0
COPY --from=build-flask /usr/local/cmake-3.21.1 /usr/local/cmake-3.21.1
COPY --from=build-flask /usr/local/gmp-6.2.1 /usr/local/gmp-6.2.1
COPY --from=build-flask /usr/local/mcl-1.51 /usr/local/mcl-1.51
COPY --from=build-flask /usr/local/openssl-1.1.1k /usr/local/openssl-1.1.1k
COPY --from=build-flask /usr/local/zlib-1.2.12 /usr/local/zlib-1.2.12

COPY --from=build-vue  /home/app/client $CLIENT_HOME

COPY --from=build-flask /etc/ld.so.conf.d/10-custom-libraries.conf /etc/ld.so.conf.d/10-custom-libraries.conf
RUN pip install --upgrade pip && \
    pip install --no-cache /wheels/*
RUN ldconfig -v

# copy entrypoint.sh
COPY ./entrypoint.sh $BACKEND_HOME

# copy project
COPY ./server $BACKEND_HOME
COPY ./client $CLIENT_HOME

# chown all the files to the app user
RUN chown -R app:app $HOME

# change to the app user
USER app

# run entrypoint.sh
ENTRYPOINT ["/home/app/backend/entrypoint.sh"]
