# syntax=docker/dockerfile:labs FROM node:20-bookworm-slim@sha256:72f2f046a5f8468db28730b990b37de63ce93fd1a72a40f531d6aa82afdf0d46 AS node-20 WORKDIR /app FROM node-20 AS pruner COPY --chown=node:node . . RUN npx -q turbo@1.10.9 prune --scope=coordinator --docker RUN find . -name "node_modules" -type d -prune -exec rm -rf '{}' + FROM node-20 AS base RUN apt-get update \ && apt-get install -y buildah ca-certificates dumb-init docker.io \ && rm -rf /var/lib/apt/lists/* COPY --chown=node:node .gitignore .gitignore COPY --from=pruner --chown=node:node /app/out/json/ . COPY --from=pruner --chown=node:node /app/out/pnpm-lock.yaml ./pnpm-lock.yaml COPY --from=pruner --chown=node:node /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml FROM base AS dev-deps RUN corepack enable ENV NODE_ENV development RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm fetch --no-frozen-lockfile RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install --ignore-scripts --no-frozen-lockfile FROM base AS builder RUN corepack enable COPY --from=pruner --chown=node:node /app/out/full/ . COPY --from=dev-deps --chown=node:node /app/ . COPY --chown=node:node turbo.json turbo.json RUN pnpm run -r --filter coordinator build:bundle FROM alpine AS cri-tools WORKDIR /cri-tools ARG CRICTL_VERSION=v1.29.0 ARG CRICTL_CHECKSUM=sha256:d16a1ffb3938f5a19d5c8f45d363bd091ef89c0bc4d44ad16b933eede32fdcbb ADD --checksum=${CRICTL_CHECKSUM} \ https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz . RUN tar zxvf crictl-${CRICTL_VERSION}-linux-amd64.tar.gz FROM base AS runner RUN corepack enable ENV NODE_ENV production COPY --from=cri-tools --chown=node:node /cri-tools/crictl /usr/local/bin COPY --from=builder --chown=node:node /app/apps/coordinator/dist/index.mjs ./index.mjs EXPOSE 8000 CMD [ "/usr/bin/dumb-init", "--", "/usr/local/bin/node", "./index.mjs" ]