fix: keep host plugin registry out of live Docker state

This commit is contained in:
Peter Steinberger
2026-04-26 09:17:34 +01:00
parent 0c020cdb7a
commit 134cc64aff
3 changed files with 24 additions and 2 deletions

View File

@@ -69,14 +69,16 @@ openclaw_live_stage_state_dir() {
mkdir -p "$dest_dir"
if [ -d "$source_dir" ]; then
# Sandbox workspaces can accumulate root-owned artifacts from prior Docker
# runs. They are not needed for live-test auth/config staging and can make
# temp-dir cleanup fail on exit, so keep them out of the staged state copy.
# runs. The persisted plugin registry contains host-absolute paths that are
# not portable into Linux containers. Neither is needed for live-test
# auth/config staging, so keep them out of the staged state copy.
set +e
tar -C "$source_dir" \
--warning=no-file-changed \
--ignore-failed-read \
--exclude=workspace \
--exclude=sandboxes \
--exclude=plugins/installs.json \
--exclude=relay.sock \
--exclude='*.sock' \
--exclude='*/*.sock' \

View File

@@ -228,6 +228,7 @@ const TOOLING_SOURCE_TEST_TARGETS = new Map([
["scripts/github/barnacle-auto-response.mjs", ["test/scripts/barnacle-auto-response.test.ts"]],
["scripts/changed-lanes.mjs", ["test/scripts/changed-lanes.test.ts"]],
["scripts/check-changed.mjs", ["test/scripts/changed-lanes.test.ts"]],
["scripts/lib/live-docker-stage.sh", ["test/scripts/live-docker-stage.test.ts"]],
["scripts/lib/vitest-local-scheduling.mjs", ["test/scripts/vitest-local-scheduling.test.ts"]],
[
"scripts/run-vitest.mjs",
@@ -251,6 +252,7 @@ const TOOLING_SOURCE_TEST_TARGETS = new Map([
const TOOLING_TEST_TARGETS = new Map([
["test/scripts/barnacle-auto-response.test.ts", ["test/scripts/barnacle-auto-response.test.ts"]],
["test/scripts/changed-lanes.test.ts", ["test/scripts/changed-lanes.test.ts"]],
["test/scripts/live-docker-stage.test.ts", ["test/scripts/live-docker-stage.test.ts"]],
["test/scripts/test-projects.test.ts", ["test/scripts/test-projects.test.ts"]],
[
"test/scripts/vitest-local-scheduling.test.ts",

View File

@@ -0,0 +1,18 @@
import { readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { describe, expect, it } from "vitest";
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
const stageScriptPath = path.join(repoRoot, "scripts/lib/live-docker-stage.sh");
describe("live Docker state staging", () => {
it("keeps host-only generated registry state out of the container copy", () => {
const script = readFileSync(stageScriptPath, "utf8");
expect(script).toContain("--exclude=workspace");
expect(script).toContain("--exclude=sandboxes");
expect(script).toContain("--exclude=plugins/installs.json");
expect(script).toContain("host-absolute paths");
});
});