📂

GitHub の Reusable workflow で working-directory に変数を使う

2023/06/15に公開

やりたいこと

GitHub Actions の reusable workflow で,作業ディレクトリを入力変数で変えたい場合を考えます。

on:
  workflow_call:
    inputs:
      workdir:
        required: true
        type: string

うまくいかない方法

ワークフロー全体のステップのデフォルト設定 defaults.run.working-directory では,現時点ではコンテキストと式が許可されていません。

したがって,入力変数でディレクトリ名を受け取って上記に入れても動作しません。

defaults:
  run:
    working-directory: ${{ inputs.workdir }}

あるいはジョブ内のステップのデフォルト設定 jobs.<job_id>.defaults.run.working-directory でも許可されていません。

jobs:
  example:
    defaults:
      run:
        working-directory: ${{ inputs.workdir }}

解決策

実はジョブのステップ定義 jobs.<job_id>.steps[*] では working-directory に式が使えるので,そこで入力変数を参照します。

jobs:
  example:
    steps:
    - run: go test
      working-directory: ${{ inputs.workdir }}

作業ディレクトリを変える必要のあるすべてのステップで記述しないといけないので面倒ですが,これで作業ディレクトリを変数とした reusable workflow を作ることができます。

Discussion