## this is a multi-stage build dockerfile optimized for kaniko cache
FROM nathapp/apline-jq:3.18 AS deps

# https://stackoverflow.com/a/58487433
# To prevent cache invalidation from changes in fields other than dependencies

COPY package.json package-lock.json /tmp/

RUN jq '{ name, dependencies, devDependencies, scripts }' < /tmp/package.json > /tmp/deps.json
RUN jq '{ name, lockfileVersion, requires, packages, dependencies }' < /tmp/package-lock.json > /tmp/deps-lock.json


FROM nathapp/node-bun:22.21.0-1.2.23-alpine AS builder
WORKDIR /app/

COPY --from=deps /tmp/deps.json ./package.json
COPY --from=deps /tmp/deps-lock.json ./package-lock.json

ADD ./bun.lockb ./tsconfig.json ./tsconfig.build.json ./nest-cli.json /app/

## install dependencies first
RUN bun install --freeze-lockfile
ADD ./src /app/src
#COPY . .
RUN bun run build


FROM nathapp/node-bun:22.21.0-1.2.23-alpine
WORKDIR /app/

COPY bun.lockb ./
COPY --from=deps /tmp/deps.json ./package.json
COPY --from=deps /tmp/deps-lock.json ./package-lock.json

RUN bun install --freeze-lockfile --production

COPY --from=builder /app/dist /app/dist
COPY package*.json ./
CMD ["bun", "run", "start:prod"]