48 lines
1.9 KiB
Docker
48 lines
1.9 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM node:26.5.0-alpine AS base
|
|
WORKDIR /m
|
|
ENV CI=true
|
|
RUN npm install --global pnpm@11.9.0 && pnpm config set store-dir /pnpm/store
|
|
|
|
FROM base AS dependencies
|
|
COPY pnpm-lock.yaml pnpm-workspace.yaml ./
|
|
RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm fetch --store-dir /pnpm/store
|
|
COPY . .
|
|
RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm install --frozen-lockfile --offline --store-dir /pnpm/store
|
|
|
|
FROM dependencies AS dev
|
|
# Only generated Vite/SvelteKit files and the deployment data are writable.
|
|
RUN mkdir -p /app/data /m/apps/web/.svelte-kit '/m/apps/web/node_modules/$app' /m/apps/web/node_modules/.vite /m/apps/web/node_modules/.vite-temp \
|
|
&& chown -R node:node /app/data /m/apps/web/.svelte-kit '/m/apps/web/node_modules/$app' /m/apps/web/node_modules/.vite /m/apps/web/node_modules/.vite-temp
|
|
USER node
|
|
ENV HOME=/home/node
|
|
WORKDIR /m/apps/web
|
|
CMD ["pnpm", "dev", "--host", "0.0.0.0", "--port", "5173", "--strictPort"]
|
|
|
|
FROM dependencies AS builder
|
|
RUN pnpm --filter "@hledger-reports/web..." build
|
|
|
|
FROM builder AS pruner
|
|
RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm --config.hoist-workspace-packages=false --filter @hledger-reports/web --prod deploy --legacy /pruned
|
|
|
|
# Keep the browser image and @playwright/test versions aligned.
|
|
FROM ghcr.io/eleith/containers-playwright:1.61.1-node26 AS e2e
|
|
WORKDIR /m
|
|
ENV CI=true
|
|
COPY pnpm-lock.yaml pnpm-workspace.yaml ./
|
|
RUN pnpm fetch
|
|
COPY . .
|
|
RUN pnpm install --frozen-lockfile --offline
|
|
WORKDIR /m/apps/web
|
|
CMD ["pnpm", "test:e2e"]
|
|
|
|
FROM node:26.5.0-alpine AS prod
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production HOST=127.0.0.1 PORT=3000
|
|
COPY --from=pruner /pruned/build ./build
|
|
COPY --from=pruner /pruned/node_modules ./node_modules
|
|
COPY --from=pruner /pruned/package.json ./package.json
|
|
RUN mkdir -p /app/data && chown node:node /app/data
|
|
USER node
|
|
CMD ["node", "build/index.js"]
|