Skip to content

ci: [P2] 修正 Soak 的 OS/TFM 矩阵,避免 Ubuntu 执行 net48 #66

Closed

Description

@CSJ608

评审基线:StreamFrame 2.6.0,提交 4b892d9eaa11cf003b5d10793e735b0604bc17ed(2026-09-08 仓库评审)。

已确认问题

Soak workflow 只按 OS 分矩阵,但 dotnet test 未指定 -f,因此 Ubuntu 同时尝试 net8.0、net10.0、net48。最新运行已明确因 net48 找不到 mono host 而中止该目标。

位置:.github/workflows/soak.yml:23、.github/workflows/soak.yml:48。
参照常规 ci.yml / release.yml 的 Ubuntu net8/net10、Windows net48 策略,或显式展开适合长测的 OS×TFM 矩阵。

运行证据

2026-09-07 UTC 触发的 Soak,提交与评审基线一致
Ubuntu job

Test run .../net48/StreamFrame.Tests.dll (.NETFramework,Version=v4.8)
System.IO.FileNotFoundException: Could not find 'mono' host.
Test Run Aborted.

最近三次夜间运行均 failure,但不能把所有失败归因于矩阵:最新运行还包含 net8/net10 消息数量断言失败,另有调查项跟进。修正矩阵并不等同于长测稳定性已经通过。

验收

  • 每个 job 明确 OS 和 TFM;Ubuntu 不尝试启动 net48。
  • 保留 Windows 上真实 .NET Framework 运行验证;按长测成本决定现代 .NET 是否也保留 Windows 分支。
  • 日志、job 名和产物能定位到具体 TFM。
  • 手动短时演练与完整夜间长测均确认目标选择正确。
  • 构建/测试步骤的实际业务断言失败继续使 CI 失败。
  • 如果影响必需检查名,按 AGENTS.md 同步核查保护规则;不要无意改掉普通 ci.yml 检查名。

实施按 AGENTS.md:从最新 main 建分支、同步 CHANGELOG Unreleased、通过 Release build/test、走 PR;本 Issue 仅登记工作,不代表已实施修复。

关联调查:#67(消息计数失败与 net48 长测未收敛);修正本矩阵后仍需分别处理该项。

Activity

  1. CSJ608 commented on Sep 8, 2026

    @CSJ608
    OwnerAuthor

    开始 #66 的独立实施,分支 codex/ci-66-soak-tfm-matrix 基于最新 main 4b892d9。已重新核对正文、评论、现有 PR 与代码。

    将 Soak 展开为 Ubuntu net8.0/net10.0、Windows net8.0/net10.0/net48 五项矩阵;显式 -f,job 名及 TRX 产物标记 OS/TFM,保留断言失败退出。普通 ci.yml、业务测试、版本与 Dependabot 升级不在本 PR 修改范围。

    正在执行本地 Release build/test,随后开 PR 并手动短时演练。完整验收将跟踪合并后的首次夜间 600 秒运行;在该证据确认前保持 Issue 开放,并单列 #67 已知业务失败。

  2. CSJ608 commented on Sep 8, 2026

    @CSJ608
    OwnerAuthor

    #66 的矩阵修复已通过 PR #72 rebase 合并(1f647e5),实施分支已删除。普通 ci.yml 未改,PR 的两个 build-test、AOT、CodeQL 均通过;本地 Release build 与原样全量 test 复核通过(三目标各 101 项),首轮 net10 重连回归偶发失败已保留记录,未改断言。

    seconds=10 手动演练 的 Ubuntu net8/net10、Windows net8/net10 已通过;四份 TRX 均为三个测试实际各运行约 10 秒并通过。日志确认 Ubuntu 只启动指定现代 .NET 目标,无 net48/mono 错误。

    Windows net48 独立 job 已构建并进入 Soak tests (net48),目前仍未结束,没有把它记作通过。继续保存其终局证据,若不收敛则与 #67 分开记录,矩阵修复不代表长测业务稳定。

    验收继续,Issue 保持开放。 已安排自动跟踪短时运行结果及合并后的首次完整 scheduled 600 秒夜间运行(预计北京时间 9 月 9 日 03:00,04:15 回查)。完整目标选择证据到齐前不关闭 #66。

  3. CSJ608 commented on Sep 8, 2026

    @CSJ608
    OwnerAuthor

    短时演练终局已核验:run 34192673271 最终 cancelled。四个现代 .NET 组合成功;Windows net48 job 的 GitHub annotation 明确为超过 60 分钟执行上限。

    目标选择证据:命令包含 -f net48,环境为 STREAMFRAME_SOAK_SECONDS=10,实际测试程序集是 .NETFramework,Version=v4.8,xUnit 运行在 64-bit .NET Framework 4.8.9337.0。Soak_Chaos_RandomFaults_NoHangAndIntegrity 与 Soak_ReconnectRacing_LongRun 各约 10 秒通过;Soak_LongRun_MessageIntegrity 没有完成记录,日志不足以确定具体阻塞点。

    always() 上传步骤已执行,但报告 TestResults/windows-latest/net48/ 无文件,没有生成 net48 TRX;四个现代 .NET 的 TRX 已保存。超时取消没有被掩盖成成功,也不能当作“业务断言非零退出”的运行样本。不收敛现象留给 #67 调查,本任务不修改业务断言或扩大超时。

    合并后的 main CI 全部通过。#66 继续保持开放,等待首次 scheduled 600 秒夜间目标选择验收;回查已调整至北京时间 9 月 9 日 04:15,不额外重跑短时测试。

  4. CSJ608 commented on Sep 9, 2026

    @CSJ608
    OwnerAuthor

    #66 矩阵验收完成。修复 PR #72 已合并;首次完整夜间 34281733408 为 schedule,提交 9111919,实际于北京时间 9 月 9 日 05:38 创建,五项全部 success。

    • 每个 job 明确 OS/TFM:Ubuntu net8/net10,Windows net8/net10/net48;五份原始日志均只有指定 -f 测试目标,Ubuntu 无 net48/mono 启动错误。
    • Windows 真实 .NET Framework 保留:net48 job 实际运行 .NETFramework,Version=v4.8。
    • 日志、job、产物可定位 TFM:五份 OS/TFM artifact 和 TRX 全部下载核验,每份 3 executed / 3 passed / 0 failed。
    • 短时与完整夜间目标选择正确:原短时 34192673271 五目标启动正确;完整夜间五目标均 STREAMFRAME_SOAK_SECONDS=600,每目标三个测试实际各约 600 秒,合计 15/15 通过。
    • 失败传播保留:按运行提交核对 Build/Test 直接执行原生 dotnet 命令,无吞错或 continue-on-error;always() 仅作用于独立上传步骤。本次全绿,无业务断言失败样本,不声称运行过失败注入。此前真实超时保持 cancelled,未伪装成功。
    • 普通 ci.yml 未改名,保护规则只读核对匹配;本地 Release build/test、PR/main CI 已通过。

    归因边界:原短时 net48 超时和无 TRX 证据保留。本次夜间包含后续 PR #77 的业务协议与 net48 收尾修复;不能把长测转绿全部归因于 #66。#67 要求连续至少三次完整稳定性验收,由原任务继续跟踪,本次只关闭 #66 的矩阵问题。

    五份日志、五份 TRX、运行与产物元数据及逐项核验已保存至试运行结果目录,详见 issue-66-result.md 与 issue-66-night-verification.md。本任务停止自动验收跟踪,不额外触发长测。

  5. CSJ608 commented on Sep 9, 2026

    @CSJ608
    OwnerAuthor

    完整夜间矩阵验收完成(2026-09-09)

    scheduled run 34281733408,提交9111919a3fd52fb743041d14c3d150f3a57f4edb,实际北京时间05:38创建,06:11全部结束。

    • Ubuntu net8/net10、Windows net8/net10/net48五个job全部通过。
    • 逐job日志核对显式-f、实际运行时与STREAMFRAME_SOAK_SECONDS=600;Ubuntu只启动对应现代.NET,Windows net48真实运行于.NET Framework 4.8.9337.0。
    • 五份OS/TFM命名TRX均为3项执行、3项通过、0项跳过/失败;15项均实际运行约600秒。net48三项全部完成,不再缺TRX。
    • 已保存完整日志和五份产物;首次日志下载HTTP/2错误后重试成功,未重复运行测试。
    • 测试步骤保留原生失败退出路径,没有continue-on-error;本轮全部成功,不将本轮声称为“断言失败”的实测样本。

    结合此前短时验证,#66的目标矩阵和完整夜间目标选择验收已完成,可以关闭。#67仍独立跟踪连续三次完整稳定性,目前只计1/3,不能据此关闭#67。

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions