前回actの記事を書いたのですが、また知見を得たので残します。
今回のactのバージョンは以下になります。
- act version 0.2.57(前回は0.2.55)
書いていること
- inputs.XXXXでもinputsが取れる
- Github Token利用の手順とシークレットの使い方
- job間でoutputの値を連携する方法
- workflow_callでoutputsの値が渡らない
前回記事への訂正
再利用ワークフローのinput値参照方法について
また通常は
inputs.XXXX
でとれるinputsの値が、actを利用した場合はgithub.event.inputs.XXXX
と書かないと取れませんでした
前回はこのように書いたのですが、今のバージョンではinputs.XXXX
で値が取得できることが確認できました。
もちろんgithub.event.inputs.XXXX
でも同じ値が取れました。
GITHUB_TOKENとシークレットの使い方
こちらも前回の最後に
actでGITHUB_TOKENを利用したワークフローを試す場合は、自身のGitHub個人トークンを発行し、.secretsファイルから読み込ませるとできるはずです。
というように書きましたが、実際には以下の手順になりました。
- 前提としてGitHub CLIは入れておく
- actの拡張機能を追加する(https://github.com/nektos/gh-act)
- コマンドに
-s
オプションを追加するact -s GITHUB_TOKEN="$(gh auth token)" -W .github/workflows/sample.yml
シークレット値をまとめて読み込む
シークレット値は、env形式で値を記述したxxxx.secretsファイルを作成し、--secret-file
オプションで渡すと利用可能になります
例:act --secret-file act.secrets -s GITHUB_TOKEN="$(gh auth token)" -W .github/workflows/sample.yml
job間でoutputの値を連携する方法
actではなくGitHub Actionの話なのですが、ジョブ間でOutputの値を利用するためにはjobs.<job_id>.outputsを定義する必要があります。
それを踏まえて以下のように書いたとします。
- sample.yml
name: sample on: workflow_call: jobs: sample-job: runs-on: ubuntu-latest outputs: title: ${{ steps.step1.outputs.title }} description: ${{ steps.step2.outputs.description }} steps: - id: step1 run: echo "title=hello" >> "$GITHUB_OUTPUT" - id: step2 run: echo "description=world" >> "$GITHUB_OUTPUT" test-echo: runs-on: ubuntu-latest needs: sample-job steps: - name: hoge1 run: echo "${{ needs.sample-job.outputs.title }}" - name: hoge2 run: echo "${{ needs.sample-job.outputs.description }}" test-call: needs: sample-job uses: ./.github/workflows/reuse.yml with: title: ${{ needs.sample-job.outputs.title }} description: ${{ needs.sample-job.outputs.description }}
個人的にはこれでなんの問題もなく動くと思ったのですが、実際にact workflow_call -W .github/workflows/sample.yml
を叩いて動かしてみると、test-echoではoutputsの値が取れますが、test-callではoutputsの値が取れませんでした。
というかtest-call.with.<input>
にtitle: "hogehoge"
とベタ書きしても、reuseのワークフローには値が渡っていませんでした。
一応解決した方法
上記のsample.ymlにおいて、workflow_dispatchを追加し、act workflow_dispatch -W .github/workflows/sample.yml
として実行すると、reuse.ymlにoutputsの値を渡すことができました。
name: sample on: workflow_call: workflow_dispatch: # ←これを追加
・・・もうそれはどうなんだって感じはしますが、やりたかったワークフローの動作テストは一応できるので、 もし再利用ワークフローから再利用ワークフローを呼ぶテストがうまくいかないときがあれば、思い出してみてください。