Skip to content

CI: plugin-audit#test 在托管 runner 上确定性静默挂起(零输出 exit 1)——始于 #3045 落地后,main 侧问题 #3071

Description

@os-zhuang

现象

Test Core@objectstack/plugin-audit#test 仅在 GitHub 托管 runner 上失败,已三次完全一致地复现:

签名:vitest 连 RUN 头都未输出(整个任务组零输出),进程疑似挂起约 5 分钟、待任务图其余部分全部完成后才 exit 1(其 pnpm 的 ELIFECYCLE Test failed 散落在最后一秒的相邻日志组里)。turbo 汇总仅 Failed: @objectstack/plugin-audit#test

⚠️ main 当前的"绿"是假象:90f0a56/330ceba 等后续提交是纯文档/资产变更,被 filter job 的路径过滤跳过——main 的 Test Core 自 4f8c2d1 起实际处于未验证状态,任何触碰代码的 PR 都会撞上本问题(#3037 为等它绿灯耗费了 4 轮诊断,最终由维护者管理员合并)。

已排除(全部在 #3037 分支的合并树上验证)

假设 实验 结果
分支代码问题 main 4f8c2d1 独立复现;PR 未触及 plugin-audit 排除
Node 版本 本地 Node 20.20.2 与 22.22.2 各跑 38/38 排除
时区/locale/CI env TZ=UTC LANG=C.UTF-8 CI=true GITHUB_ACTIONS=true 38/38 排除
并发 OOM --concurrency=4 上限后同签名失败(该上限已随 #3037 保留,无害) 排除
命令差异 本地精确复现 TURBO_SCM_BASE=330ceba turbo run test --affected --concurrency=4:129/129 全过 排除
vitest 配置/依赖缺失 vitest devDep + .bin 均在;裸 vitest run --passWithNoTests 正常 排除
未 unref 定时器挂事件循环 #3045 的 TTL memo 是时间戳比较,无定时器 排除

时间线关联

问题首现于 #3045(plugin-audit 本地化摘要 + 新增 102 行测试)落地后的首次真实 CI 执行。其自身 CI 被后续推送取代(cancelled),从未绿过。

建议的下一步(一轮 CI 即可拿到真凭据)

在任一分支加临时诊断步骤单独执行:

pnpm --filter @objectstack/plugin-audit exec vitest run --reporter=verbose --no-file-parallelism

配合 timeout -s QUIT 120(SIGQUIT 触发 Node 打印各线程堆栈)可直接看到挂起点。怀疑方向:vitest forks 池在受限 cgroup 上的 worker 启动挂起,或 #3045 引入的模块图在 runner 环境的导入期死锁。

相关:#3060(plugin-dev 满负载偶发超时,另一个 CI 专属问题)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions