FROM alpine AS templates

WORKDIR /usr/src/app/

COPY backend backend

RUN find backend \! -name "*.html" -type f -print | tr "\n" "\0" | xargs -0 rm

FROM node:16-alpine AS assets

WORKDIR /usr/src/app

COPY lerna.json package.json package-lock.json ./

RUN npm install

COPY frontend/package.json frontend/package-lock.json frontend/

RUN npm run bootstrap

COPY --from=templates /usr/src/app/backend backend

COPY frontend frontend

RUN npm run build

FROM python:3.8-alpine

ENV PYTHONUNBUFFERED 1

ARG INCLUDE_DEV_DEPENDENCIES

WORKDIR /usr/src/app

RUN apk add --no-cache --virtual .build-deps \
      libressl-dev build-base python3-dev cargo libffi-dev \
      && pip install pdm \
      && apk del .build-deps

COPY pyproject.toml pdm.lock ./

RUN apk add --no-cache --virtual .build-deps \
      libressl-dev \
      build-base cargo libffi-dev \
      jpeg-dev zlib-dev 
RUN apk add --no-cache --virtual postgresql-dev
RUN pdm sync --prod 
RUN if [ ! -z "$INCLUDE_DEV_DEPENDENCIES" ]; then \
      echo "hello -----" \
      pdm sync && \
      apk add gettext; \
      fi \
      && runDeps="$(scanelf --needed --nobanner --recursive __pypackages__ \
      | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
      | sort -u \
      | xargs -r apk info --installed \
      | sort -u)" \
      && echo "Libraries dependencies: $runDeps" \
      && apk add --virtual rundeps $runDeps \
      && apk del .build-deps

COPY backend backend

COPY --from=assets /usr/src/app/backend/assets backend/assets

WORKDIR /usr/src/app/backend

ENTRYPOINT ["./entrypoint.sh"]

EXPOSE 8000

CMD ["daphne", "-b", "0.0.0.0", "core.asgi:application"]
