📝

GitHub Actionsの複合アクション(composite action)を自作する上でのTips

2024/04/18に公開

複合アクションとは

GitHub Actionsを自作する際の方法の1つで、複数のワークフローステップを1つのアクション内で組み合わせて実行できるものです。以下のチュートリアルが参考になります。

https://docs.github.com/ja/actions/creating-actions/creating-a-composite-action

今回は、この複合アクションを作る際にハマったことをTipsとしてまとめてみました。

Tips

1. inputsのrequired:trueに強制力はない

以下のようにaction.ymlでinputsパラメーターを定義しますが、required:trueを指定しても、実際にそのパラメーターが渡されなかった場合にエラーが発生するわけではありません。

inputs:
  sample:
    description: "Sample of input parameter."
    required: true

inputパラメーターが渡されなかった場合にエラーを発生させるためには、以下のように自分でエラーハンドリングを行う必要があります。 参考

- run: |
    [[ "${{ inputs.sample }}" ]] || { echo "sample input is empty" ; exit 1; }

2. shellの指定が必須

普段のactionsと異なり、複合アクションではshellの指定が必須です。指定できるshellの中から選んで、以下のように指定します。一般的にbashがよく使われているようです。

steps:
  - name: Run a one-line script
    run: echo "Hello, world!"
    shell: bash

3. 別のリポジトリから呼び出した際、複合アクションはどこにあるのか

これは、1番ハマったところでした。
複合アクションを別リポジトリから呼び出した場合、ワークスペース配下には複合アクションのファイルは存在しないため、別リポジトリと合わせて複合アクションのリポジトリもcheckoutする必要があるのかと思いましたが、実際は別の階層に存在しているので、checkoutする必要はありませんでした。

以下は、Linuxを使用した場合の例です。

  • ワークスペースのパス: /home/runner/work/<別リポジトリの名前>/<別リポジトリの名前>
  • 複合アクションのパス: /home/runner/work/_actions/<複合アクションを作成したユーザー名>/<複合アクションのリポジトリ名>/<使用する複合アクションのブランチ名やタグ名>

複合アクションのパスは、コンテキストの${{ github.action_path }}から取得できます。

まとめ

複合アクションの自作に関する記事はあまりなかったので、今回は自分がハマったことをまとめてみました。実際に作ったアクションについては、以下の記事にまとめています。
https://zenn.dev/century/articles/3edddeab3debf6

Discussion