【Github】Github Actions ~ 基本編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/11/04/142835
https://dk521123.hatenablog.com/entry/2022/06/16/151443

の続き。

徐々にではあるが、Github Actions の文法をまとめておく

目次

【0】構造
【1】on
【2】jobs
【3】runs-on
【4】steps
 1)run
 2)uses
【5】strategy
 1)matrix
【6】env

【0】構造

ワークフロー(YAMLファイル)
  └ on:
    └ イベント(e.g. push, pull_request)
  └ jobs:
    └ ジョブ(名前は任意)
       └ steps:
         └ アクション

公式ドキュメント

* 分からない文法があった場合は、
 まずは、以下の公式ドキュメントを参照

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

【1】on

* 起動するためのイベントを指定
* 詳細は、以下の関連記事を参照。

Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128

1)主な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 ワークフロー手動実行

2)サンプル

on:
  # Triggers the workflow on push or pull request events but only for the develop branch
  push:
    branches: [ develop ]
  pull_request:
    branches: [ develop ]

【2】jobs

* 処理の最上位単位

サンプル

jobs:
  job1: # [1] Job ID を指定
    name: Hello World # [2] Job Name を指定
    runs-on: ubuntu-latest # [3] Runner を指定
    steps: # [4] 実行する処理一覧(Steps)を指定
      - run: echo "Hello world!!" # 実際の実行処理
  job2:
    # 

1)needs

* Job 同士の依存関係が指定できる
 => 逆に言うと定義しないと全て並列処理で実行される
 => 詳細は、以下の関連記事を参照。

Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128

1)サンプル

jobs:
  job1:

  job2:
    needs: job1
  job3:

  job4:
    # 複数指定
    needs: [job2, job3]

【3】runs-on

* ジョブを実行するOS(ランナー)を指定

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

* ラベル が付いているセルフホステッド ランナーで実行

例:ラベル「linux、x64、gpu」が付いているセルフホステッド ランナー

runs-on: [self-hosted, linux, x64, gpu]

1)runs-onを動的に指定する

* 以下の関連記事を参照。

Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736

【4】steps

* GitHub Actions Workflow の最小単位
 => Step < Job < Workflow

* 以下の2種類ある
 1)run
 2)uses

1)run

* CLIプログラムの実行

サンプル

- jobs
  job1:
    name: First Job
    runs-on: ubuntu-latest
    steps:
      - name: First step
        run: echo "${KEY1}, world!"
        env:
          - KEY1: Hello
        shell: bash # ★補足参照★
        working-directory: tmp

補足:shell の種類
https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell

shell parameter Support OS Explanation
bash ALL シェル。Windows用Gitに含まれるbashシェルが使用
pwsh ALL PowerShell Core
python ALL Pythonのコマンドを実行
cmd Windows コマンドプロンプト
powershell Windows PowerShell Desktop

2)uses

* 再利用可能なアクションの実行
* マーケットプレース(例えば「actions/checkout@vX」)や
 Workflowと同じリポジトリに定義されたものを利用

補足1:Githubマーケットプレース

* 以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2023/12/21/155224

補足2:actions/checkout@vX について

* 以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2022/06/16/151443

【5】strategy

1)matrix

* job を複数の変数の組み合わせで実行するための機能

https://docs.github.com/ja/actions/using-jobs/using-a-matrix-for-your-jobs

サンプル

jobs:
  example_matrix:
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04]
        version: [10, 12, 14]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.version }}

【6】env

* 環境変数の設定

サンプル

# This is a basic workflow to help you get started with Actions

name: CI

on:
  push:
    branches: [ "develop" ]
  pull_request:
    branches: [ "develop" ]

env:
  DEMO_S3_PATH: s3://your-s3-bucket/xxxx
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Run a one-line script
        run: echo Hello, world! - ${{ env.DEMO_S3_PATH }}

参考文献

https://qiita.com/kitta65/items/9c19b323e8c4e837827c
https://rso.hateblo.jp/entry/2019/12/14/102305
https://qiita.com/nicco_mirai/items/5a306549e57ee69403c9

関連記事

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/21/155224
Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128
Github Actions ~ workflow_run / workflow_call ~
https://dk521123.hatenablog.com/entry/2024/02/14/232546
Github Actions ~ エラー処理 ~
https://dk521123.hatenablog.com/entry/2024/01/01/232057
Github Actions ~ GITHUB_ENV ~
https://dk521123.hatenablog.com/entry/2023/12/29/000840
Github Actions ~ GITHUB_OUTPUT ~
https://dk521123.hatenablog.com/entry/2024/01/30/002943
Github Actions ~ プロパティ ~
https://dk521123.hatenablog.com/entry/2023/12/23/231250
Github Actions ~ Artifact ~
https://dk521123.hatenablog.com/entry/2024/02/13/021717
Github Actions ~ timeout-minutes ~
https://dk521123.hatenablog.com/entry/2024/02/09/000129
Github Actions ~ Github Actions環境変数
https://dk521123.hatenablog.com/entry/2024/02/26/194437
Github Actions ~ Pythonを使うには ~
https://dk521123.hatenablog.com/entry/2024/02/04/011205
Github Actions ~ サンプル集 ~
https://dk521123.hatenablog.com/entry/2023/12/31/231438
Github Actions ~ egg / wheel ファイル作成 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624
Github Actions ~ Self-hosted runners / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/12/18/204119
Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736
Github Actions ~ 設定値を切り替えることを考える ~
https://dk521123.hatenablog.com/entry/2024/02/18/232926
Github ~ Webhook 編 ~
https://dk521123.hatenablog.com/entry/2020/01/25/224402
GitHub CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/02/17/233836
Amazon SNSAWS CLI
https://dk521123.hatenablog.com/entry/2024/02/21/141346