快速结论:当 Dify Web CI 在测试或构建开始前,因重复从 nodejs.org 下载固定版本的 Node.js 运行时出现失败时,优先排查 CI 中 Node.js 的安装方式;本 Issue 最终通过改用 actions/setup-node 安装 Node.js 解决,无需额外引入 runtime-store 缓存。
适用环境:GitHub Actions 上的 Dify 仓库 Web CI;问题涉及 pnpm 安装 Node.js 运行时、Node.js 与 pnpm 版本固定、Vite+ 缓存步骤,以及工作流缓存权限(contents: read、缓存 access mode)。Issue 未确认具体操作系统、Python、CUDA、显卡或依赖版本。
最快修复方案:将共享 web bootstrap 中通过 pnpm 下载 Node.js 的方式替换为 actions/setup-node 安装固定版本 Node.js,并保留原有 Node.js/pnpm 版本、依赖检查及测试覆盖率阈值。
注意事项:该修复仅改变 CI 下载 Node.js 的方式,缓存未命中时仍需从上游下载运行时,缓存本身不能修复上游下载服务故障。Issue 中提出的 runtime-store 缓存方案未采用,相关 PR #44959 已作为被取代方案关闭。
问题场景
Dify 仓库的 Web CI 在启动阶段会先通过 pnpm 安装 Node.js,然后再进入 Vite+ 缓存步骤。由于每次都需要从 nodejs.org 下载固定版本的 Node.js 运行时,在测试或构建真正开始之前,就可能因下载重试、超时或响应体不完整而失败。
Issue 曾计划在部分 Web CI job 中复用固定的 Node.js 运行时下载,并配合最小权限缓存访问;目标是在不改变 Node.js、pnpm 版本和测试覆盖率要求的前提下,减少重复下载。最终该方案被更简单的做法取代。
报错原文
[Refactor/Chore] Reuse Node runtime downloads in web CI with least-privilege cache access
retried the runtime tarball download, then failed with timeouts and an incomplete response body
原因分析
最可能的原因是:当前 Web bootstrap 在 Vite+ 缓存步骤之前,先通过 pnpm 安装 Node.js,导致每个相关 CI job 都要单独从 nodejs.org 下载运行时 tarball。当上游下载服务出现超时或响应不完整时,job 会在测试和构建开始前就失败。
Issue 中提到的缓存方案主要用于减少重复下载,而不是修复上游下载服务;因此即使设计缓存,缓存未命中时仍会回到原始下载路径。
环境排查
- 确认 Web CI 中 Node.js 的安装位置:是由 pnpm 安装,还是由
actions/setup-node安装。 - 确认 Node.js 与 pnpm 的固定版本是否与仓库原有配置一致。
- 确认 Vite+ 缓存步骤与 Node.js 安装步骤的先后顺序。
- 确认 CI job 的缓存权限设置,包括是否使用
contents: read、缓存 access mode 是否为只读消费。 - 确认缓存准备 job 是否仅运行在可信的主分支代码上,且没有恢复旧缓存条目。
- 确认发布评论、release 或其他写操作 artifact 的 job 是否独立于依赖缓存恢复和仓库脚本执行。
- 如仍出现下载失败,检查失败是否发生在 nodejs.org 下载阶段,而不是依赖安装或测试阶段。
解决步骤
- 定位共享 web bootstrap 中通过 pnpm 安装 Node.js 的步骤。
- 将该安装方式改为使用
actions/setup-node,并按仓库原有配置指定固定 Node.js 版本。 - 保留原有 pnpm 版本、依赖检查、测试与覆盖率阈值,不做额外放宽。
- 保持 pnpm store 复用为可选(opt-in),不要让现有共享 setup 调用方默认启用 runtime-store 缓存。
- 不引入 PAT、OIDC 权限或仓库写权限用于缓存;缓存准备与消费使用
contents: read和显式缓存访问模式。 - 将缓存准备限制在可信主分支代码,并避免在该准备 job 中恢复更早的缓存条目。
- 确保消费缓存的 job 在 job token 层面为只读;不要只依赖 action 的 save-cache 开关。
- 将 bundle report 计算与 PR 评论发布拆开,使发布 job 不执行仓库脚本、也不恢复依赖缓存。
- 增加针对权限边界的检查,并运行工作流验证。
验证方法
重新触发 Web CI 后,确认 Node.js 由 actions/setup-node 安装,且不再出现由 pnpm 运行时下载器引起的 nodejs.org tarball 重试、超时或响应体不完整错误;同时确认测试、构建和覆盖率阈值仍正常通过。由于该修复已通过 #44976 合并,可直接查看合并后的共享 web bootstrap 是否已不再使用 pnpm 下载 Node.js 运行时。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![RuntimeError: [.../gloo/transport/tcp/pair.cc:553] Connection closed by peer [::1]:46193. ...](https://www.chat-gpts.plus/wp-content/uploads/2026/10/57423-7f3ad08d-768x403.jpg)
