@@ -8,6 +8,10 @@ import YAML from "yaml";
|
8 | 8 | const repoRoot = resolve(fileURLToPath(new URL(".", import.meta.url)), ".."); |
9 | 9 | const dockerfilePath = join(repoRoot, "Dockerfile"); |
10 | 10 | const dockerReleaseWorkflowPath = join(repoRoot, ".github/workflows/docker-release.yml"); |
| 11 | +const fullReleaseValidationWorkflowPath = join( |
| 12 | +repoRoot, |
| 13 | +".github/workflows/full-release-validation.yml", |
| 14 | +); |
11 | 15 | const dockerSetupDockerfilePaths = ["Dockerfile", "scripts/docker/sandbox/Dockerfile"] as const; |
12 | 16 | const pnpmWorkspacePath = join(repoRoot, "pnpm-workspace.yaml"); |
13 | 17 | |
@@ -301,6 +305,17 @@ describe("Dockerfile", () => {
|
301 | 305 | expect(workflow).toContain('test -f "${temp_root}/home/.openclaw/workspace/HEARTBEAT.md"'); |
302 | 306 | }); |
303 | 307 | |
| 308 | +it("keeps runtime workspace template smoke in full release validation", async () => { |
| 309 | +const workflow = await readFile(fullReleaseValidationWorkflowPath, "utf8"); |
| 310 | + |
| 311 | +expect(workflow).toContain("Build and smoke test final Docker runtime image"); |
| 312 | +expect(workflow).toContain('-t "${image_ref}"'); |
| 313 | +expect(workflow).toContain("test -f /app/src/agents/templates/HEARTBEAT.md"); |
| 314 | +expect(workflow).toContain('grep -F "Missing workspace template:"'); |
| 315 | +expect(workflow).toContain('test -f "${temp_root}/home/.openclaw/workspace/HEARTBEAT.md"'); |
| 316 | +expect(workflow).not.toContain("scripts/docker/runtime-workspace-template-smoke.sh"); |
| 317 | +}); |
| 318 | + |
304 | 319 | it("does not override bundled plugin discovery in runtime images", async () => { |
305 | 320 | const dockerfile = collapseDockerContinuations(await readFile(dockerfilePath, "utf8")); |
306 | 321 | expect(dockerfile).toContain(`ARG OPENCLAW_BUNDLED_PLUGIN_DIR=${BUNDLED_PLUGIN_ROOT_DIR}`); |
|