From 97f771e2eca63b5afb7c3402a2ac96b129c4f950 Mon Sep 17 00:00:00 2001 From: Dotta Date: Thu, 3 Sep 2026 18:50:28 -0500 Subject: [PATCH] ci(runner): align Daytona cache exclusions --- .dockerignore | 19 +++++++++++++++++++ tests/runner-e2e/daytona-image-content.ts | 15 +++++++++------ tests/runner-e2e/daytona-image.test.ts | 23 +++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/.dockerignore b/.dockerignore index f4699e217a..b8cad4152a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,3 +10,22 @@ tmp *.log packages/paperclip-runner/dist packages/paperclip-runner/runner/target +packages/paperclip-runner/devtools +packages/paperclip-runner/docs +packages/paperclip-runner/examples +packages/paperclip-runner/test +packages/paperclip-runner/test-fixtures +packages/paperclip-runner/test-support +packages/paperclip-runner/**/*.md +packages/paperclip-runner/**/*.spec.ts +packages/paperclip-runner/**/*.spec.tsx +packages/paperclip-runner/**/*.test.cjs +packages/paperclip-runner/**/*.test.cts +packages/paperclip-runner/**/*.test.js +packages/paperclip-runner/**/*.test.jsx +packages/paperclip-runner/**/*.test.mjs +packages/paperclip-runner/**/*.test.mts +packages/paperclip-runner/**/*.test.ts +packages/paperclip-runner/**/*.test.tsx +packages/paperclip-runner/runner/crates/*/tests +packages/paperclip-runner/scripts/*-smoke.mjs diff --git a/tests/runner-e2e/daytona-image-content.ts b/tests/runner-e2e/daytona-image-content.ts index bb15e2819a..d29cc3e601 100644 --- a/tests/runner-e2e/daytona-image-content.ts +++ b/tests/runner-e2e/daytona-image-content.ts @@ -32,11 +32,11 @@ const ignoredGeneratedDirectoryPaths = new Set([ "packages/paperclip-runner/runner/target", ]); -// These paths may be copied into Docker's provider-build context, but they do -// not contribute to the release runnerd binary or the executable/digested -// provider-pack runtime payload. Keep the exclusions narrow and package-scoped: -// unknown non-documentation files remain hashed by default, so a newly -// introduced runtime input fails safe by invalidating the image key. +// These paths do not contribute to the release runnerd binary or the +// executable/digested provider-pack runtime payload. They are also excluded +// from the real Docker build context by .dockerignore. Keep the two lists in +// lockstep: if a future build starts consuming one of these inputs, Docker must +// fail instead of publishing bytes that the content identity did not hash. const ignoredRunnerDevelopmentDirectoryPaths = new Set([ "packages/paperclip-runner/devtools", "packages/paperclip-runner/docs", @@ -50,6 +50,8 @@ const runnerDocumentationFilePattern = /\.md$/; const runnerTestFilePattern = /\.(?:spec|test)\.(?:[cm]?[jt]sx?)$/; const runnerRustIntegrationTestPathPattern = /^packages\/paperclip-runner\/runner\/crates\/[^/]+\/tests(?:\/|$)/; +const runnerSmokeScriptPattern = + /^packages\/paperclip-runner\/scripts\/[^/]+-smoke\.mjs$/; export interface DaytonaImageContentOptions { repositoryRoot?: string; @@ -78,7 +80,8 @@ function shouldIgnoreRunnerDevelopmentInput(relativePath: string): boolean { return ( runnerDocumentationFilePattern.test(relativePath) || runnerTestFilePattern.test(relativePath) || - runnerRustIntegrationTestPathPattern.test(relativePath) + runnerRustIntegrationTestPathPattern.test(relativePath) || + runnerSmokeScriptPattern.test(relativePath) ); } diff --git a/tests/runner-e2e/daytona-image.test.ts b/tests/runner-e2e/daytona-image.test.ts index e7c17c3bfd..591d000819 100644 --- a/tests/runner-e2e/daytona-image.test.ts +++ b/tests/runner-e2e/daytona-image.test.ts @@ -59,6 +59,20 @@ describe("runner E2E Daytona image contract", () => { expect(dockerignore).toContain("**/node_modules"); expect(dockerignore).toContain("packages/paperclip-runner/dist"); expect(dockerignore).toContain("packages/paperclip-runner/runner/target"); + for (const developmentOnlyInput of [ + "packages/paperclip-runner/devtools", + "packages/paperclip-runner/docs", + "packages/paperclip-runner/examples", + "packages/paperclip-runner/test", + "packages/paperclip-runner/test-fixtures", + "packages/paperclip-runner/test-support", + "packages/paperclip-runner/**/*.md", + "packages/paperclip-runner/**/*.test.ts", + "packages/paperclip-runner/runner/crates/*/tests", + "packages/paperclip-runner/scripts/*-smoke.mjs", + ]) { + expect(dockerignore).toContain(developmentOnlyInput); + } expect(workflow).toContain("--platform linux/amd64"); expect(workflow).toContain( "Compute Daytona image content ID with pinned bases", @@ -192,6 +206,7 @@ describe("runner E2E Daytona image contract", () => { await mkdir(path.join(runnerRoot, "src/live"), { recursive: true }); await mkdir(path.join(runnerRoot, "docs"), { recursive: true }); await mkdir(path.join(runnerRoot, "spec"), { recursive: true }); + await mkdir(path.join(runnerRoot, "scripts"), { recursive: true }); await mkdir(path.join(runnerRoot, "test-fixtures"), { recursive: true }); await mkdir(path.join(runnerRoot, "runner/crates/runner-core/src"), { recursive: true, @@ -224,6 +239,10 @@ describe("runner E2E Daytona image contract", () => { path.join(runnerRoot, "test-fixtures/provider.json"), '{"fixture":"one"}\n', ); + await writeFile( + path.join(runnerRoot, "scripts/capability-clean-room-smoke.mjs"), + "first smoke probe\n", + ); await writeFile( path.join(runnerRoot, "runner/crates/runner-core/tests/recovery.rs"), "// first Rust integration test\n", @@ -247,6 +266,10 @@ describe("runner E2E Daytona image contract", () => { path.join(runnerRoot, "test-fixtures/provider.json"), '{"fixture":"two"}\n', ); + await writeFile( + path.join(runnerRoot, "scripts/capability-clean-room-smoke.mjs"), + "second smoke probe\n", + ); await writeFile( path.join(runnerRoot, "runner/crates/runner-core/tests/recovery.rs"), "// second Rust integration test\n",