[GitHub Actions]composite-run-stepsでusesが利用可能になったので試してみた

composite-run-stepsでstepにusesが利用可能になったとの記事を見て、早速気になったこと含めて試してみました。
2021.08.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

GitHub Actionsのcomposite run stepsにて、遂にusesも使えるようになったとのアップデートが来ました。

このusesがこれまでcomposite run stepsに含められなかったために、シェルスクリプトのstep限定で且つ極力効率よく組むためにstepの順番を入れ替えるなど涙ぐましい努力が必要でした。今回のアップデートにてとても効率よくなっています。実際にやって見た結果と、usesを含めるに当たっての注意事項をまとめました。

今回の記事はcomposite run stepsをprivateにて扱っています。privateでの扱い方詳細については以前挙げた記事を参照してください。

omposite run stepをuses込で作成する

基本はこれまでのcomposite run stepsと変わりません。今回のパスは .github/actions/init/action.yml としています。

name: "library setup"
inputs:
  node-version:
    default: '14.x'
    required: false
    description: 'version of nodejs'
  python-version:
    default: '3.7'
    required: false
    description: 'version of python'
  java-version:
    default: '1.8'
    required: false
    description: 'version of java'
runs:
  using: "composite"
  steps:
    - name: Set up Node
      uses: actions/setup-node@v1
      with:
        node-version: ${{ inputs.node-version }}

    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: ${{ inputs.java-version }}

    - uses: actions/setup-python@v2
      with:
        python-version: ${{ inputs.python-version }}

呼び出し方も以前と変わりません。

name: "Test"

on:
  push:

jobs:
  build:
    runs-on: ubuntu-18.04
    timeout-minutes: 30
    steps:

    - name: Checkout
      uses: actions/checkout@v2

    - name: Initialize
      uses: ./.github/actions/init

Actionsを実行した際のログは以下の通り。

Prepare all required actions
Getting action download info
Download action repository 'actions/setup-node@v1' (SHA:f1f314fca9dfce2769ece7d933488f076716723e)
Download action repository 'actions/setup-java@v1' (SHA:d202f5dbf7256730fb690ec59f6381650114feb2)
Download action repository 'actions/setup-python@v2' (SHA:dc73133d4da04e56a135ae2246682783cc7c7cb6)
Run ./.github/actions/init
  with:
    node-version: 14.x
    python-version: 3.7
    java-version: 1.8
/opt/hostedtoolcache/node/14.17.5/x64/bin/node --version
v14.17.5
/opt/hostedtoolcache/node/14.17.5/x64/bin/npm --version
6.14.14
/bin/tar --version
tar (GNU tar) 1.29
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
/bin/tar xz --warning=no-unknown-keyword -C /home/runner/work/_temp/temp_358838062 -f /home/runner/work/_temp/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
creating settings.xml with server-id: github; environment variables: username=$GITHUB_ACTOR, *** and gpg-passphrase=null
writing /home/runner/.m2/settings.xml
Successfully setup CPython (3.7.11)

composite run stepsに含めない時とのログ差異は、最初のsetupでactionをダウンロードするかどうか、という辺りです。

以前と変わらないこと

果たしてこれはいけるのか、と試してみた結果無理だった要素は以下の通り。

if構文

対応していません。これが有効であれば環境によるstep数差分もcomposite run steps内で吸収しつつカバーできるのですが。今後のアップデートに期待。

Error: /home/runner/work/repository/repository/./.github/actions/init/action.yml (Line: 29, Col: 7): Unexpected value 'if'

気をつけるべき点

公式ブログ記事のサンプルにもある通り、checkout actionはcompositeに含めないようにします。checkoutすることでworkflowやcomposite run stepsのファイルがダウンロードされるため、composite stepのファイルが見つからずにエラーとなります。

あとがき

これまではstep共有したい場合には run でのスクリプト実行とする必要があり、usesが使えない為にメンテナンスコストも高くなりがちでした。今後は uses が使える事でより効率よくcomposite run stepsが使える様になります。メンテナンスコストとの天秤にかけて見送ってきた場合はリトライしてみることをおすすめします。。