mcpField
A
analyze-github-flake

analyze-github-flake

github.com/flutterテスト・品質180.5k60 回インストール今日更新
リポジトリ

analyze-github-flake について

analyze-github-flake は、Flutter の GitHub イシューにある不安定なチェックを分析するスキルです。ビルドログを集めて失敗を種類別に整理し、ファイル変更や flutter/ 内の根本原因調査を行わずに概要をまとめます。

主な機能

  1. 01対象となる不安定なイシューの判定
  2. 02イシューやコメントからビルドリンクを抽出
  3. 03ビルドログの確認
  4. 04失敗の種類別分類
  5. 05ファイルを変更せず概要を提示

活用シーン

  1. 01不安定なイシューに関連する失敗ビルドの確認
  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

この時点では、次の 2 つのケースが考えられます。

  1. fluttergithubbot が起票したイシューである
  2. タイトルが「<ci.yaml target> is X% flaky」の形式である

いずれかに該当する場合は、分析対象です。該当しない場合は、ここで処理を終了します。ユーザーがこのスキルの実行を直接依頼した場合は、そのイシューが GitHub のフレークボットによって起票されたものではないことをユーザーに伝えます。それ以外の場合は、以前の作業を続けます。

上記の条件を満たす場合、タイトルに不安定になっているチェックの名前が含まれています。また、本文には、そのチェックが失敗または不安定になったビルドへの URL が「Flaky builds:」の直後に、それぞれ 1 行ずつ記載されています。コメントも確認し、"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 ごとに、これを行います。それぞれの失敗についてログを収集し、失敗の種類ごとに分類して概要をまとめます。

コメント