























@@ -51,6 +51,25 @@ function summarizeLane(lane: ReturnType<typeof planFor>["lanes"][number]) {
5151};
5252}
535354+function publishedUpgradeSurvivorLane(
55+name: string,
56+baselineSpec: string,
57+scenario?: string,
58+): ReturnType<typeof summarizeLane> {
59+return {
60+command: `OPENCLAW_UPGRADE_SURVIVOR_ARTIFACT_DIR="$PWD/.artifacts/upgrade-survivor/${name}" OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC='${baselineSpec}' ${
61+ scenario ? `OPENCLAW_UPGRADE_SURVIVOR_SCENARIO='${scenario}' ` : ""
62+ }OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:published-upgrade-survivor`,
63+imageKind: "bare",
64+live: false,
65+ name,
66+resources: ["docker", "npm"],
67+stateScenario: "upgrade-survivor",
68+timeoutMs: 1_500_000,
69+weight: 3,
70+};
71+}
72+5473describe("scripts/lib/docker-e2e-plan", () => {
5574it("plans the full release path against package-backed e2e images", () => {
5675const plan = planFor({
@@ -402,33 +421,14 @@ describe("scripts/lib/docker-e2e-plan", () => {
402421"openclaw@2026.4.29 2026.4.23 openclaw@2026.4.23 openclaw@2026.3.13-1",
403422});
404423405-expect(plan.lanes.map((lane) => lane.name)).toEqual([
406-"published-upgrade-survivor-2026.4.29",
407-"published-upgrade-survivor-2026.4.23",
408-"published-upgrade-survivor-2026.3.13-1",
409-]);
410-expect(plan.lanes).toEqual([
411-expect.objectContaining({
412-command: expect.stringContaining(
413-"OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC='openclaw@2026.4.29'",
414-),
415-imageKind: "bare",
416-stateScenario: "upgrade-survivor",
417-}),
418-expect.objectContaining({
419-command: expect.stringContaining(
420-"OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC='openclaw@2026.4.23'",
421-),
422-}),
423-expect.objectContaining({
424-command: expect.stringContaining(
425-"OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC='openclaw@2026.3.13-1'",
426-),
427-}),
424+expect(plan.lanes.map(summarizeLane)).toEqual([
425+publishedUpgradeSurvivorLane("published-upgrade-survivor-2026.4.29", "openclaw@2026.4.29"),
426+publishedUpgradeSurvivorLane("published-upgrade-survivor-2026.4.23", "openclaw@2026.4.23"),
427+publishedUpgradeSurvivorLane(
428+"published-upgrade-survivor-2026.3.13-1",
429+"openclaw@2026.3.13-1",
430+),
428431]);
429-expect(requireFirstLane(plan).command).toContain(
430-'OPENCLAW_UPGRADE_SURVIVOR_ARTIFACT_DIR="$PWD/.artifacts/upgrade-survivor/published-upgrade-survivor-2026.4.29"',
431-);
432432});
433433434434it("expands the published upgrade survivor lane across scenarios", () => {
@@ -438,30 +438,38 @@ describe("scripts/lib/docker-e2e-plan", () => {
438438upgradeSurvivorScenarios: "base feishu-channel tilde-log-path",
439439});
440440441-expect(plan.lanes.map((lane) => lane.name)).toEqual([
442-"published-upgrade-survivor-2026.4.29",
443-"published-upgrade-survivor-2026.4.29-feishu-channel",
444-"published-upgrade-survivor-2026.4.29-tilde-log-path",
445-"published-upgrade-survivor-2026.4.23",
446-"published-upgrade-survivor-2026.4.23-feishu-channel",
447-"published-upgrade-survivor-2026.4.23-tilde-log-path",
441+expect(plan.lanes.map(summarizeLane)).toEqual([
442+publishedUpgradeSurvivorLane(
443+"published-upgrade-survivor-2026.4.29",
444+"openclaw@2026.4.29",
445+"base",
446+),
447+publishedUpgradeSurvivorLane(
448+"published-upgrade-survivor-2026.4.29-feishu-channel",
449+"openclaw@2026.4.29",
450+"feishu-channel",
451+),
452+publishedUpgradeSurvivorLane(
453+"published-upgrade-survivor-2026.4.29-tilde-log-path",
454+"openclaw@2026.4.29",
455+"tilde-log-path",
456+),
457+publishedUpgradeSurvivorLane(
458+"published-upgrade-survivor-2026.4.23",
459+"openclaw@2026.4.23",
460+"base",
461+),
462+publishedUpgradeSurvivorLane(
463+"published-upgrade-survivor-2026.4.23-feishu-channel",
464+"openclaw@2026.4.23",
465+"feishu-channel",
466+),
467+publishedUpgradeSurvivorLane(
468+"published-upgrade-survivor-2026.4.23-tilde-log-path",
469+"openclaw@2026.4.23",
470+"tilde-log-path",
471+),
448472]);
449-expect(plan.lanes).toEqual(
450-expect.arrayContaining([
451-expect.objectContaining({
452-command: expect.stringContaining("OPENCLAW_UPGRADE_SURVIVOR_SCENARIO='feishu-channel'"),
453-}),
454-expect.objectContaining({
455-command: expect.stringContaining("OPENCLAW_UPGRADE_SURVIVOR_SCENARIO='tilde-log-path'"),
456-}),
457-]),
458-);
459-expect(
460-plan.lanes.find((lane) => lane.name === "published-upgrade-survivor-2026.4.29-tilde-log-path")
461-?.command,
462-).toContain(
463-'OPENCLAW_UPGRADE_SURVIVOR_ARTIFACT_DIR="$PWD/.artifacts/upgrade-survivor/published-upgrade-survivor-2026.4.29-tilde-log-path"',
464-);
465473});
466474467475it("expands reported upgrade issue scenarios", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。