Open1

GitHub Actions の workflow call の workflow run と job の実行時間

Shunsuke SuzukiShunsuke Suzuki

GitHub API で workflow run と job の実行時間を取得できる。

https://docs.github.com/en/rest/actions/workflow-jobs?apiVersion=2022-11-28#list-jobs-for-a-workflow-run
https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-workflow

workflow file を指定して workflow run のリストを取得し、 workflow run id を指定して job のリストを取得できる。

ところが reusable workflow を使っている場合はなしがややこしいことに気づいた。

まず list workflow runs API で workflow call を指定しても workflow run は取得できない。

$ gh api \         
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /repos/suzuki-shunsuke/ghatm/actions/workflows/wc-test.yaml/runs
{
  "total_count": 0,
  "workflow_runs": []
}

workflow call を呼び出している workflow run の job のリストを取得すると、 workflow call によって呼び出された job のリストも取得できるが、その job が workflow call によって呼ばれた(つまり別の workflow で定義されている) のか、元の workflow で定義されているのか判別するのが難しい気がする。

workflow call によって呼ばれたとある job のデータから明らかに関係ないものを除去したものが以下。

{
  "id": 28796981369,
  "run_id": 10398907235,
  "workflow_name": "test",
  "status": "completed",
  "conclusion": "success",
  "created_at": "2024-08-15T04:42:41Z",
  "started_at": "2024-08-15T04:42:48Z",
  "completed_at": "2024-08-15T04:42:53Z",
  "name": "enable-auto-merge / enable-auto-merge"
}

https://github.com/suzuki-shunsuke/ghatm/blob/10dda438299b4b18219780c419a9fde5e4ddabf4/.github/workflows/test.yaml#L37-L38

https://github.com/suzuki-shunsuke/ghatm/blob/10dda438299b4b18219780c419a9fde5e4ddabf4/.github/workflows/wc-enable-auto-merge.yaml#L11