GitHub Actions でワークフローの前回の実行を取得する

2021/04/07に公開

GitHub Actions API の List workflow runs を使います。

GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs
  • {owner}/{repo} に「対象のリポジトリ」を指定します。
  • {workflow_id} に「ワークフロー ID」または「ワークフローのファイル名」を指定することができます。
  • その他のパラメータについては、GitHub のドキュメントをご確認ください。

以下に、ワークフローの前回の実行時刻を echo する例を載せておきます。

nightly.yml
on:
  schedule:
    cron: '0 0 * * *'

jobs:
  job1:
    runs-on: ubuntu-latest
    steps:
      - id: last-execution
        name: Get the last execution time
        run: |
	  url="https://api.github.com/repos/foo/bar/actions/workflows/nightly.yml/runs?status=success&per_page=1"
          echo "::set-output name=time::$(curl -fsSL "$url" | jq -r '.workflow_runs[0].created_at')"
      - run: echo ${{ steps.last-execution.outputs.time }}

ドキュメントを見ていただくか、実際に API を叩いていただくとわかると思いますが、ワークフローの実行の情報が最新のものから配列で JSON で返ってきます。これを jq に渡して、欲しい情報を ::set-output すれば OK です。

GitHub Actions の cron は、実行が指定した時刻より遅れることがよくあります。このテクニックは、前回の実行からの更新情報を取得したいときなどに使えると思います。

Discussion