FROM oven/bun:1 AS base WORKDIR /app RUN apt-get update -y && apt-get install -y openssl curl FROM base AS deps-dev RUN mkdir -p /tmp/dev COPY package.json bun.lock /tmp/dev/ RUN cd /tmp/dev && bun install --frozen-lockfile FROM base AS test COPY --from=deps-dev /tmp/dev/node_modules /app/node_modules COPY --from=deps-dev /tmp/dev/package.json /app/package.json COPY --from=deps-dev /tmp/dev/bun.lock /app/bun.lock COPY . . RUN bun test FROM deps-dev AS deps-prod RUN mkdir -p /tmp/pro COPY package.json bun.lock /tmp/pro/ RUN cd /tmp/pro && bun install --production --frozen-lockfile FROM base AS runtime ARG PORT ENV PORT=${PORT:-3000} COPY --from=deps-prod /tmp/pro/node_modules /app/node_modules COPY --from=deps-prod /tmp/pro/package.json /app/package.json COPY --from=deps-prod /tmp/pro/bun.lock /app/bun.lock COPY . /app/ RUN bun prisma generate RUN chown -R bun:bun /app USER bun EXPOSE ${PORT} ENTRYPOINT ["sh", "-c", "bun prisma migrate deploy && bun start"]