fix(release): omit unavailable candidate Docker scripts (#116432)

* fix(release): omit unavailable candidate Docker scripts

* fix(docker): fail on unreadable candidate manifest

* fix(docker): expose candidate planner option
This commit is contained in:
Dallin Romney
2026-07-31 14:18:18 +08:00
committed by GitHub
parent 2aabde7262
commit d24cdea7ec
5 changed files with 117 additions and 2 deletions

View File

@@ -168,6 +168,7 @@ describe("scripts/test-docker-all scheduler", () => {
const scriptsDir = path.join(root, "scripts");
const libDir = path.join(scriptsDir, "lib");
mkdirSync(libDir, { recursive: true });
copyFileSync("package.json", path.join(root, "package.json"));
copyFileSync("scripts/test-docker-all.mjs", path.join(scriptsDir, "test-docker-all.mjs"));
for (const fileName of ["docker-e2e-plan.mjs", "docker-e2e-scenarios.mjs", "sleep.mjs"]) {
copyFileSync(path.join("scripts/lib", fileName), path.join(libDir, fileName));

View File

@@ -54,6 +54,12 @@ function planFor(
}).plan;
}
function writeCandidatePackage(scripts: Record<string, string>): string {
const root = tempDirs.make("openclaw-docker-plan-candidate-");
writeFileSync(join(root, "package.json"), JSON.stringify({ scripts }));
return root;
}
function requireFirstLane(plan: ReturnType<typeof planFor>) {
const [lane] = plan.lanes;
if (!lane) {
@@ -120,6 +126,47 @@ function bundledPluginSweepLane(index: number): ReturnType<typeof summarizeLane>
}
describe("scripts/lib/docker-e2e-plan", () => {
it("omits a package-script lane unavailable from the candidate", () => {
const plan = planFor({
candidatePackageRoot: writeCandidatePackage({}),
selectedLaneNames: ["update-run-package-self-upgrade"],
});
expect(plan.lanes).toEqual([]);
});
it("keeps a package-script lane available from the candidate", () => {
const plan = planFor({
candidatePackageRoot: writeCandidatePackage({
"test:docker:update-run-package-self-upgrade": "node test.mjs",
}),
selectedLaneNames: ["update-run-package-self-upgrade"],
});
expect(plan.lanes.map((lane) => lane.name)).toEqual(["update-run-package-self-upgrade"]);
});
it("fails when the selected candidate package manifest is missing", () => {
expect(() =>
planFor({
candidatePackageRoot: tempDirs.make("openclaw-docker-plan-missing-package-"),
selectedLaneNames: ["update-run-package-self-upgrade"],
}),
).toThrow(/package\.json/);
});
it("fails when the selected candidate package manifest is malformed", () => {
const root = tempDirs.make("openclaw-docker-plan-malformed-package-");
writeFileSync(join(root, "package.json"), "{");
expect(() =>
planFor({
candidatePackageRoot: root,
selectedLaneNames: ["update-run-package-self-upgrade"],
}),
).toThrow(SyntaxError);
});
it("finds a named lane through the expanded catalog", () => {
expect(findLaneByName("plugin-binding-command-escape")?.name).toBe(
"plugin-binding-command-escape",