Files
eleith 062dd0b56a
ci/woodpecker/pr/web Pipeline was successful
ci/woodpecker/pr/worker Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/worker Pipeline was successful
fix(dev): configure the localhost web port
2026-11-10 17:28:35 -08:00

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"]