mcpField
A
analyze-github-flake

analyze-github-flake

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

关于 analyze-github-flake

analyze-github-flake 是用于分析 Flutter GitHub 仓库中 flaky 检查的技能。它汇总构建日志并按失败类型归类,只提供高层分析,不修改文件或定位 flutter/ 内部根因。

主要功能

  1. 01筛选符合条件的 flaky issue
  2. 02提取 issue 和评论中的构建链接
  3. 03检查构建日志
  4. 04按失败类型归类汇总
  5. 05仅提供高层分析,不修改文件

适用场景

  1. 01梳理 flaky issue 涉及的失败构建
  2. 02汇总多个构建日志中的失败类型

安装

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

$npx skills add https://github.com/flutter/flutter --skill analyze-github-flake

安装后在 Claude Code 中输入/analyze-github-flake确认已加载。

详细介绍

Flake 分析说明

规则 你不得修改任何文件——你只需分析特定检查出现波动的原因。 你只能查看问题正文,以及包含其他构建链接的评论。 你不得尝试解决这些波动问题,也不得在 flutter/ 中追查根本原因;只需提供高层次的概述,并将失败归入不同类型。

收集失败构建列表并获取日志

GitHub 问题 URL 的格式为 https://github.com/flutter/flutter/issues/。其中 issue-number 是数字。

使用 gh issue view <issue-number> --repo flutter/flutter --json=author,body,id,labels,number,state,title,url 获取问题信息。

例如,要查找 https://github.com/flutter/flutter/issues/174116 的信息,可以运行 gh issue view 174116 --repo flutter/flutter --json=author,body,id,labels,number,state,title,url

此时有两种可能的情况。如果问题

  1. 由 fluttergithubbot 提交
  2. 标题格式为“<ci.yaml target> is X% flaky” 那么它就是我们要分析的类型。如果不是,则应在此处停止:如果用户直接要求调用此技能,就告知用户该问题并非由 GitHub 波动检测机器人提交;否则继续之前的工作。

如果满足上述条件,标题中会包含出现波动的检查名称,正文中会列出链接,指向该检查失败或出现波动的实例,每个链接单独占一行,紧跟在“Flaky builds:”之后。你还应检查评论,找到每条由 "login": "fluttergithubbot" 发布的评论,并从中提取 URL(格式相同,顶部有一个波动示例,完整列表紧随“Flaky builds:”标题之后)。

要查找特定失败的信息,请使用问题正文中的任意一个 URL。 该链接的格式为 "https://ci.chromium.org/ui/p/flutter/builders/<bucket>/<check_name>/<buildNumber>/overview",

例如,https://ci.chromium.org/ui/p/flutter/builders/prod/Windows%20plugin_test/16247/overview 中,prod 是 ,Windows%20plugin_test 是 <check_name>,16247 是 。

然后使用 运行以下命令,以获取测试日志元数据。

curl 'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds/GetBuild' \
  -H 'accept: application/json' \
  -H 'accept-language: en-US,en;q=0.9,es;q=0.8' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'origin: https://ci.chromium.org' \
  -H 'pragma: no-cache' \
  -H 'priority: u=1, i' \
  -H 'referer: https://ci.chromium.org/' \
  -H 'sec-ch-ua: "Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: cross-site' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36' \
  -H 'x-return-encrypted-headers: all' \
  --data-raw '{"builder":{"project":"flutter","bucket":"<bucket>","builder":"<check_name>"},"buildNumber":<buildNumber>,"mask":{"fields":"id,builder,builderInfo,number,canceledBy,createdBy,createTime,startTime,endTime,cancelTime,status,statusDetails,summaryMarkdown,output,steps,tags,schedulingTimeout,executionTimeout,gracePeriod,ancestorIds,retriable"}}'

忽略响应开头的字符 )]}',并将其余内容视为 JSON。

检查日志内容以确定失败原因。

对问题正文中的每个 URL 都执行此操作。收集每个具体失败的日志,并按失败类型进行分类,形成高层次的概述。

评论

支持 Markdown