Community编程与开发github.com

OpenClaw CI 限制管理

管理 OpenClaw GitHub Actions 和 Blacksmith CI 容量、运行器注册预算、扇出上限、主推单次执行、分片大小、托管运行器卸载、队列健康以及安全的缩减/扩容变更。在调整 `.github/workflows/*`、`docs/ci.md`、CI 运行器标签、矩阵 `max-parallel`、ClawSweeper/Blacksmith 突发保护、CodeQL 运行器放置或调查缓慢/排队中的 OpenClaw CI 时使用。

OpenClaw CI 限制管理 是什么?

此技能用于管理 OpenClaw CI 基础设施的容量和限制,帮助开发者区分运行器注册瓶颈、Blacksmith 容量问题、工作流依赖等待以及真实测试失败。它提供了详细的预算计算指南,用于 Blacksmith 运行器注册,目标是将突发负载限制在可用注册桶的约 60%,以避免 GitHub 的速率限制。该技能还包括运行器成本政策,优先使用最小的可靠运行器,并将高内存工作流限制在特定的、经过验证的工作流上。此外,它还记录了被拒绝的实验,每个实验都有确凿的测量数据,以防止无效的优化,并提供了一套诊断命令和逐步指南来识别 CI 瓶颈。支持的平台包括 GitHub Actions 和 Blacksmith (ClawSweeper/Testbox)。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/.agents/skills/openclaw-ci-limits

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

OpenClaw CI 限制管理 是做什么的?

使用此技能处理 CI 容量变更,而非普通的测试失败分类。目标是保持 OpenClaw 快速运行,同时区分运行器注册、运行器可用性、Blacksmith 控制平面健康以及下游队列排空。

核心事实

  • 完整的主层级 CI 每小时运行一次;普通的主推运行 security-fast。一个绿色的推送并不能证明完整测试套件已通过。普通的 PR 会推迟 Windows、macOS Node/Swift、iOS 构建/模拟器、真实 Gateway UI、已发布驱动更新、Knip 以及大多数架构证明。导入循环和 Kysely 守卫仍然保持阻塞。使用 docs/ci/scope-and-routing/selection.md 和当前的 Manifest 进行精确的事件、所有者和发布回退选择;在调整容量时不要恢复被推迟的通道。Android 截图仍然是仅限发布的。
  • 不要假定稀缺资源。要证明压力是来自运行器注册、符合条件的运行器可用性、Blacksmith 容量/控制平面、工作流依赖、测试运行时还是下游队列写入器。
  • openclaw 的 GitHub 运行器注册当前在 actions_runner_registration 中报告每 5 分钟 10,000 个桶。每次调整前验证实时桶,因为 GitHub 可能会更改它。openclaw 组织共享一个桶。
  • 核心 REST 配额不会消耗此桶。分别检查 actions_runner_registration;核心配额可能是健康的,而运行器注册被限流。
  • 将大约 60% 的实时桶作为操作目标。在当前 10,000 注册桶的情况下,将计划的 Blacksmith 突发负载保持在每 5 分钟 6,000 注册以下,其余的留给其他仓库、重试和突发重叠。
  • 路由、通知、汇总、选择分片或运行短 CodeQL 质量扫描的任务应保留在 GitHub 托管运行器上,除非有测量证据表明 Blacksmith 是必需的。

运行器成本政策

  • 使用能够可靠完成所需工作量负载的最小运行器。将短控制任务保留在托管运行器上,并将普通的受信任开发证明保留在本地。
  • 将物理 8-vCPU 及更大的运行器视为例外,而非默认或通用重试。记录命令和测量到的峰值内存、较小运行器的 OOM,或显示较低总计费成本的受控比较。仅凭低 CPU 使用率并不能证明内存密集型任务可以下移。保留基于资源的 Worker 限制。
  • 常规 OpenClaw Testbox 使用 4 类,默认总任务时间(包括水化)为 60 分钟。保留 15 分钟的空闲上限。对于已知的短命令,欢迎使用更短的截止时间;不要自动请求 4 小时或仅为了获得更多时间而升级机器。仅在对指定的内存密集型命令进行命名时才选择 .github/workflows/ci-check-high-memory-testbox.yml;请参阅 docs/reference/test/remote-proof.md。该工作流在共享的 32 槽 Testbox 池内最多有四个并发租约。高内存配置文件使用 8 个 vCPU;两个配置文件都保留了其 11 月 3 日之前的物理 CPU 和 RAM。所有 Testbox 配置文件将空闲时间限制为 15 分钟。
  • 通过工作流 ref main 的当前 OpenClaw 包装器进行分配;源胶囊保留正在测试的检出。不要调度旧的工作流 ref 以绕过花费限制。在检出前检查队列年龄;已接纳的租约保留其任务和空闲截止时间。
  • 不要仅仅因为一个命令需要更多 RAM 而升级整个工作流系列。将已验证的高内存 CI 行保留在其所属的计划器和证据范围内;在更改其分配之前重新测量。32 类标签并不能证明有 32 个可用的 CPU。比较观察到的资源和总计费任务成本。

被拒绝的实验

  • UI 无 blob 稀疏检出 (2026-10-16): 排除原生移动/macOS 应用树移除了 48.31 MiB 的逻辑跟踪内容,但不被视为运行器成本改进。在 run 38866595993 中,Blacksmith UI E2E 检出耗时 56 秒,托管浏览器检出耗时 58 秒;同一运行中的完整 UI 检出耗时 22-38 秒。这些是小样本、未配对的样本,不是测量到的计费差异。保留完整源代码检出。只有在更低的完整检出时间和计费成本(包括过滤提取、惰性物化以及受信任的 Harness 导出)下才重新考虑;仅凭较少的逻辑字节并不能证明节省了成本。
  • 声明固定装置所有者选择 (2026-10-02): test/scripts/tsdown-declaration-fixture.ts 从其运行时入口点闭包派生真实的源代码副本,因此编辑其中一个的产品 PR 不会选择建立在其上的四个声明套件。PR #162614 以这种方式破坏了 write-unified-entry-dts;每小时计划的 CI (run 36979748808) 在合并后约 35 分钟捕获了它,并且 0a188c4f038f0 在一小时内修复了固定装置。将所有者声明为 new URL(..., import.meta.url) 字面量仅在激进选择的 20 导入器中心截止点以下到达套件:事件所有者和另外七个是中心点,因此重放的 #162614 diff 仍然没有选择任何套件。通过规范的 PR 计划器选项重放过去 30 天内所有接触所有者的 92 个主提交,URL 字面量新覆盖了 12 个(+35 行,+1,689 类 vCPU-分钟)。完全覆盖,例如对同一列表的策略监视,新为 81 个选择了套件,并为 69 个启动了 build-artifacts(在 12 个 PR 运行中,16 类上的中位数为 330 秒),因为套件是 ci-build-manifest.mjs 中的构建所有者:+242 行和 +11,628 类 vCPU-分钟,每个受影响的 PR 中位数 +161(+8%)。这换来了七周内一个逃脱的所有者破坏,因此保留普通路径;每小时计划的 CI、工具所有者 PR 和发布验证拥有此证明。只有在逃脱率显著提高或选择不会同时启动 build-artifacts 时才重新考虑。
  • 边界异步输入准备 (2026-09-26): 在三个声明/边界调用点添加现有的 CompilerInputSnapshot.prepare() 调用,将完整冷验证从 464.21 秒增加到 544.68 秒(相同的四 CPU/15.42 GiB Testbox);热验证从 12.62 秒增加到 14.63 秒。所有 125 个插件检查和金丝雀都通过了,但 CPU 使用率也增加了。删除了六个调用点添加。不要将其重复为假设的加速;任何不同的使用都需要测量到的端到端收益。
  • Windows pnpm store (2026-09-20): 来自 run 35547255790 的原始收据测量到完整设置的中位数时间为 45.295 秒(冷)对比 52.738 秒(恢复)(+16.4%),尽管重用了所有 1,453 个包且零下载。763.8 MiB 的存档需要 23.601-26.980 秒来恢复;生产者设置/保存增加了 62.527 秒。所有七个原生任务都通过了,但资格缩减器因 24 KiB 的报告 RAM 差异而失败。没有放宽任何断言或重新运行任务。精确 RAM 匹配的子集仍然慢了 11.3%;这是描述性证据,不能替代通过的资格。保持正常的 Windows 设置不被缓存。只有在净完整设置节省(包括恢复、提取、冻结协调和生产者工作)时才重新考虑。
  • 托管 Mac 精确依赖 (2026-09-01): run 33458856298 中的同头发布者和消费者成功保存并恢复了 1.66 GB 的依赖存档,但设置耗时 142 秒,而普通 store 缓存为 86 秒。提取耗时 82 秒对比 27 秒;安装仅从 43 秒改进到 35 秒。保持托管 Mac 任务使用普通 store 缓存。只有在测量到的总设置节省(包括传输、提取和冻结协调,而非成功的缓存命中)时才重新考虑。
  • Actions-artifact 检出 (2026-08-16): 不要推荐用预检产生的工作空间或 .git 工件替换共享的 Blacksmith Git 提取。PR #124818 测量到 Blacksmith 检出的基线为 16 秒,托管为 7 秒。最好的直接工件变体需要 1 秒打包、3 秒上传和 11 秒中位数恢复;包括串行前缀后仅剩约 1 秒的中位数改进,并且使 Blacksmith 的快速提取运行出现回归。官方的工件客户端更差:run 31971531521 测量到下载中位数为 22 秒,加上 2 秒物化。Blacksmith 的快速 Actions-cache 路径并不意味着快速的 Actions-artifact 下载。只有在针对不同传输(包括其生产者成本和快速提取回归)提供了测量到的端到端证明时才重新考虑。

初步检查

在更改 CI 之前,收集当前压力:

gh api rate_limit --jq '{core:.resources.core,graphql:.resources.graphql,search:.resources.search,actions_runner_registration:.resources.actions_runner_registration}'
gh run list -R openclaw/openclaw --limit 20 --json databaseId,status,conclusion,workflowName,event,headBranch,createdAt,updatedAt,url
gh run list -R openclaw/clawsweeper --limit 20 --json databaseId,status,conclusion,workflowName,event,headBranch,createdAt,updatedAt,url
gh api repos/openclaw/clawsweeper/actions/runs/<run-id>/jobs --paginate --jq '.jobs[] | {id,name,status,conclusion,labels,created_at,started_at,completed_at,runner_name,runner_group_name}'
blacksmith testbox list --all
curl -fsS https://clawsweeper.openclaw.ai/api/status | jq '{generated_at,fleet,diagnostics:{errors:.diagnostics.errors}}'
curl -fsS https://clawsweeper.openclaw.ai/api/exact-review-queue | jq '{generated_at,review:.lanes.review,publication:.lanes.publication,state_writer,state_append}'
node scripts/ci-run-timings.mjs --latest-main
node scripts/ci-run-timings.mjs --recent 10

对于可疑的排队运行,检查其任务。运行级别的 queued 状态并不能揭示任务是等待依赖项还是没有符合条件的运行器。比较 created_at、started_at、labels 和 runner_name。在取消之前,实时重新检查过时的排队运行;仅取消被证明已过时的运行。

Testbox warmup 确认租约创建,而非运行器就绪。不带 providerMetadata.runURL 的初始 queued 快照并不能确定容量短缺。使用该 URL 在关联后检查确切的工作流。已分配的 check 运行器执行设置是水化;确认的接纳或容量队列遵循现有的停止自有分配策略。不要从最新的工作流运行推断关联,也不要等待确认的容量队列。

scripts/ci-run-timings.mjs 的启动延迟可能包括工作流依赖等待加上运行器队列时间。它仅是趋势证据,而非单独的运行器压力证明。

阅读:

  • .github/workflows/ci.yml
  • .github/workflows/codeql-critical-quality.yml
  • docs/ci.md
  • test/scripts/ci-workflow-guards.test.ts
  • test/scripts/ci-workflow-planning.test.ts
  • test/scripts/ci-workflow-evidence.test.ts
  • 受影响的计划器文件,位于 scripts/lib/*ci*、scripts/lib/*test-plan* 或 scripts/ci-changed-scope.mjs 下

诊断瓶颈

在进行限流变更前,对问题进行分类:

  • 运行器注册限流: 许多任务在运行器分配之前排队,Blacksmith/GitHub 报告来自 generate-jitconfig 的 403/429 或垃圾邮件风格的 422 响应,并且 API 核心配额仍然健康。仅当请求负载在其他方面有效时,才将 422 视为此信号。修复突发性和 Blacksmith 任务数量。
  • Blacksmith 容量: Blacksmith 仪表盘显示实际并发上限或容量不可用。不要仅通过 GitHub 工作流扇出来解决此问题。
  • Blacksmith Testbox 控制平面: 列表、预热、状态或运行调用在返回租约之前超时。这与 Actions 运行器注册和 Actions 任务容量是分开的。受信任的源可能使用文档化的本地回退;不受信任的源保持阻塞。
  • 运行器标签不可用: 一个任务使用自定义的 runs-on 标签排队,started_at 和 runner_name 保持为空,并且没有符合条件的运行器存在。恢复可用的托管或已注册标签;扇出无法修复它。
  • 工作流依赖等待: 任务已排队但所需的前置条件尚未终止。修复或等待依赖关系;不要将整个延迟称为运行器队列压力。
  • OpenClaw 测试运行时: 任务快速启动,但一个通道占用了绝大部分壁钟时间。使用 $openclaw-test-performance 而非运行器调优。
  • 实际失败的 CI: 一个任务在启动后失败。使用 $github:gh-fix-ci 或 $openclaw-testing,而非此技能。
  • ClawSweeper 审查积压: 审查待处理/就绪增长,而发布和状态写入器保持健康。调整 openclaw/clawsweeper 中的审查接纳/Worker。
  • ClawSweeper 发布积压: 发布待处理/就绪和最老年龄增长,净排空为零或负值,或死信上升。首先检查发布批次、状态写入器协调和 GitHub 变更延迟。
  • 状态物化器/追加积压: state_append.pending_rows、pending_bytes 或最老年龄增长,而物化器排队或缺失。首先恢复该唯一的排空渠道;更多的审查 Worker 会使情况更糟。

注册预算计算

在编辑之前估算变更的最坏情况注册数:

新的 Blacksmith 注册数 ~= 在一个 5 分钟窗口内可能变为排队状态的 Blacksmith 任务数

对于矩阵任务,计算在 5 分钟窗口内可能启动的每一行。strategy.max-parallel 仅限制同时进行的行;短行可以周转并在窗口重置之前注册更多运行器。使用任务持续时间、重试和队列周转来证明任何更低估计的合理性。添加非矩阵 Blacksmith 任务,例如 preflight、security-fast、build-artifacts 和平台通道。

对于重复...

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills and agent Templates when requested; add Templates; install, verify, update, uninstall, publish, or sync skills.

相关技能