FROM docker.io/library/node:22-trixie-slim AS workspace-base WORKDIR /app COPY package.json package-lock.json ./ COPY apps/admin/package.json apps/admin/package.json COPY apps/submission/package.json apps/submission/package.json COPY packages/cue-engine/package.json packages/cue-engine/package.json COPY packages/effects/package.json packages/effects/package.json COPY packages/render-engine/package.json packages/render-engine/package.json COPY packages/shared-types/package.json packages/shared-types/package.json COPY services/api/package.json services/api/package.json COPY services/worker/package.json services/worker/package.json RUN npm ci FROM workspace-base AS workspace-source WORKDIR /app COPY . . FROM workspace-source AS node-runtime WORKDIR /app RUN apt-get update \ && apt-get install -y --no-install-recommends \ libheif1 \ libheif-plugin-libde265 \ && rm -rf /var/lib/apt/lists/* FROM workspace-source AS admin-build WORKDIR /app RUN npm run build --workspace @goodgrief/admin FROM workspace-source AS submission-build WORKDIR /app RUN npm run build --workspace @goodgrief/submission FROM docker.io/library/nginx:1.27-alpine AS admin-web COPY docker/nginx/spa.conf /etc/nginx/conf.d/default.conf COPY --from=admin-build /app/apps/admin/dist /usr/share/nginx/html FROM docker.io/library/nginx:1.27-alpine AS submission-web COPY docker/nginx/spa.conf /etc/nginx/conf.d/default.conf COPY --from=submission-build /app/apps/submission/dist /usr/share/nginx/html