LoginSignup
5
0

More than 1 year has passed since last update.

GitHub Actions で workflow_dispatch と workflow_call で処理を分岐する

Posted at

はじめに

GitHub Actions の機能でワークフローの再利用があります。ワークフローの再利用では、ワークフローから別のワークフローを呼び出すことができます。

その際に、呼び出された側のワークフローで別のワークフローから呼び出されたのか、もしくは、ワークフローを単体実行したのかで分岐したいことがあったため、そのやり方を記載します。

やり方

GitHub Actions では、実行時にコンテキストから様々な情報を取得することができます。

その中に、github.event.workflow というキーが存在します。この値には、workflow のファイルパスが記載されています。

呼び出し方によって呼び出された側のワークフローでは、以下のような値が取得できます。(workflowA から workflowB を呼び出す場合)

  • workflowB を直接実行(workflow_dispatch)した場合の github.event.workflow
    • workflowB のファイルパス(.github/workflows/workflow-b.yaml
  • workflowA から実行(workflow_call)した場合の github.event.workflow
    • workflowA のファイルパス(.github/workflows/workflow-a.yaml

これによって処理やステップを分岐することができます。

例えば、workflowB を直接実行した際のみステップを実行したい場合は、以下のような条件を追加します。

if: github.event.workflow == '.github/workflows/workflow-b.yaml'

github.event_name もあるので、こちらでも分岐できないか試してみましたが、workflowB を直接実行した場合も、workflowA から実行した場合も、workflow_dispatch と同じ値になっており、分岐に利用できませんでした。

type: environment について

実際には、以下のように同じ名前で input を定義することで、分岐なく同じワークフローを利用できるかと思いますが、type: environmentworkflow_dispatch のみにしか存在しないため、これを利用している場合、差を吸収するステップを追加する必要があるかと思います。

on:
  workflow_dispatch:
    inputs:
      input1:
        required: true
        type: string    
  workflow_call:
    inputs:
      input1:
        required: true
        type: string

environment に入っている値(environment_name)は文字列としてそのまま利用できますが、上記のような差分となってしまいますので、workflow_call する際には、避けておいた方が良さそうです。

まとめ

方法は色々ありそうですが、github.event.workflow を確認することで、ワークフローの実行方法で分岐することができました。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0