Skip to content

ci: [P2] 执行 NativeAOT 冒烟产物,并让消息校验失败返回非零退出码 #71

Description

@CSJ608

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

当前边界

目前 AOT job 只执行 dotnet publish,能证明发布/裁剪分析通过,不能证明生成的原生程序可以正确启动、连接、收发和退出。
位置:.github/workflows/ci.yml:108(文件末尾 AOT job)。
samples/StreamFrame.AotSmoke/Program.cs:1 中还存在:

  • 等待连接缺少整体期限;
  • 固定 Task.Delay(3000) 后检查收到数量;
  • 即使数量异常,仅 Console.WriteLine,进程仍正常退出。
    因此简单增加“运行二进制”步骤,也不足以成为可靠的运行验证。

建议与验收

  • PublishAot 成功后实际执行生成的 linux-x64 二进制。
  • 明确等待连接与收到三条消息的完成信号及超时,不以固定睡眠作为交付证据。
  • 接收不足、连接失败、后台消费故障等路径都以非零退出码结束;可控故障验证 job 真会变红。
  • 成功路径验证普通发送、会话绑定发送与接收结果;保证连接/任务正确停止。
  • 使用可用端口或健壮的端口选择,减少固定 19002 带来的冲突。
  • 继续保留裁剪/AOT 警告作为错误的编译门禁。
  • 文档区分“可发布”和“运行冒烟已通过”;关联 feat: 传输层抽象(serial / TLS)设计与实施计划(3.0 架构演进设计稿) #55 将来扩展传输时的 AOT 验证计划,不提前扩大本项范围。
  • 若决定将 AOT 升为必需检查,另外核对分支保护名称;本项不自动更改保护规则。

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

Activity

  1. CSJ608 commented on Sep 8, 2026

    @CSJ608
    OwnerAuthor

    已通过 PR #80 rebase 合并到 main:297450ffcab00977005907b78488af0f141eb8e3,实施分支已删除。

    • 发布后真实执行 linux-x64 NativeAOT 产物,3/3 消息、两次会话绑定发送和一次普通发送的顺序/内容校验成功。
    • 连接每次 5 秒、最多三次端口重选;消息整体 10 秒;正确收尾连接及观察任务,消息失败不重试。
    • 受控连接失败、少收、消费异常、内容错误均精确返回 1 并验证错误类别。少收确实收到 2/3,消费异常堆栈保留。正常运行非零直接失败;故障反证不接受退出 0、超时 124、启动失败或崩溃。
    • 本地 Release build 零警告/错误;Release tests:net8/net10 各 132 pass,net48 124 pass,各 3 个夜间 Soak 按设计 skip。
    • PR CI、main CI、main CodeQL 全绿。原生成功与四类预期非零证据见 main AOT 日志。未发生 CI 失败或重跑。

    AOT 仍为非必需检查,裁剪/AOT 警告继续作为错误;未修改分支保护或普通检查名称。文档已区分发布与运行验证,#55 未来传输扩展另行验收。

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

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions