From 90f0ebc1a86b3e9a9b4219cce3da52b267b9768d Mon Sep 17 00:00:00 2001 From: Scott Krautkramer Date: Mon, 16 Mar 2026 21:57:30 +0000 Subject: [PATCH] docker: fix self-build breakage after extension migration --- Dockerfile | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index b2af00c3b40..80e66f4a042 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,9 @@ # Two runtime variants: # Default (bookworm): docker build . # Slim (bookworm-slim): docker build --build-arg OPENCLAW_VARIANT=slim . -ARG OPENCLAW_EXTENSIONS="" +# Default: build all bundled extensions. Pass a space-separated list to +# build only a subset (e.g. "whatsapp device-pair"). +ARG OPENCLAW_EXTENSIONS="__all__" ARG OPENCLAW_VARIANT=default ARG OPENCLAW_NODE_BOOKWORM_IMAGE="node:24-bookworm@sha256:3a09aa6354567619221ef6c45a5051b671f953f0a1924d1f819ffb236e520e6b" ARG OPENCLAW_NODE_BOOKWORM_DIGEST="sha256:3a09aa6354567619221ef6c45a5051b671f953f0a1924d1f819ffb236e520e6b" @@ -27,14 +29,26 @@ ARG OPENCLAW_NODE_BOOKWORM_SLIM_DIGEST="sha256:e8e2e91b1378f83c5b2dd15f0247f3411 FROM ${OPENCLAW_NODE_BOOKWORM_IMAGE} AS ext-deps ARG OPENCLAW_EXTENSIONS COPY extensions /tmp/extensions -# Copy package.json for opted-in extensions so pnpm resolves their deps. +# Copy package.json for extensions so pnpm resolves their deps. +# When OPENCLAW_EXTENSIONS is empty or "__all__", include every extension +# that has a package.json. Otherwise, only include the listed names. RUN mkdir -p /out && \ - for ext in $OPENCLAW_EXTENSIONS; do \ - if [ -f "/tmp/extensions/$ext/package.json" ]; then \ - mkdir -p "/out/$ext" && \ - cp "/tmp/extensions/$ext/package.json" "/out/$ext/package.json"; \ - fi; \ - done + if [ -z "$OPENCLAW_EXTENSIONS" ] || [ "$OPENCLAW_EXTENSIONS" = "__all__" ]; then \ + for dir in /tmp/extensions/*/; do \ + ext="$(basename "$dir")" && \ + if [ -f "/tmp/extensions/$ext/package.json" ]; then \ + mkdir -p "/out/$ext" && \ + cp "/tmp/extensions/$ext/package.json" "/out/$ext/package.json"; \ + fi; \ + done; \ + else \ + for ext in $OPENCLAW_EXTENSIONS; do \ + if [ -f "/tmp/extensions/$ext/package.json" ]; then \ + mkdir -p "/out/$ext" && \ + cp "/tmp/extensions/$ext/package.json" "/out/$ext/package.json"; \ + fi; \ + done; \ + fi # ── Stage 2: Build ────────────────────────────────────────────── FROM ${OPENCLAW_NODE_BOOKWORM_IMAGE} AS build @@ -98,6 +112,9 @@ RUN pnpm ui:build FROM build AS runtime-assets RUN CI=true pnpm prune --prod && \ find dist -type f \( -name '*.d.ts' -o -name '*.d.mts' -o -name '*.d.cts' -o -name '*.map' \) -delete +# Restore self-referencing package link removed by pnpm prune --prod. +# Required for openclaw/plugin-sdk/* subpath imports at runtime. +RUN ln -s /app /app/node_modules/openclaw # ── Runtime base images ───────────────────────────────────────── FROM ${OPENCLAW_NODE_BOOKWORM_IMAGE} AS base-default