# registry.yandex.net/toolbox/nodejs:17.3.1-xenial-minimal - минимальный образ с чем-то яндексовым
# registry.yandex.net/toolbox/nodejs:17.3.1-bionic registry.yandex.net/toolbox/nodejs:17.3.1-xenial - жирный образ
# node:alpine - надо пытаться
ARG NODEJS_IMAGE=node:alpine

# === Workspace ===

FROM ${NODEJS_IMAGE} as workspace

WORKDIR /workspace

# Устанавливаем зависимости

COPY .yarn/ .yarn/
COPY .yarnrc.yml yarn.lock package.json ./

COPY apps/bizdev-admin/package.json apps/travel-admin-web/package.json

COPY libs/yandex-net/package.json libs/yandex-net/package.json
COPY libs/codegen/package.json libs/codegen/package.json
COPY libs/logger/package.json libs/logger/package.json
COPY libs/config/package.json libs/config/package.json
COPY libs/ui/package.json libs/ui/package.json

COPY tools/ci/package.json tools/ci/package.json

# TODO Разобраться с @next/swc-XXX и добавить --immutable-cache (нужно ли?)
RUN yarn --immutable

# Копируем общие ресурсы

COPY libs/config libs/config
COPY libs/ui libs/ui

# === Builder ===

FROM workspace as travel-admin-web--builder

ENV CI true
ENV NEXT_TELEMETRY_DISABLED 1

COPY libs/logger libs/logger
COPY libs/yandex-net libs/yandex-net
COPY apps/bizdev-admin apps/travel-admin-web

RUN yarn workspace @apps/travel-admin-web build

# === Application ===

FROM ${NODEJS_IMAGE} as travel-admin-web

USER root
WORKDIR /app

COPY --from=travel-admin-web--builder /workspace/apps/travel-admin-web/next.config.js \
                                      /workspace/apps/travel-admin-web/package.json ./
COPY --from=travel-admin-web--builder /workspace/apps/travel-admin-web/public ./public

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing

COPY --from=travel-admin-web--builder /workspace/apps/travel-admin-web/.next/standalone ./
COPY --from=travel-admin-web--builder /workspace/apps/travel-admin-web/.next/standalone/apps/travel-admin-web ./
COPY --from=travel-admin-web--builder /workspace/apps/travel-admin-web/.next/static ./.next/static

ENV PORT 80
ENV NODE_ENV production
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
ENV NEXT_TELEMETRY_DISABLED 1

EXPOSE 80

CMD ["node", "server.js"]
