継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

GitHub Actions で特定の workflow 完了をトリガーに別の workflow を動作させた時のメモ✍

タダです.

GitHub Actions を使っていると,「ビルドが完了したら別の処理を開始したい」といったワークフロー間の連携が必要になることがあります.GitHub Actions には workflow を連携させる方法として workflow_callworkflow_run という2つの仕組みが用意されています。これらの違いをまとめつつ,使い方をメモしていきます.

workflow_runworkflow_call の違いを理解する

まず最初に自分も混同していたのですが, workflow_runworkflow_call の違いを整理します.

workflow_call

workflow_call は reusable workflow を定義し.他のワークフローから直接呼び出すための仕組みです.以下は定義例ですが特徴として呼び出し元のワークフローと同じ実行コンテキストで動作し,入力パラメータとシークレットを直接渡せる事が挙げられます.

呼び出し元の workflow の定義サンプル

# .github/workflows/main-workflow.yml
name: Main Workflow

on: push

jobs:
  call-reusable:
    uses: ./.github/workflows/reusable-workflow.yml
    with:
      environment: develop

呼び出し先の reusable workflow の定義サンプル

# .github/workflows/reusable-workflow.yml
name: Reusable Workflow

on:
  workflow_call:
    inputs:
      environment:
        required: true
        type: string

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to ${{ inputs.environment }}
        run: echo "Deploying to ${{ inputs.environment }}"

関連情報

docs.github.com

docs.github.com

workflow_run

workflow_run は独立した workflow を別の workflow の完了をトリガーとして起動します.自分がやりたかった処理がこちらなので自分は workflow_run でフローを構築しました.以下がテストの処理が完了したらデプロイを行う場合の実行例です.

呼び出し元の workflow の定義サンプル

# .github/workflows/test.yml
name: Run test

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run test
        run: npm test

呼び出し先の workflow の定義サンプル

# .github/workflows/deploy.yml
name: Deploy

on:
  workflow_run:
    workflows: [Run test]
    types:
      - completed

jobs:
  deploy:
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    runs-on: ubuntu-latest
    steps:
      - name: Deploy application
        run: echo "Deploying application"

関連情報

docs.github.com

使い分けの判断ポイント

2つのトリガーの使い分けの観点もまとめます.

  • workflow_call:共通の処理を複数の workflow で再利用したい
  • workflow_run:独立性を保って前の workflow の結果に応じて処理を実行したい

まとめ

workflow_runGitHub Actions において独立した workflow を連携させるトリガーです.workflow_call との違いを理解し適切に使い分けていければと思います.