【Github】Github Custom Action ~ 複合アクション ~

■ はじめに

https://dk521123.hatenablog.com/entry/2024/06/27/220219
https://dk521123.hatenablog.com/entry/2024/06/28/030619

の続き。

今回は、Github Custom Action の 複合アクション(composite action)
について扱う。

目次

【1】複合アクション(composite action)
【2】使用上の注意
【3】サンプル
 0)前提条件
 1)リポジトリの作成
 2)action.ymlの作成
 3)Bashの作成
 4)Github リポジトリの設定
 5)GitHub Actionsでのテスト

【1】複合アクション(composite action)

* 複数 step からなる処理を行える Action

【2】使用上の注意

* 調べてみると結構ハマっている方が多いらしい、、、

https://zenn.dev/century/articles/29ffe69be90678
https://thaim-til.hatenablog.jp/entry/2024/04/09/084654
https://qiita.com/M_Kagawa/items/98f154477b8b5bd3d315

* inputsのrequired:trueに強制力はない
* Bashを実行する場合「shell: bash」は必須
* boolean inputsがstringとして扱われる
などなど

【3】サンプル

0)前提条件

* 以下がインストールされていること
 + git

1)リポジトリの作成

$ mkdir hello-world-composite-action
$ cd hello-world-composite-action

# git 初期化
$ git init

最終的な主なフォルダ構成

hello-world-composite-action
├─.github
│  └─workflows
│        └─ demo.yml
├─action.yml
└─goodbye.sh

2)action.ymlの作成

* 詳細な構文は、以下の公式ドキュメントを参照のこと

https://docs.github.com/ja/actions/creating-actions/metadata-syntax-for-github-actions#runs-for-composite-actions

action.yml

name: 'hello_world_composite_demo'
description: 'Greet someone'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  random-number:
    description: "Random number"
    value: ${{ steps.random-number-generator.outputs.random-number }}
runs:
  # ★注目★
  using: "composite"
  steps:
    - name: Set Greeting
      run: echo "Hello $INPUT_WHO_TO_GREET."
      shell: bash
      env:
        INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}

    - name: Random Number Generator
      id: random-number-generator
      run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
      shell: bash

    - name: Set GitHub Path
      run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
      shell: bash
      env:
        GITHUB_ACTION_PATH: ${{ github.action_path }}

    - name: Run goodbye.sh
      run: goodbye.sh
      shell: bash

3)Bashの作成

[1] Bashの作成

# Step1: Bash作成
$ echo "echo Goodbye" > goodbye.sh

# Step2: 実行権限付与
$ chmod +x goodbye.sh

4)Github リポジトリの設定

# Step1: githubで新たにrepositoryでリポジトリ作成
#  => <Your-ID>@hello-world-composite-action

# Step2: git push
$ git add .
$ git commit -m "Add goodbye script"
$ git branch -M develop
$ git remote add origin https://github.com/dk521123/hello-world-composite-action.git
$ git push -u origin develop

# Step3: ハッシュタグ取得
# 完全なハッシュ %H / 短縮版のハッシュ %h
# --no-patch: コミットの diff 出力を行わないようにする
$ git show --format='%H' --no-patch
3b3f59d...

5)GitHub Actionsでのテスト

[1] .github/workflows/demo.yml 作成

name: DemoCustomCompositeAction

on:
  workflow_dispatch:
jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        # ★ここを修正する(@以降は、ハッシュタグを記載)
        uses: your-github-user-name/hello-world-composite-action@3b3f59d...
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

[2] git push

$ git add .
$ git commit -m "Add demo github Workflow"
$ git push

[3] Workflow 実行

* 実行したら、以下のような出力がされるはず、、、
~~~~
Hello Mona the Octocat.

Goodbye

Run echo random-number "$RANDOM_NUMBER"
random-number 8836
~~~~

参考文献

公式ドキュメント
https://docs.github.com/ja/actions/creating-actions/creating-a-composite-action
一般サイト
https://dev.classmethod.jp/articles/github_actions_composite_action_first_touch/
https://zenn.dev/moaikids/articles/32363c5386978e
https://www.ritolab.com/posts/212

関連記事

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 Custom Action ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/27/220219
Github Custom Action ~ Docker コンテナー ~
https://dk521123.hatenablog.com/entry/2024/06/28/030619
Github Custom Action ~ Custom Actionを使ってもらうには ~
https://dk521123.hatenablog.com/entry/2024/06/30/224058
Git ~ 基本編 / 基本コマンド ~
https://dk521123.hatenablog.com/entry/2020/10/02/000000