From 2630501aec837eb0e1793fbaced7c2984a3fa3ed Mon Sep 17 00:00:00 2001 From: Guido X Jansen Date: Sat, 7 Mar 2026 00:40:42 +0100 Subject: [PATCH] fix(docker): deploy workspace packages with resolved dependencies (#153) Previous approach copied raw workspace directories, but those lack their own dependencies (hoisted to workspace root). Use pnpm deploy for each workspace package to get a standalone copy with all resolved dependencies, then merge into the API's node_modules. --- Dockerfile | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index ced64f9..e0b5fd8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -52,6 +52,18 @@ RUN pnpm --filter @singi-labs/lexicons build && \ # pnpm deploy copies workspace + prod deps (requires inject-workspace-packages=true in .npmrc). RUN pnpm --filter barazo-api deploy /app/deploy --prod +# pnpm deploy creates symlinks for workspace packages that point back to +# /workspace/, which won't exist in the runner stage. Deploy each workspace +# package separately (resolves their dependencies), then merge into the +# API's node_modules. +RUN pnpm --filter @singi-labs/lexicons deploy /tmp/lexicons-deploy --prod \ + && pnpm --filter @barazo/plugin-signatures deploy /tmp/sigs-deploy --prod + +RUN rm -rf /app/deploy/node_modules/@singi-labs/lexicons \ + && rm -rf /app/deploy/node_modules/@barazo/plugin-signatures \ + && cp -r /tmp/lexicons-deploy /app/deploy/node_modules/@singi-labs/lexicons \ + && cp -r /tmp/sigs-deploy /app/deploy/node_modules/@barazo/plugin-signatures + # --------------------------------------------------------------------------- # Stage 3: Production runner # --------------------------------------------------------------------------- @@ -67,13 +79,6 @@ RUN addgroup --system --gid 1001 nodejs && \ # Copy production deployment (node_modules + package.json) COPY --from=builder /app/deploy/ ./ -# Resolve workspace symlink: pnpm deploy creates a symlink for @singi-labs/lexicons -# that points back to the build workspace (/workspace/barazo-lexicons), which doesn't -# exist in the runner stage. Replace it with the actual built package. -RUN rm -f node_modules/@singi-labs/lexicons && rm -f node_modules/@barazo/plugin-signatures -COPY --from=builder /workspace/barazo-lexicons/ ./node_modules/@singi-labs/lexicons/ -COPY --from=builder /workspace/barazo-plugins/packages/plugin-signatures/ ./node_modules/@barazo/plugin-signatures/ - # Copy compiled output COPY --from=builder /workspace/barazo-api/dist/ ./dist/ -- 2.51.2