FROM docker.io/oven/bun:alpine AS base

ENV NODE_ENV=production

RUN apk add openssl

WORKDIR /app
RUN chown -R bun:bun /app
USER bun

COPY tsconfig.build.json ./
COPY tsconfig.json ./
COPY package.json ./
COPY bun.lock ./

RUN bun install --ignore-scripts --production --frozen-lockfile

FROM base AS builder

COPY prisma ./prisma/
RUN bunx prisma generate

COPY . .

RUN bun run build

FROM base AS runner

COPY --from=builder /app/dist ./dist
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/node_modules/.prisma/client ./node_modules/.prisma/client

EXPOSE 4000

CMD bun prisma migrate deploy && bun run start:prod