From d7aa1fb6da0756a8fb83877d4ed8cc9ed26c976b Mon Sep 17 00:00:00 2001 From: "Claude Opus 4.8" Date: Fri, 10 Jul 2026 16:59:29 +0200 Subject: [PATCH] Build the plugin-sdk package in the api image (#71) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The api now depends on @dorfteich/plugin-sdk, so the api Dockerfile must copy and build it alongside shared — the CD "Build and push images" (and CI "Build container images") step failed without it. Also pre-create /data/plugins so the plugins named volume is writable by the non-root user, mirroring /data/uploads. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1 --- apps/api/Dockerfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 90a37a7..21bba61 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -6,10 +6,12 @@ WORKDIR /repo RUN npm install -g pnpm@11 COPY pnpm-workspace.yaml pnpm-lock.yaml package.json tsconfig.base.json ./ COPY packages/shared ./packages/shared +COPY packages/plugin-sdk ./packages/plugin-sdk COPY apps/api ./apps/api COPY deploy/fonts ./deploy/fonts RUN pnpm install --frozen-lockfile --filter @dorfteich/api... \ && pnpm --filter @dorfteich/shared build \ + && pnpm --filter @dorfteich/plugin-sdk build \ && pnpm --filter @dorfteich/api build \ # Bake the self-hosted font catalog in so the PDF exporter can inline a # pond's fonts as base64 (ADR 0016). Same download as the web image; fails @@ -28,10 +30,11 @@ WORKDIR /app COPY --from=build --chown=node:node /out /app # Generate the Prisma client for this image's platform. RUN node node_modules/prisma/build/index.js generate -# A fresh named volume mounted at /data/uploads is created root-owned; -# pre-creating it here (Docker copies an image directory's ownership into -# a new volume on first mount) lets the non-root `node` user write to it. -RUN mkdir -p /data/uploads && chown -R node:node /data/uploads +# A fresh named volume mounted at /data/uploads or /data/plugins is created +# root-owned; pre-creating them here (Docker copies an image directory's +# ownership into a new volume on first mount) lets the non-root `node` user +# write to them. +RUN mkdir -p /data/uploads /data/plugins && chown -R node:node /data/uploads /data/plugins USER node EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=3s --retries=3 \