SuperAPI AI 工具集

azdo-build-investigator

部署与运维

查看项目

更新于 10-16 10:25

技能介绍

用途

azdo-build-investigator 是 dotnet/maui 仓库的 CI 调查技能(skill),为交互式 CI 排查提供 MAUI 专属上下文,主要回答两类问题:“CI 为什么是红的?”以及“这个 PR 可以合并了吗?”。它还与自动化路径配合:当维护者在 PR 上评论 /review tests 时,review-test-failures 技能会做同样的确定性分类,并发布合并就绪评论。

主要能力与依赖

该技能本身不承载全部事实,而是基于共享的权威文档。所有 MAUI 专属事实位于 .github/docs/maui-ci-facts.md,需要阅读该文档,其内容覆盖:

  • 流水线名称与定义 ID(maui-pr 302、maui-pr-devicetests 314、maui-pr-uitests 313)、组织/项目以及调查优先顺序。
  • AzDO 数据源(匿名的公开 build/timeline/log REST API;_apis/test 为可选补充)。
  • XHarness 退出码 0 盲区,以及用于发现隐藏设备测试失败的 Helix 聚合端点。
  • 容器产物 binlog(Bearer token + File Container API;mcp-binlog-tool)。
  • 测试计数去重(按测试名称 + 操作系统平台分组)。
  • 基线对比(失败是否在基线分支上已经为红)。
  • 视觉基线与平台不匹配的指导。
  • Gradle / Maven / CFSClean 特征签名与 ./eng/ingest-maven-deps.sh 修复。
  • 常见失败模式表。
  • 合并就绪判定标准——Ready to merge / Not ready / Needs human investigation / Insufficient data / No failures found 的共同定义。

注意:不要凭记忆复述这些事实;如需修改,只能在权威文档中修改。

使用方式

  1. 先调用 ci-analysis 技能,它负责核心调查工作流,使用 Get-CIStatus.ps1 和 gh CLI(如有 MCP 工具可作为可选增强)。
  2. 在其之上套用 .github/docs/maui-ci-facts.md 中的 MAUI 修正,尤其是正确的流水线名称、对 maui-pr-devicetests 的 XHarness 退出码 0 交叉校验,以及测试计数去重。
  3. 当被问及 PR 是否可合并时,将失败与基线分支对比,并应用权威文档中的合并就绪判定标准。
  4. 升级:对于深入的 Helix 日志分析(反复出现的失败、机器相关问题、对比通过运行与失败运行),升级到 helix-investigation 技能。
  5. 当 CI 尚未运行时:社区 PR 需要维护者触发构建,参见权威文档。

脚本位置:ci-analysis 技能及其 Get-CIStatus.ps1 脚本由 dotnet/arcade-skills 插件自动加载(在 .github/copilot/settings.json 中通过 enabledPlugins 配置)。CLI 将脚本缓存到 ~/.copilot/installed-plugins/dotnet-arcade-skills/,无需手动下载。

注意:ci-analysis 技能的参考文档将 maui-public 列为 MAUI 流水线——这已过时。请使用 .github/docs/maui-ci-facts.md 中的流水线名称。

夜间 / 官方签名构建(inflight dogfood 订阅源)

当被问及夜间构建、inflight 订阅源或 dogfood 订阅源损坏/过期时(例如“nightly 坏了请修复”“dogfood 订阅源停止更新”,或 release-readiness 的 ❌ 过期横幅触发),要调查的流水线不是 maui-pr,而是官方签名构建:

  • 流水线:dotnet-maui
  • 定义 ID:1095
  • 组织/项目:dnceng / internal——需要内部访问权限(不是 PR 流水线使用的匿名 dnceng-public 组织)
  • 定义文件:eng/pipelines/ci-official.yml
  • 计划:在 main、net*.0 和 inflight/current 上每日 cron 0 5 * * *(05:00 UTC)
  • 订阅源:供给 ci.inflight dogfood NuGet 流——inflight/current 上的官方构建产出 release-readiness 跟踪的“下一个发布”位。该构建为红时,订阅源会过期,release-readiness 横幅变为 ❌。

调查步骤(AzDO MCP 工具接受该内部流水线——传入 org: dnceng, project: internal):

  1. azdo_builds,definitionId: 1095,branch: refs/heads/inflight/current → 找到最新的失败运行(并确认是一次性问题还是多日连续)。
  2. 对该构建执行 azdo_search_timeline(过滤 failed)→ 定位失败的 job/step 及其 logId。
  3. 对 logId 执行 azdo_search_log → 获取实际错误。

已知失败面:最常见的夜间构建中断是 Pack Windows job 的 “Build Workloads, Sign & Publish” 步骤(eng/pipelines/arcade/stage-pack.yml,构建 src/Workload/workloads.csproj)。反复出现的签名:

src\Workload\workloads.csproj(30,3): error MSB4019: The imported project
"...\artifacts\packages\Release\Shipping\vs-workload.props" was not found

vs-workload.props 由 src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Microsoft.NET.Sdk.Maui.Manifest.csproj 中的 _GenerateVSWorkloadProps 目标(AfterTargets="Build")在前置的 Pack, Sign 步骤期间生成,随后由 workloads.csproj 导入。如果导入时缺失,说明 manifest pack 没有把它暂存到 ArtifactsShippingPackagesDir。注意 macOS Pack job 可能成功而 Pack Windows 失败——macOS 分支为绿并不意味着 dogfood 订阅源健康。

2026 年 6 月 inflight/current 中断的根因(binlog 证实,由 #36089 修复):workload pack(Microsoft.NET.Sdk.Maui.Manifest、Microsoft.Maui.Sdk)目标为 netstandard 但属于发布包,因此显式设置 <IsPackable>true</IsPackable>。PR #32203(“Don't pack .NET Standard”)在 Directory.Build.targets 中添加了笼统的 <IsPackable Condition="$(TargetFramework.Contains('netstandard'))">false</IsPackable>——由于该文件在每个项目末尾自动导入,覆盖了 pack 的显式 true → IsPackable=false。IsPackable=false 时 NuGet Pack 不执行;又因为 “Pack, Sign” 步骤运行 -pack 而没有 -build(只有后面的 workloads 步骤使用 -build),Build 目标从未运行 → _GenerateVSWorkloadProps(AfterTargets="Build")从未运行 → vs-workload.props 从未写入 → 第 30 行导入抛出 MSB4019。修复方式是用 and '$(IsPackable)' == '' 保护笼统规则,使显式 opt-in 得以保留。该回归仅存在于 inflight/current(#32203 的提交 543b1ebeb7 尚未进入 main/net10.0)——因此当它向前移植时必须带上该保护,否则中断会重现。排查此失败的一般教训:确认 pack.binlog 中 workload pack 的 IsPackable 确实求值为 true,并确认 pack 步骤的 Build(进而 _GenerateVSWorkloadProps)确实运行过。

与发布流水线区分:ci-official-release.yml 用于正式发布,不是夜间 inflight dogfood 构建。

适用场景

适用于 dotnet/maui 仓库的维护者或贡献者,在需要诊断 PR CI 状态、判断合并就绪性、分析 Helix 测试日志或 binlog,以及排查夜间/官方签名构建与 dogfood 订阅源问题时使用。

限制

  • 需配合 ci-analysis 技能使用,后者提供核心调查工作流。
  • 夜间/官方签名构建的调查需要 dnceng/internal 的内部访问权限。
  • 深入的 Helix 日志分析需升级到 helix-investigation 技能。
  • 社区 PR 在 CI 未运行时需要维护者触发构建。