

























@@ -705,6 +705,7 @@ describe("scripts/lib/docker-e2e-plan", () => {
705705{ credentials: ["factory"], name: "live-acp-bind-droid" },
706706{ credentials: ["gemini"], name: "live-acp-bind-gemini" },
707707{ credentials: ["opencode"], name: "live-acp-bind-opencode" },
708+{ credentials: ["openai", "telegram"], name: "npm-telegram-live" },
708709] as const;
709710710711for (const { credentials, name } of cases) {
@@ -836,6 +837,52 @@ describe("scripts/lib/docker-e2e-plan", () => {
836837expect(plan.needs.liveImage).toBe(true);
837838});
838839840+it("plans Docker package scripts that were previously only directly runnable", () => {
841+const plan = planFor({
842+selectedLaneNames: ["browser-cdp-snapshot", "multi-node-update", "npm-telegram-live"],
843+});
844+845+expect(plan.credentials).toEqual(["openai", "telegram"]);
846+expect(plan.lanes.map(summarizeLane)).toEqual([
847+{
848+command: "pnpm test:docker:browser-cdp-snapshot",
849+imageKind: "functional",
850+live: false,
851+name: "browser-cdp-snapshot",
852+resources: ["docker", "service"],
853+stateScenario: "empty",
854+timeoutMs: 1_200_000,
855+weight: 3,
856+},
857+{
858+command: "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:multi-node-update",
859+imageKind: "bare",
860+live: false,
861+name: "multi-node-update",
862+resources: ["docker", "npm"],
863+stateScenario: "empty",
864+timeoutMs: 900_000,
865+weight: 3,
866+},
867+{
868+command: "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-telegram-live",
869+imageKind: "bare",
870+live: true,
871+name: "npm-telegram-live",
872+resources: ["docker", "live", "live:openai", "live:telegram", "npm", "service"],
873+timeoutMs: 1_800_000,
874+weight: 3,
875+},
876+]);
877+expect(plan.needs).toEqual({
878+bareImage: true,
879+e2eImage: true,
880+functionalImage: true,
881+liveImage: true,
882+package: true,
883+});
884+});
885+839886it("plans Open WebUI as a live-auth functional image lane", () => {
840887const plan = planFor({
841888includeOpenWebUI: true,
@@ -877,6 +924,7 @@ describe("scripts/lib/docker-e2e-plan", () => {
877924selectedLaneNames: [
878925"onboard",
879926"agents-delete-shared-workspace",
927+"browser-cdp-snapshot",
880928"doctor-switch",
881929"openai-image-auth",
882930"openai-web-search-minimal",
@@ -894,6 +942,7 @@ describe("scripts/lib/docker-e2e-plan", () => {
894942"kitchen-sink-rpc",
895943"bundled-plugin-install-uninstall-0",
896944"commitments-safety",
945+"multi-node-update",
897946"update-channel-switch",
898947"skill-install",
899948"upgrade-survivor",
@@ -905,6 +954,7 @@ describe("scripts/lib/docker-e2e-plan", () => {
905954).toEqual([
906955{ name: "onboard", stateScenario: "empty" },
907956{ name: "agents-delete-shared-workspace", stateScenario: "empty" },
957+{ name: "browser-cdp-snapshot", stateScenario: "empty" },
908958{ name: "doctor-switch", stateScenario: "empty" },
909959{ name: "openai-image-auth", stateScenario: "empty" },
910960{ name: "openai-web-search-minimal", stateScenario: "empty" },
@@ -922,6 +972,7 @@ describe("scripts/lib/docker-e2e-plan", () => {
922972{ name: "kitchen-sink-rpc", stateScenario: "empty" },
923973{ name: "bundled-plugin-install-uninstall-0", stateScenario: "empty" },
924974{ name: "commitments-safety", stateScenario: "empty" },
975+{ name: "multi-node-update", stateScenario: "empty" },
925976{ name: "update-channel-switch", stateScenario: "update-stable" },
926977{ name: "skill-install", stateScenario: "empty" },
927978{ name: "upgrade-survivor", stateScenario: "upgrade-survivor" },
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。