
ARG NODE_VERSION=20.18.0


FROM node:${NODE_VERSION}-alpine as base

#--------------------------------------------------------------------------------------------------------------------#

WORKDIR /usr/src/app

FROM base as deps


RUN --mount=type=bind,source=package.json,target=package.json \
    --mount=type=bind,source=package-lock.json,target=package-lock.json \
    --mount=type=cache,target=/root/.npm \
    npm ci --omit=dev

#--------------------------------------------------------------------------------------------------------------------#

FROM deps as build


RUN --mount=type=bind,source=package.json,target=package.json \
    --mount=type=bind,source=package-lock.json,target=package-lock.json \
    --mount=type=cache,target=/root/.npm \
    npm ci


COPY . .

RUN npm run build

#--------------------------------------------------------------------------------------------------------------------#

FROM base as final


ENV NODE_ENV production


USER node


COPY package.json .
COPY .env.* .


COPY --from=deps /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/dist ./dist


EXPOSE 3102

# Run the Production Build.
CMD ["npm", "run", "start:prod"]
