fix(docker): synchronize dev dependency volume

This commit is contained in:
Pi Web Agent
2026-07-13 12:15:18 +00:00
parent d72b14f40a
commit 8b0452d545
6 changed files with 195 additions and 11 deletions
+20 -2
View File
@@ -36,12 +36,22 @@ WORKDIR /workspace
COPY package.json package-lock.json ./
COPY scripts/install-git-hooks.mjs scripts/install-git-hooks.mjs
# Keep an immutable dependency seed outside /workspace, which is hidden by the
# checkout bind mount at runtime. A cached generation is added after custom
# image hooks so it identifies the final dependency tree.
RUN npm ci \
&& ln -sf /workspace/node_modules/.bin/pi /usr/local/bin/pi \
&& install -d -m 0755 /opt/pi-web-dev-dependencies \
&& cp package.json package-lock.json /opt/pi-web-dev-dependencies/ \
&& chmod -R a+rwX /workspace/node_modules \
&& mv /workspace/node_modules /opt/pi-web-dev-dependencies/node_modules \
&& ln -s /opt/pi-web-dev-dependencies/node_modules /workspace/node_modules \
&& ln -sf /opt/pi-web-dev-dependencies/node_modules/.bin/pi /usr/local/bin/pi \
&& npm cache clean --force \
&& chmod -R a+rwX /workspace/node_modules /data \
&& chmod -R a+rwX /data \
&& chmod 0777 /workspace
COPY --chmod=0755 docker/internal/dev/sync-node-modules /usr/local/sbin/pi-web-dev-sync-node-modules
COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker
COPY --from=docker-cli /usr/local/libexec/docker/cli-plugins /usr/local/libexec/docker/cli-plugins
COPY docker/internal/bin/hostexec /usr/local/bin/hostexec
@@ -49,6 +59,8 @@ COPY docker/pi-web-docker /usr/local/bin/pi-web-docker
RUN chmod 0755 /usr/local/bin/hostexec /usr/local/bin/pi-web-docker
COPY docker/custom-image.d/ /tmp/pi-web-custom-image.d/
# Image hooks use the temporary /workspace/node_modules symlink. Leave an empty
# directory afterward so Compose can mount and populate the dependency volume.
RUN bash -euxo pipefail -c '\
shopt -s nullglob; \
for script in /tmp/pi-web-custom-image.d/*.sh; do \
@@ -56,9 +68,15 @@ RUN bash -euxo pipefail -c '\
bash "${script}"; \
done; \
rm -rf /tmp/pi-web-custom-image.d; \
test -L /workspace/node_modules; \
rm /workspace/node_modules; \
install -d -m 0777 /workspace/node_modules; \
zypper clean --all; \
rm -rf /var/cache/zypp/* \
'
# Cache the generation with the completed seed. Changes to any preceding layer,
# including custom image hooks, rerun this step and refresh the named volume.
RUN node -e 'process.stdout.write(`${require("node:crypto").randomUUID()}\n`)' > /opt/pi-web-dev-dependencies/generation
EXPOSE 8504 8505