diff --git a/docker/daytona-runner/Dockerfile b/docker/daytona-runner/Dockerfile index 7fc23797c1..64bea4bf36 100644 --- a/docker/daytona-runner/Dockerfile +++ b/docker/daytona-runner/Dockerfile @@ -12,7 +12,7 @@ COPY packages/paperclip-runner/protocol ../protocol RUN cargo build --locked --release -j 2 -p paperclip-runner-core --bin paperclip-runnerd \ && strip /workspace/packages/paperclip-runner/runner/target/release/paperclip-runnerd -FROM node:24-bookworm@sha256:9137a20e25879e0b557227b57e3ee4e9af4bde29eb3db66134cd1723e84f830b AS provider-pack-build +FROM node:24.21.0-bookworm@sha256:5a750d3be5e5c80275f8c9a5367c3aed99c2875656590c8d0701c7ee687f5f0a AS provider-pack-build RUN corepack enable && corepack prepare pnpm@9.15.4 --activate WORKDIR /workspace COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc tsconfig.base.json ./ diff --git a/docker/daytona-runner/README.md b/docker/daytona-runner/README.md index 3d4fb80b53..cd54962638 100644 --- a/docker/daytona-runner/README.md +++ b/docker/daytona-runner/README.md @@ -94,6 +94,12 @@ full Git SHA as `PAPERCLIP_RUNNER_SOURCE_REVISION`. Do not bake provider credentials, Paperclip bootstrap tickets, or Daytona preview tokens into this image. They remain per-run secret material. +The provider-pack build pins the official Linux x64 Node 24.21.0 image by +manifest digest. Its bundled Undici is 7.29.1, which fixes +[GHSA-3wwx-pv8p-q78v](https://github.com/advisories/GHSA-3wwx-pv8p-q78v). +Pi separately verifies its private Node executable and nested npm dependency; +changing the outer interpreter does not replace either provider-owned pin. + Provider CLI updates are manifest-only changes: repository CI owns the root lockfile. Resolve the complete workspace manifest graph in the build context before invoking Docker, matching CI when a source commit precedes the lockfile diff --git a/tests/runner-e2e/daytona-image.test.ts b/tests/runner-e2e/daytona-image.test.ts index 45205e6678..3087aab83e 100644 --- a/tests/runner-e2e/daytona-image.test.ts +++ b/tests/runner-e2e/daytona-image.test.ts @@ -82,7 +82,7 @@ describe("runner E2E Daytona image contract", () => { ); expect(extractDaytonaBaseImages(dockerfile)).toEqual([ "rust:1.97-bookworm@sha256:408fe88047cef61a2087653b0c5255fa51c0f2d6d94ddedd7a2562a9b91a46f6", - "node:24-bookworm@sha256:9137a20e25879e0b557227b57e3ee4e9af4bde29eb3db66134cd1723e84f830b", + "node:24.21.0-bookworm@sha256:5a750d3be5e5c80275f8c9a5367c3aed99c2875656590c8d0701c7ee687f5f0a", "daytonaio/sandbox:0.8.0@sha256:eadf88e4391072b7ad4bed27d9cadfc9fe9d8ed375d9219d34c2ccb518f213e3", ]); expect(dockerignore).toContain("**/node_modules");