关于 analyze-github-flake
analyze-github-flake 是用于分析 Flutter GitHub 仓库中 flaky 检查的技能。它汇总构建日志并按失败类型归类,只提供高层分析,不修改文件或定位 flutter/ 内部根因。
主要功能
- 01筛选符合条件的 flaky issue
- 02提取 issue 和评论中的构建链接
- 03检查构建日志
- 04按失败类型归类汇总
- 05仅提供高层分析,不修改文件
适用场景
- 01梳理 flaky issue 涉及的失败构建
- 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
此时有两种可能的情况。如果问题
- 由 fluttergithubbot 提交
- 标题格式为“<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 都执行此操作。收集每个具体失败的日志,并按失败类型进行分类,形成高层次的概述。