📈
GitHub CLIでGitHub ActionsのWorkflowの実行時間を一覧で取得する
モチベーション
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_at
とupdated_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]
参考
- https://cli.github.co
- https://github.com/stedolan/jq
- https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-workflow
- https://stackoverflow.com/questions/67890631/how-can-i-get-the-total-build-time-of-a-github-action-workflow
以上
Discussion