【GitHub Actions】Composite run steps actionの作り方

GitHub

GitHub ActionsでComposite run steps actionが作れるようになりました。
これによってこれまでワークフローファイルに書いていたシェルスクリプトを細分化した、再利用可能なアクションとして用意して、ワークフローファイルを簡潔にすることができるようになります。

GitHub Actions: Composite Run Steps | GitHub Changelog
GitHub Actions: Composite Run Steps

このComposite run steps actionですが、どうやって作るのかを把握するために、ドキュメントを参考にして実際に作成してみます。

スポンサーリンク

Composite run steps actionを使ってアクションを作ってみる

GitHub Docsで複合実行ステップアクションの作り方が書かれているので、このドキュメントを参考にします。

Creating a composite action - GitHub Docs
In this guide, you'll learn how to build a composite action.

リポジトリの初期化

まずはGitHub Actionを動かすリポジトリを作成します。

例として、hello-world-composite-run-steps-actionという名前のリポジトリを作ります。

$ mkdir hello-world-composite-run-steps-action
$ cd hello-world-composite-run-steps-action
$ git init .

次に goodbye.sh を作成します。goodbye.shの内容は次のechoです。
このシェルは再利用可能なアクションの中から実行します。

echo "Goodbye"

シェルを作成したら、実行権限を付与します。

$ chmod +x goodbye.sh

メタデータファイル(action.yml)を作成

次にリポジトリのルートディレクトリ直下に action.yml を作成します。

action.ymlはメタデータファイルと呼ばれ、この後で作成するワークフローファイルから呼び出されます。

GitHub Actions のメタデータ構文 - GitHub Docs
リポジトリでタスクを実行するアクションを作成できます。 アクションには、YAML 構文を使うメタデータ ファイルが必要です。
name: 'Hello World'

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-id }}

runs:
  using: "composite" # ①
  steps:
    - run: echo Hello ${{ inputs.who-to-greet }}.
      shell: bash
    - id: random-number-generator
      run: echo "::set-output name=random-id::$(echo $RANDOM)"
      shell: bash
    - run: ${{ github.action_path }}/goodbye.sh # ②
      shell: bash

action.ymlでは using に”composite”を指定します(①)。そして②で先程作成したgoodbye.shを呼び出します。

ワークフローファイル(.github/workflows/main.yml)の作成

ルートディレクトリ配下に .github/workflows を用意し、その中にmain.ymlを作成します。

on:
  workflow_dispatch: # ①

name: Composite run steps action

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
    - uses: actions/checkout@v2
    - id: foo
      uses: ./ # ②
      with:
        who-to-greet: 'Mona the Octocat'
    - run: echo random-number ${{ steps.foo.outputs.random-number }}
      shell: bash

アクションをGitHub上で手動実行できるように、 workflow_dispatch を設定します(①)。
また、usesでは”{user}/{repository}@{label}”といった指定方法以外に、メタデータファイルのaction.ymlのディレクトリパスを指定することができます。今回はディレクトリパスを指定する方法でaction.ymlを参照しています(②)。

以上が用意できたらファイルをコミットし、リポジトリにプッシュします。

作成したアクションを実行して結果を確認する

作成したアクションは画像のように、リポジトリのActionsのワークフロー一覧画面でワークフローを選択した先の画面から手動で実行できます。

実行画面

GitHub Actions: Manual triggers with workflow_dispatch | GitHub Changelog
GitHub Actions: Manual triggers with workflow_dispatch

実行結果を見ると、action.ymlに書いた処理が実行されているのが確認できます。

実行結果