fix(scripts): dedupe docker lane resources · openclaw/openclaw@5e94469
vincentkoc
·
2026-05-25
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -19,6 +19,7 @@ Docs: https://docs.openclaw.ai
|
19 | 19 | - Slack: keep downloaded read-only files out of reply media so Slack file reads do not echo files back to the conversation. (#86318) Thanks @neeravmakwana. |
20 | 20 | - Cron: accept leading-plus relative durations such as `+5m` for one-shot `--at` schedules. (#86341) Thanks @mushuiyu886. |
21 | 21 | - Agents/media: preserve async-started media tool metadata so background generation starts no longer surface generic incomplete-turn warnings while replay stays unsafe. (#85933) Thanks @fuller-stack-dev. |
| 22 | +- Docker E2E: dedupe scheduler lane resources so npm/service package lanes are not over-counted and serialized unnecessarily. |
22 | 23 | - xAI/LM Studio: avoid buffering ordinary bracketed or `final` prose until stream completion while watching for plain-text tool-call fallbacks. |
23 | 24 | - Discord: suppress a bot's previous reply body and referenced media from prompt context when a user replies to that bot message, while keeping reply metadata for routing. (#86238) Thanks @fuller-stack-dev. |
24 | 25 | - Docker E2E: avoid rebuilding the Control UI twice while preparing the shared OpenClaw package tarball for package-backed scenario runs. |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -290,7 +290,7 @@ export function laneWeight(poolLane) {
|
290 | 290 | } |
291 | 291 | |
292 | 292 | export function laneResources(poolLane) { |
293 | | -return ["docker", ...(poolLane.resources ?? [])]; |
| 293 | +return [...new Set(["docker", ...(poolLane.resources ?? [])])]; |
294 | 294 | } |
295 | 295 | |
296 | 296 | export function laneSummary(poolLane) { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -771,6 +771,23 @@ describe("scripts/lib/docker-e2e-plan", () => {
|
771 | 771 | expect(plan.needs.package).toBe(true); |
772 | 772 | }); |
773 | 773 | |
| 774 | +it("dedupes scheduler resources from lane wrappers and explicit lane metadata", () => { |
| 775 | +const plan = planFor({ |
| 776 | +selectedLaneNames: ["release-user-journey", "release-plugin-marketplace"], |
| 777 | +}); |
| 778 | + |
| 779 | +expect(plan.lanes.map((lane) => ({ name: lane.name, resources: lane.resources }))).toEqual([ |
| 780 | +{ |
| 781 | +name: "release-user-journey", |
| 782 | +resources: ["docker", "npm", "service"], |
| 783 | +}, |
| 784 | +{ |
| 785 | +name: "release-plugin-marketplace", |
| 786 | +resources: ["docker", "npm"], |
| 787 | +}, |
| 788 | +]); |
| 789 | +}); |
| 790 | + |
774 | 791 | it("plans the Droid ACP bind live lane as Factory-auth proof", () => { |
775 | 792 | const plan = planFor({ selectedLaneNames: ["live-acp-bind-droid"] }); |
776 | 793 | |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。