FROM node:24-slim AS manifests WORKDIR /app RUN corepack enable COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY patches ./patches FROM manifests AS deps RUN corepack pnpm install --frozen-lockfile # adapter-node bundles devDependencies into build/, so the runtime only needs these FROM manifests AS prod-deps RUN corepack pnpm install --frozen-lockfile --prod FROM node:24-slim AS build WORKDIR /app RUN corepack enable COPY --from=deps /app/node_modules ./node_modules COPY . . # vite.config.ts falls back to the prod oauth client when these are unset ARG VITE_OAUTH_CLIENT_ID ARG VITE_OAUTH_REDIRECT_URI ARG APP_VERSION RUN corepack pnpm run build FROM node:24-slim WORKDIR /app ENV NODE_ENV=production ENV HOST=0.0.0.0 ENV PORT=3000 COPY --from=build /app/build ./build COPY --from=build /app/package.json ./package.json COPY --from=prod-deps /app/node_modules ./node_modules EXPOSE 3000 CMD ["node", "build"]