############################################
### APP BUILD STAGE
############################################
FROM node:18-slim AS appbuild

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json yarn.lock .npmrc /usr/src/app/
RUN yarn install --frozen-lockfile --silent \
      && yarn cache clean --force

# Build app
COPY .eslintrc.json .eslintignore tsconfig.json /usr/src/app/
COPY src /usr/src/app/src
RUN yarn build

# Install app production dependencies
RUN rm -rf node_modules \
      && yarn install --frozen-lockfile --silent --production \
      && yarn cache clean --force


############################################
### IMAGE BUILD STAGE
############################################
FROM oven/bun:1-alpine

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Copy app dependencies
COPY package.json /usr/src/app/
COPY --from=appbuild /usr/src/app/node_modules /usr/src/app/node_modules

# Bundle app source
COPY --from=appbuild /usr/src/app/dist /usr/src/app/dist

EXPOSE  3000

CMD [ "bun", "./dist/index.js" ]
