📝
GitHub Actionsの複合アクション(composite action)を自作する上でのTips
複合アクションとは
GitHub Actionsを自作する際の方法の1つで、複数のワークフローステップを1つのアクション内で組み合わせて実行できるものです。以下のチュートリアルが参考になります。
今回は、この複合アクションを作る際にハマったことをTipsとしてまとめてみました。
Tips
required:true
に強制力はない
1. inputsの以下のように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 }}
から取得できます。
まとめ
複合アクションの自作に関する記事はあまりなかったので、今回は自分がハマったことをまとめてみました。実際に作ったアクションについては、以下の記事にまとめています。
Discussion