mcpField
F
flutter-pr-checks-finder

flutter-pr-checks-finder

github.com/flutter测试与质量180.5k102 次安装今天更新
代码仓库

关于 flutter-pr-checks-finder

面向 Flutter 贡献者的工作流技能,用于查找拉取请求中的失败检查并获取完整 LUCI 日志,也提供定位确切步骤名称的指引。

主要功能

  1. 01查找失败的 PR 检查
  2. 02获取原始 LUCI 日志
  3. 03处理分页检查运行记录
  4. 04将构建器映射到步骤名称

适用场景

  1. 01排查 Flutter 拉取请求失败
  2. 02获取检查摘要之外的完整 CI 输出

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/flutter/flutter --skill flutter-pr-checks-finder

安装后在 Claude Code 中输入/flutter-pr-checks-finder确认已加载。

详细介绍

Flutter PR 检查查找器

前提条件

  • 必须安装并完成身份验证的 gh(GitHub CLI)。如果它不在 PATH 中,请检查常见位置,例如 macOS 上的 /opt/homebrew/bin/gh,或 Windows 上的 C:\Program Files\GitHub CLI\gh.exe。
  • 可以使用 curl 或类似工具从 LUCI 获取原始日志。

工作流

1. 查找失败的检查

如果已安装并完成身份验证,可以使用 gh CLI;否则,可以通过直接向 GitHub API 发送 HTTP 请求作为备用方案。

选项 A:使用 gh CLI(首选)

运行以下命令以列出检查:

gh pr checks <PR_NUMBER>
选项 B:通过 HTTP 使用 GitHub API

如果无法使用 gh,可以使用 read_url_content 或类似方法与公开的 GitHub API 交互:

  1. 查找 PR SHA: 向以下地址发送 HTTP 请求:https://api.github.com/repos/flutter/flutter/pulls/<PR_NUMBER> 提取 head.sha 字段。
  2. 列出检查运行记录: 向以下地址发送 HTTP 请求:https://api.github.com/repos/flutter/flutter/commits/<PR_SHA>/check-runs 解析 JSON 响应。重要:必须处理分页,以免遗漏失败项!检查 total_count 字段。如果其值大于 check_runs 数组中的项目数(通常最多为 100,或不超过你通过 per_page 设置的数量),则需要通过在 URL 后附加 ?per_page=100&page=<N>,针对后续各页发送更多 HTTP 请求,直到获取所有检查运行记录。找出所有失败的检查(即 conclusion 为 failure 的检查)。

找出所有失败的检查。

2. 获取失败日志

对于每个失败的检查:

  1. 查找日志 URL:

    • 查找与该检查关联的目标 URL 或链接。
    • flutter-dashboard 链接通常显示为 GitHub 检查视图底部的“在 flutter-dashboard 上查看更多详情”。
    • 也可以根据失败检查的名称和构建编号(如果有)重建 LUCI 页面链接。 LUCI URL 结构示例:https://ci.chromium.org/ui/p/flutter/builders/try/<Builder Name>/<Build Number>/overview
  2. 构建原始日志 URL:

    • 手动操作:在日志 URL 后附加 ?format=raw,或按以下模式构建原始日志 URL:https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/<Build ID>/+/u/<Step Name>/stdout?format=raw
  3. 获取原始日志:

    • 使用 curl 或类似工具获取原始日志 URL 的内容。
    • 重要:必须使用原始日志 URL,以避免 HTML 格式和输出截断。不要只依赖 GitHub API 中的检查摘要,因为摘要可能被截断或缺少完整上下文。
构建器与步骤名称的对应关系

说明

步骤名称可能非常具体且难以猜测。本节记录了一些模式,可帮助查找这些名称。

配方与工具
  • flutter_drone 配方

    • 说明: 源自 cocoon 或 recipes 仓库。它通常用于运行分片框架测试和代码检查(如 analyze、test_general),具体配置见 .ci.yaml(根目录)。
    • 模式: run test.dart for <shard> shard and subshard <subshard>
    • URL 转换: 空格会替换为下划线。
    • 默认值: 如果未指定 subshard,则默认为 None。
    • 示例: 对于 Linux analyze(分片:analyze,无子分片),URL 步骤名称为 run_test.dart_for_analyze_shard_and_subshard_None。
  • builder.py 和相关配方

    • 说明: 位于 flutter/engine 仓库(或 recipes 仓库)中,用于根据 builders 文件夹目录中的目标 JSON 配置执行构建和测试。
    • 模式: 通常是 JSON 配置中指定的任务名称,前面常带有 test: 。
    • URL 转换: 空格会替换为下划线。
    • 注意事项: 如果 JSON 文件中的测试名称已经以 test: 开头,配方仍可能再次添加此前缀(例如 test:_test:_Check_formatting)。
  • tester.py

    • 说明: 引擎 CI 配方中常用的辅助脚本,用于执行测试。
    • 模式: Run <shard> tests 或 Run <shard> <subshard> tests。
    • URL 转换: 空格会替换为下划线。
在引擎中查找确切名称

如果猜测失败,请在引擎配置中查找确切的测试和任务名称:

  1. 在 .ci.yaml(引擎)中查找构建器,找到其 config_name 属性。
  2. 在 builders 文件夹目录中找到对应的 JSON 文件。
  3. 阅读 JSON 文件,查找 tests 数组及其中列出的具体 tasks。
备用方案

如果 read_url_content 对猜测的步骤名称返回 404,你可能需要从 LUCI 概览页面或其他来源查找步骤名称。

评论

支持 Markdown