ARG NODE_IMAGE=docker.m.daocloud.io/library/node:20-alpine

FROM ${NODE_IMAGE} AS client-builder
WORKDIR /build/client
COPY client/package*.json ./
RUN npm ci
COPY client/ ./
RUN npm run build

FROM ${NODE_IMAGE} AS server-builder
WORKDIR /build/server
COPY server/package*.json ./
RUN npm ci
COPY server/ ./
RUN npx prisma generate
RUN npm run build

FROM ${NODE_IMAGE} AS runtime
WORKDIR /app/server
ENV NODE_ENV=production
ENV PORT=3000
ENV CLIENT_DIST_PATH=/app/server/public

COPY server/package*.json ./
RUN npm ci --omit=dev

COPY --from=server-builder /build/server/dist ./dist
COPY --from=server-builder /build/server/prisma ./prisma
RUN npx prisma generate
COPY --from=client-builder /build/client/dist ./public
COPY docker/runtime-entrypoint.sh /usr/local/bin/toolsshow-entrypoint
RUN chmod +x /usr/local/bin/toolsshow-entrypoint

EXPOSE 3000

CMD ["toolsshow-entrypoint"]
