diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 14e9f07f2..ffced3af9 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -66,6 +66,18 @@ RUN pnpm --filter @open-design/daemon build && \ -name "binding.gyp" \ \) -delete +# Stage-2 assets — copied into the build stage so the runtime stage +# can pull them via --from=build instead of reaching back into the +# build context. This lets the Dockerfile work when the build context +# differs from the repo root (Railway, CI runners with a subdirectory +# context, etc.). +COPY skills ./skills +COPY design-systems ./design-systems +COPY craft ./craft +COPY prompt-templates ./prompt-templates +COPY assets ./assets +COPY plugins/_official ./plugins/_official + FROM ${RUNTIME_IMAGE} RUN apk add --no-cache tini poppler-utils && \ @@ -75,18 +87,18 @@ RUN apk add --no-cache tini poppler-utils && \ WORKDIR /app COPY --from=build --chown=open-design:open-design /app/deploy/daemon ./apps/daemon COPY --from=build --chown=open-design:open-design /app/apps/web/out ./apps/web/out -COPY --chown=open-design:open-design skills ./skills -COPY --chown=open-design:open-design design-systems ./design-systems -COPY --chown=open-design:open-design craft ./craft -COPY --chown=open-design:open-design prompt-templates ./prompt-templates -COPY --chown=open-design:open-design assets/frames ./assets/frames -COPY --chown=open-design:open-design assets/community-pets ./assets/community-pets +COPY --from=build --chown=open-design:open-design /app/skills ./skills +COPY --from=build --chown=open-design:open-design /app/design-systems ./design-systems +COPY --from=build --chown=open-design:open-design /app/craft ./craft +COPY --from=build --chown=open-design:open-design /app/prompt-templates ./prompt-templates +COPY --from=build --chown=open-design:open-design /app/assets/frames ./assets/frames +COPY --from=build --chown=open-design:open-design /app/assets/community-pets ./assets/community-pets # Plan §3.J4 / spec §23.3.5 — bundled atom plugins registered on # daemon boot. The directory contains `plugins/_official/atoms//` # pairs (SKILL.md + open-design.json); registerBundledPlugins() walks # it on startup so the container ships with first-party atoms reachable # via the same registry path third-party plugins use. -COPY --chown=open-design:open-design plugins/_official ./plugins/_official +COPY --from=build --chown=open-design:open-design /app/plugins/_official ./plugins/_official RUN mkdir -p /app/.od && \ chown -R open-design:open-design /app