📈

GitHub CLIでGitHub ActionsのWorkflowの実行時間を一覧で取得する

2023/03/18に公開

モチベーション

GitHub Actions の 特定 Workflow の実行時間やその変化傾向を確認したいことがあります。
例えば CI の速度改善をしているときや、実行時間が長くなったと感じるようなときです。
Datadog の機能で詳しく確認できそうですが、もっと気軽に確認する方法がないか探したところ GitHub の API から取得できそうでした。
ここではGitHub CLIでやってみた方法を紹介します。

コマンド

前提として、GitHub CLI のインストールjq のインストールが必要です。
以下のコマンドを実行します。

$ gh api \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  repos/[owner]/[repository]/actions/workflows/[workflow_filename]/runs | \
  jq -r '.workflow_runs[] | [((.updated_at | fromdateiso8601) - (.created_at | fromdateiso8601)), .conclusion, .display_title, .html_url ]| @csv'

以下の箇所は取得対象に応じて書き換えてください。

  • [owner]: リポジトリのオーナー名
  • [repository]: リポジトリ名
  • [workflow_filename]: ワークフローのファイル名
    • .github/workflows/test.ymlならtest.ymlと指定
    • もしくは workflow の id でも可

実行すると以下のような CSV が得られます。
項目は左から、実行時間(秒), Workflow の実行結果, PR のタイトル、Workflow 実行 の URL になります。

55,"success","rubocop workflow test","https://github.com/hoge/fuga/actions/runs/9954038590"
50,"success","fix rubocop workflow","https://github.com/hoge/fuga/actions/runs/9954025515"
54,"success","rubocop workflow test","https://github.com/hoge/fuga/actions/runs/9953993641"
48,"success","add rubocop workflow","https://github.com/hoge/fuga/actions/runs/9953957146"
46,"success","Bump sqlite3 from 1.4.4 to 1.6.1","https://github.com/hoge/fuga/actions/runs/9953869667"
52,"success","Bump sqlite3 from 1.4.4 to 1.6.1","https://github.com/hoge/fuga/actions/runs/9953868358"
47,"success","increase dependabot pr limit","https://github.com/hoge/fuga/actions/runs/9953865102"
52,"success","Bump stimulus-rails from 1.0.4 to 1.2.1","https://github.com/hoge/fuga/actions/runs/9953840258"
61,"success","Bump sqlite3 from 1.4.4 to 1.6.1","https://github.com/hoge/fuga/actions/runs/9953840104"
53,"success","Bump stimulus-rails from 1.0.4 to 1.2.1","https://github.com/hoge/fuga/actions/runs/9953833690"
64,"success","Bump sqlite3 from 1.4.4 to 1.6.1","https://github.com/hoge/fuga/actions/runs/9953829900"
52,"success","Bump bootsnap from 1.12.0 to 1.16.0","https://github.com/hoge/fuga/actions/runs/9953804600"

コマンドの説明

GitHub CLI で以下の API から Workflow の実行情報の一覧を取得しています。
List workflow runs for a workflow

結果の JSON に含まれるcrated_atupdated_atの差分が実行時間になります。
jqコマンドにより抽出、算出して出力しています。

補足

成功した Workflow のみを取得したい場合は、conclusion=successを指定します

$ gh api \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  repos/[owner]/[repository]/actions/workflows/[workflow_filename]/runs?status=success

workflow の id は以下のコマンドで確認できます

$ gh workflow list -R [owner]/[repository]

参考

以上

Discussion