この夏に登場してたのを見逃してました。
以前は GitHub Actions のワークフローで再利用できる Action は Docker Container Action と JavaScript Action でした。
Docker Container Action は手軽に作れますが、コンテナで実行するため揮発性で step 毎に docker build が実行されるとか、コンテナイメージをビルドする Action を作るにはベースイメージを docker にする必要があるなどやや不便なところもあります。JavaScript Action は JavaScript のスキルとGitHub 提供ライブラリの習得が必要でやや敷居が高いです。
GitHub Actions のワークフローで使われるシンタックスで Action が記述できればいいのにと思った人は多いのではないでしょうか。それが、Composite run steps action です。
これは、ワークフローで使う run step を Action 定義に埋め込むもので、Dockerfile や JavaScript の記述なしに action.yaml だけで Action が作れてしまうというものです。
公式ドキュメントのサンプルはこんな感じです。
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
runs:
セクションに using: "composite"
を書いて steps
セクション配下に、run step を書き連ねて行けば実行してくれます。まさに欲しかったものです。このサンプルでは、別のシェルを作って起動していますが、複数コマンドを直接 yaml に書いても OK。ソフトウェアをダウンロードしてインストールするような処理も簡単に書けます。
- run: | curl -LO https://github.com/roboll/helmfile/releases/download/v0.135.0/helmfile_linux_amd64 mv helmfile_linux_amd64 helmfile chmod +x helmfile mkdir -p $HOME/bin mv helmfile $HOME/bin echo "$HOME/bin" >> $GITHUB_PATH shell: bash
shell
属性は必須のようです。
Composite run steps action は GitHub Actions でワークフローを書いた経験があれば作成できるため、Action を作る障壁はかなり下がったと言えると思います。
利用できるのは run
のみで、uses
で他の Action を呼び出したりすることはできません。複雑なワークフローをまるっと Action にして再利用することはできませんがシェルスクリプトと併用すれば相当複雑なこともできそうです。ただし Action 自体はシンプルな機能にとどめた方が開発も利用も楽ですので、高機能すぎる Action を作るのはやめた方がよいです。
ただ、ワークフロー自体を organization などの単位で共有して色々なリポジトリから利用したいという要求はあって、そのために Organization and enterprise workflows というフィーチャーが予定されています。
残念ながら現時点では提供時期未定ですが。