【Github】Github Actions ~ ワークフロー制御 ~

■ はじめに

今回は、Github Actions の ワークフロー実行
の行う・行わないを制御するために必要な扱う。

目次

【1】needs
 1)needs.<job_id>.result
 2)needs.<job_id>.outputs.<output name>
【2】if
【3】on
 1)push
 2)workflow_run / workflow_call
 3)workflow_dispatch
 4)schedule
 5)pull_request

【1】needs

* Job依存を指定できる
 => 指定した Job の後に実行される

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds

jobs:
  job1:
    runs-on: ubuntu-latest
    steps:
      - run: ./job1.sh
  job2:
    needs: job1
    # job2 needs job1
    # => この job2 は、 job1 が必要です
    # => job2実行は、job1 実行後に行われる
    runs-on: ubuntu-latest
    steps:
      - run: ./job2.sh

1)needs.<job_id>.result

* 依存Jobの処理結果を保持
* 取りうる値は、success, failure, cancelled, skipped.

https://docs.github.com/en/actions/learn-github-actions/contexts#needs-context

job-main:
  name: Sample Job
  runs-on: ubuntu-latest
  needs: [sub-job1, sub-job2, sub-job3]
  if: |
    always() &&
    needs.sub-job1.result == 'success' && # ★注目★
    (needs.sub-job2.result == 'success' || needs.sub-job2.result == 'skipped') &&
    (needs.sub-job3c.result == 'success' || needs.sub-job3.result == 'skipped')

2)needs.<job_id>.outputs.

* 依存Jobのoutputsの各Outputを保持

【2】if

* if [条件] で、[条件] が真になった場合に実行する

https://docs.github.com/ja/actions/learn-github-actions/expressions#status-check-functions

* 詳細は、以下の関連記事を参照のこと

Github Actions ~ if ~
https://dk521123.hatenablog.com/entry/2024/03/11/000000

【3】on

* Githubイベント(push/pull_request etc)をハンドリングしてくれる
* 大きく分けて、以下の4種類。
 [1] Githubイベント
 [2] 時刻指定
 [3] 手動実行
 [4] ワークフロー依存

主なGithubイベント
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows

イベント 説明 memo
push リモートリポジトリへpush時 特定のbranch/path/tagなどを指定することも可能
pull_request プルリクエスト作成時
deployment デプロイ時
release リリース時
workflow_run ワークフローの実行時 前ワークフローの完了後に次のワークフローが開始
workflow_call ワークフロー呼び出し時
workflow_dispatch ワークフロー手動実行
schedule cronによる定期実行

1)push

主なプロパティ

* path : 対象パスのみ実行
* paths-ignore : 対象パスは除外(無視)

https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore

例1:path

on:
  push:
    paths:
      # JavaScript ファイル (.js) をプッシュするたびに実行
      - '**.js'
      # ただし、以下は除外(「!」で除外する)
      - '!.github/workflows/**'

例2:paths-ignore

on:
  push:
    paths-ignore:
      # 以下は除外
      - 'docs/**'
      - '.github/workflows/**'

2)workflow_run / workflow_call

* 詳細は、以下の関連記事を参照のこと

Github Actions ~ workflow_run / workflow_call ~
https://dk521123.hatenablog.com/entry/2024/02/14/232546

on:
  workflow_run:
    workflows: [Build] # Build という名前のワークフローが実行
    types: [completed] # completed (完了したら)
    branches: [canary] # 名前が canary のブランチ

3)workflow_dispatch

* ワークフロー手動実行
 => 詳細は、以下の関連記事を参照のこと

Github Actions ~ workflow_dispatch / 手動実行 ~
https://dk521123.hatenablog.com/entry/2024/03/12/012953

4)schedule

* 時刻指定
* cronによる定期実行

5)pull_request

* プルリクエスト時に発行
 => 詳細は、以下の関連記事を参照のこと

Github Actions ~ pull_request / pull_request_target ~
https://dk521123.hatenablog.com/entry/2024/04/10/152101

関連記事

Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ if ~
https://dk521123.hatenablog.com/entry/2024/03/11/000000
Github Actions ~ エラー処理 / continue-on-error ~
https://dk521123.hatenablog.com/entry/2024/01/01/232057
Github Actions ~ workflow_dispatch / 手動実行 ~
https://dk521123.hatenablog.com/entry/2024/03/12/012953
Github Actions ~ workflow_run / workflow_call ~
https://dk521123.hatenablog.com/entry/2024/02/14/232546
Github Actions ~ pull_request / pull_request_target ~
https://dk521123.hatenablog.com/entry/2024/04/10/152101
Github Actions ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/12/21/155224
Github Actions ~ 外部シェルスクリプト実行 ~
https://dk521123.hatenablog.com/entry/2024/01/19/003044
Github Actions ~ 設定値を切り替えることを考える ~
https://dk521123.hatenablog.com/entry/2024/02/18/232926
GitHub CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/02/17/233836