mirror of
https://github.com/ZSeven-W/openpencil.git
synced 2026-06-01 03:14:29 +07:00
Replace 15 individual COPY lines with a single glob pattern. New packages no longer require Dockerfile changes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
81 lines
2.4 KiB
Docker
81 lines
2.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# ── Stage 1: Build web app ──
|
|
FROM oven/bun:1 AS builder
|
|
|
|
WORKDIR /app
|
|
COPY package.json bun.lock ./
|
|
COPY --parents packages/*/package.json apps/*/package.json ./
|
|
RUN bun install --frozen-lockfile
|
|
COPY . .
|
|
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
|
RUN bun --bun run build
|
|
|
|
# ── Stage 2: Base (web only, no CLI) ──
|
|
FROM oven/bun:1-slim AS base
|
|
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
|
|
ENV NODE_ENV=production
|
|
ENV NITRO_HOST=0.0.0.0
|
|
ENV NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|
|
|
|
# ── CLI variants ──
|
|
|
|
FROM oven/bun:1 AS with-claude
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
RUN bun install -g @anthropic-ai/claude-code
|
|
ENV NODE_ENV=production NITRO_HOST=0.0.0.0 NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|
|
|
|
FROM oven/bun:1 AS with-codex
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
RUN bun install -g @openai/codex
|
|
ENV NODE_ENV=production NITRO_HOST=0.0.0.0 NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|
|
|
|
FROM oven/bun:1 AS with-opencode
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
RUN bun install -g opencode-ai
|
|
ENV NODE_ENV=production NITRO_HOST=0.0.0.0 NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|
|
|
|
FROM oven/bun:1 AS with-copilot
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
RUN bun install -g @github/copilot
|
|
ENV NODE_ENV=production NITRO_HOST=0.0.0.0 NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|
|
|
|
FROM oven/bun:1 AS with-gemini
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
RUN bun install -g @google/gemini-cli
|
|
ENV NODE_ENV=production NITRO_HOST=0.0.0.0 NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|
|
|
|
# ── Full: all CLI tools ──
|
|
FROM oven/bun:1 AS full
|
|
WORKDIR /app
|
|
COPY --from=builder /app/out/web ./out/web
|
|
COPY --from=builder /app/package.json ./
|
|
RUN bun install -g @anthropic-ai/claude-code @openai/codex opencode-ai @github/copilot @google/gemini-cli
|
|
ENV NODE_ENV=production NITRO_HOST=0.0.0.0 NITRO_PORT=3000
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "./out/web/server/index.mjs"]
|