diff --git a/Dockerfile b/Dockerfile index e312b978..e16c24a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,39 @@ -FROM node:lts-trixie-slim - +FROM node:lts-trixie-slim AS base RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates curl git \ && rm -rf /var/lib/apt/lists/* +RUN corepack enable -RUN npm install --global paperclipai@latest @anthropic-ai/claude-code@latest @openai/codex@latest opencode-ai \ +FROM base AS deps +WORKDIR /app +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./ +COPY cli/package.json cli/ +COPY server/package.json server/ +COPY ui/package.json ui/ +COPY packages/shared/package.json packages/shared/ +COPY packages/db/package.json packages/db/ +COPY packages/adapter-utils/package.json packages/adapter-utils/ +COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/ +COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/ +COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/ +COPY packages/adapters/openclaw-gateway/package.json packages/adapters/openclaw-gateway/ +COPY packages/adapters/opencode-local/package.json packages/adapters/opencode-local/ +COPY packages/adapters/pi-local/package.json packages/adapters/pi-local/ + +RUN pnpm install --no-frozen-lockfile + +FROM base AS build +WORKDIR /app +COPY --from=deps /app /app +COPY . . +RUN pnpm --filter @paperclipai/ui build +RUN pnpm --filter @paperclipai/server build +RUN test -f server/dist/index.js || (echo "ERROR: server build output missing" && exit 1) + +FROM base AS production +WORKDIR /app +COPY --chown=node:node --from=build /app /app +RUN npm install --global --omit=dev @anthropic-ai/claude-code@latest @openai/codex@latest opencode-ai \ && mkdir -p /paperclip \ && chown node:node /paperclip @@ -23,4 +52,4 @@ VOLUME ["/paperclip"] EXPOSE 3100 USER node -CMD ["paperclipai", "start"] +CMD ["node", "--import", "./server/node_modules/tsx/dist/loader.mjs", "server/dist/index.js"]