# syntax=docker/dockerfile:1.7 ARG BUN_VERSION=1.3.14 FROM oven/bun:${BUN_VERSION} AS dependencies WORKDIR /app COPY package.json bun.lock ./ RUN bun install --frozen-lockfile FROM dependencies AS worker-builder WORKDIR /app COPY . . RUN bun build scripts/outbox-worker.ts \ --target=bun \ --minify \ --outfile=dist/outbox-worker.js && \ bun build backend/discord.ts \ --target=bun \ --minify \ --outfile=dist/discord.js FROM node:22-bookworm-slim AS next-builder WORKDIR /app ARG NEXT_DEPLOYMENT_ID=container-build ENV NEXT_DEPLOYMENT_ID=${NEXT_DEPLOYMENT_ID} ENV NEXT_TELEMETRY_DISABLED=1 COPY --from=dependencies /app/node_modules ./node_modules COPY . . # Bun 1.3.14 can crash after a successful Next build on arm64. The application # still runs on Bun; Node is used only for the deterministic compiler process. RUN node node_modules/next/dist/bin/next build FROM dependencies AS migration WORKDIR /app ARG VCS_REF=unknown LABEL org.opencontainers.image.title="Buzz Sheet migrations" \ org.opencontainers.image.revision=${VCS_REF} ENV NODE_ENV=production COPY --chown=bun:bun db ./db COPY --chown=bun:bun drizzle ./drizzle COPY --chown=bun:bun scripts/migrate.ts ./scripts/migrate.ts COPY --chown=bun:bun tsconfig.json ./tsconfig.json USER 1000:1000 ENTRYPOINT ["bun", "scripts/migrate.ts"] FROM oven/bun:${BUN_VERSION} AS app WORKDIR /app ARG VCS_REF=unknown LABEL org.opencontainers.image.title="Buzz Sheet" \ org.opencontainers.image.revision=${VCS_REF} ENV HOSTNAME=0.0.0.0 ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 ENV PORT=3000 COPY --from=next-builder --chown=bun:bun /app/.next/standalone ./ COPY --from=next-builder --chown=bun:bun /app/.next/static ./.next/static COPY --from=next-builder --chown=bun:bun /app/public ./public COPY --from=worker-builder --chown=bun:bun /app/dist/outbox-worker.js ./worker/outbox-worker.js COPY --from=worker-builder --chown=bun:bun /app/dist/discord.js ./worker/discord.js COPY --from=worker-builder --chown=bun:bun /app/lib/catalog/assets ./lib/catalog/assets USER 1000:1000 EXPOSE 3000 CMD ["bun", "server.js"]