ARG NODE_VERSION=lts


FROM node:${NODE_VERSION}-alpine AS deps

WORKDIR /vode-app/

COPY package.json .
COPY .npmrc .

RUN --mount=type=secret,id=VODE_APP_REGISTRY_AUTH_TOKEN \
    export VODE_APP_REGISTRY_AUTH_TOKEN=$(cat /run/secrets/VODE_APP_REGISTRY_AUTH_TOKEN) && \
    npm install --omit=dev
RUN cp -r node_modules/ node_modules_prod/
RUN --mount=type=secret,id=VODE_APP_REGISTRY_AUTH_TOKEN \
    export VODE_APP_REGISTRY_AUTH_TOKEN=$(cat /run/secrets/VODE_APP_REGISTRY_AUTH_TOKEN) && \
    npm install


FROM node:${NODE_VERSION}-alpine AS stage

WORKDIR /vode-app/

COPY --from=deps /vode-app/node_modules/ node_modules/

COPY scripts/ scripts/
COPY src/ src/
COPY tests/ tests/
COPY buildinfo-template.txt .
COPY package.json .
COPY tsconfig.build.json .
COPY tsconfig.json .


FROM stage AS build

WORKDIR /vode-app/

RUN npm run build


FROM build AS test

WORKDIR /vode-app/

RUN npm run tests > dist/tests.log 2>&1


FROM scratch AS artifacts

COPY --from=build /vode-app/dist/ dist/
COPY --from=test /vode-app/dist/tests.log dist/tests.log


FROM node:${NODE_VERSION}-alpine AS final

WORKDIR /vode-app/

COPY --from=deps /vode-app/node_modules_prod/ node_modules/
COPY --from=artifacts / .

ENV NODE_ENV=production

CMD ["node", "dist/main.bundle.js"]
