Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
# Adding a production dependency with native bindings breaks that assumption
# silently — the image would ship the builder's architecture. Such a dependency
# has to be installed on $TARGETPLATFORM instead, emulation and all.
FROM --platform=$BUILDPLATFORM node:24-alpine@sha256:06d7adf3e0ef61a13f1d28682726366f97a15aa1888c934d3ecec86c33918b53 AS builder
FROM --platform=$BUILDPLATFORM node:26-alpine@sha256:c6ad9e9c1d80f6eb607c26b4b0a132ff7a2344fad1c78ea3baa2a7d4c8de6d94 AS builder
WORKDIR /app
RUN corepack enable
# Node 25+ images no longer bundle corepack, so install it from npm.
RUN npm install -g corepack@0.36.0 && corepack enable
# HUSKY=0 disables the `prepare` hook: git hooks are a developer-machine
# concern, and .husky/ is not part of the build context.
ENV HUSKY=0
Expand All @@ -39,18 +40,19 @@ RUN pnpm run build
# installs git hooks for developers cannot run here — and an install whose
# scripts may fetch architecture-specific binaries would defeat the
# build-platform reasoning above.
FROM --platform=$BUILDPLATFORM node:24-alpine@sha256:06d7adf3e0ef61a13f1d28682726366f97a15aa1888c934d3ecec86c33918b53 AS deps
FROM --platform=$BUILDPLATFORM node:26-alpine@sha256:c6ad9e9c1d80f6eb607c26b4b0a132ff7a2344fad1c78ea3baa2a7d4c8de6d94 AS deps
WORKDIR /app
ENV HUSKY=0
RUN corepack enable
# Node 25+ images no longer bundle corepack, so install it from npm.
RUN npm install -g corepack@0.36.0 && corepack enable
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm install --prod --frozen-lockfile --ignore-scripts

# The runner is the only stage built for the target platform, and it runs
# nothing: it copies what the stages above produced. That keeps QEMU out of the
# multi-platform build entirely, and leaves neither pnpm nor its
# content-addressable store in the image the way an install here would.
FROM node:24-alpine@sha256:06d7adf3e0ef61a13f1d28682726366f97a15aa1888c934d3ecec86c33918b53 AS runner
FROM node:26-alpine@sha256:c6ad9e9c1d80f6eb607c26b4b0a132ff7a2344fad1c78ea3baa2a7d4c8de6d94 AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
Expand Down
Loading