【GitHub Actions】workflow_runで別のワークフローのリクエスト、完了をトリガーにワークフローを実行する

GitHub Actions

workflow_runで別のワークフローのリクエスト、完了をトリガーにワークフローを実行する

workflow_runでリクエスト、完了をトリガーにワークフローを実行する方法についてまとめたので紹介していきます!

ワークフローが完了した際の成功・失敗の条件によって処理を分岐したりもできたので、こちらも紹介していきます!

ドキュメント

サンプルレポジトリ

注意点

業務で使用しているGHES(GitHub Enterprise Server)でも問題なく使用できました!

workflow_runでワークフローを実行する方法

Main Actionを作成

まずはメインのActionを作成し、このActionのリクエスト、完了をトリガーに別のアクションを起動するようにしてみます。

このメインAction自体は、ただのHello Worldです。

.github/workflows/main.yml

name: Main Action
on: workflow_dispatch

jobs:
  main:
    name: Hello World
    runs-on: ubuntu-latest
    steps:
      - name: Call Hello World
        uses: docker://alpine:latest
        with:
          entrypoint: /bin/echo
          args: Hello, World!

Workflow Run Actionを作成

メインActionのリクエスト、完了をトリガーに起動するActionをworkflow_runを使用して作成していきます。

workflow_runの指定方法

指定方法は

  • 「workflows」にアクション名を指定
  • 「types」には、「requested」や「completed」を指定

のような感じにすればOK。

今回は「types」に両方指定しています。

on:
  workflow_run:
    workflows:
      - Main Action
    types:
      - requested
      - completed

実行条件を指定してみる

workflow_runで実行されたワークフローの条件によって処理を分岐してみました。

  • 「On Requested」の時だけ実行したいような時は、「event.workflow_run.conclusion」が空の時に指定しました。
  • 「Completed」は成功した時と失敗した時で、「github.event.workflow_run.conclusion == ‘success’」と「github.event.workflow_run.conclusion == ‘failure’」のパターンで分けています。

jobs:
  # On Requested
  on-requested:
    name: On Requested
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == '' }}
    steps:
      ...

  # On Success(completed)
  on-success:
    name: On Success
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      ...

  # On Failure(completed)
  on-failure:
    name: On Failure
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    steps:
      ...

ワークフロー全体

以下がワークフロー全体になります。

.github/workflows/workflow_run.yml

name: Workflow Run Action
on:
  workflow_run:
    workflows:
      - Main Action
    types:
      - requested
      - completed

jobs:
  # On Requested
  on-requested:
    name: On Requested
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == '' }}
    steps:
      - name: Call Hello World
        uses: docker://alpine:latest
        with:
          entrypoint: /bin/echo
          args: Hello, World From On Requested!

  # On Success(completed)
  on-success:
    name: On Success
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      - name: Call Hello World
        uses: docker://alpine:latest
        with:
          entrypoint: /bin/echo
          args: Hello, World From On Success!

  # On Failure(completed)
  on-failure:
    name: On Failure
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    steps:
      - name: Call Hello World
        uses: docker://alpine:latest
        with:
          entrypoint: /bin/echo
          args: Hello, World From On Failure!

ワークフローの実行結果

On Requested

On Success(completed)

On Failure(completed)

Workflow Run Action補足

workflow_run」のworkflowsの部分は、yamlの形式であればどちらでも行けるので、どちらの指定方法でもOK。

on:
  workflow_run:
    workflows: ["Main Action"]
    types:
      - requested
      - completed

on:
  workflow_run:
    workflows:
      - Main Action
    types:
      - requested
      - completed

まとめ

今回は、workflow_runで別のワークフローのリクエスト、完了をトリガーにワークフローを実行する方法について書きました!

workflow_runでリクエスト、完了をトリガーにワークフローを実行したり、ワークフローが完了した際の成功・失敗の条件によって処理を分岐したりと色々と便利なので、使ってみてください。

オススメの関連商品

Note一覧

コメント

タイトルとURLをコピーしました