From d381f8b720b0609c3eb15cdbeb8812fe99505d4c Mon Sep 17 00:00:00 2001 From: jason Date: Sun, 22 Mar 2026 08:29:26 -0500 Subject: [PATCH] Switch Docker install from npm install to npm ci to fix build hang npm install re-resolves the full dependency tree from the registry on every --no-cache build, making two full network round-trips (root + client). Any slow registry response causes it to appear hung. Changes: - Replace both 'npm install' with 'npm ci': no dependency resolution step, uses lockfile as-is, exits fast on any mismatch rather than silently upgrading - Copy package.json + package-lock.json explicitly (not glob) so the lockfile is always present for npm ci to validate against - Set npm fetch timeouts (5s min, 30s max, 3 retries) so failures surface quickly rather than hanging indefinitely Co-Authored-By: Claude Sonnet 4.6 --- Dockerfile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 45d29a2..6e4fe8e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,13 +5,19 @@ WORKDIR /app # Install build tools + OpenSSL (required by Prisma query engine on Alpine) RUN apk add --no-cache python3 make g++ openssl openssl-dev -# Copy package manifests -COPY package*.json ./ -COPY client/package*.json ./client/ +# Configure npm: disable package-lock update, cap network retries/timeout +RUN npm config set fetch-retry-mintimeout 5000 \ + && npm config set fetch-retry-maxtimeout 30000 \ + && npm config set fetch-retries 3 \ + && npm config set prefer-offline false -# Install all dependencies (dev deps needed for prisma CLI + tsc build) -RUN npm install -RUN cd client && npm install +# Copy lockfiles + manifests together so npm ci can validate the lockfile +COPY package.json package-lock.json ./ +COPY client/package.json client/package-lock.json ./client/ + +# Use npm ci (lockfile-exact, no resolution step, much faster than npm install) +RUN npm ci +RUN cd client && npm ci # Copy source COPY . .