はじめに
モノレポで開発をしていると、GitHub Actions のワークフローで作業ディレクトリを変更したり、デフォルトの作業ディレクトリを変更することが増えた。 作業ディレクトリを変更する方法、デフォルトの作業ディレクトリを変更する方法をメモしておく。
cd コマンドで作業ディレクトリを変更する
GitHub Actions では cd
コマンドで作業ディレクトリを変更できる。
たとえば、こんなワークフローを実行した場合は、
name: Working Directory on: workflow_dispatch: jobs: print-working-directory: runs-on: ubuntu-latest steps: - name: step1 run: | pwd cd subdir pwd
出力結果は以下のようになる。
/path/to/repo /path/to/repo/subdir
ただし、作業ディレクトリの変更はステップ内だけにとどまり、ステップが変わると作業ディレクトリは元に戻る。
- name: step1 run: | cd subdir pwd - name: step2 run: | pwd
↑ このワークフローの実行結果は以下のようになる↓
/path/to/repo/subdir # step1 /path/to/repo # step2
working-directory を指定
working-directory
を指定すると、スコープに応じてデフォルトの作業ディレクトリを変更できる。
ステップのデフォルトの作業ディレクトリを変更
ステップで working-directory
を指定すると、ステップ内のデフォルトの作業ディレクトリを変更できる。
作業ディレクトリの変更はステップ内だけにとどまり、別のステップには適用されない。
- name: step1 working-directory: subdir run: | pwd - name: step2 run: | pwd
↑ このワークフローの実行結果は以下のようになる↓
/path/to/repo/subdir # step1 /path/to/repo # step2
ジョブのデフォルトの作業ディレクトリを変更
ジョブで defaults.run.working-directory
を指定すると、ジョブ内のデフォルトの作業ディレクトリを変更できる。
作業ディレクトリの変更はジョブ内のすべてのステップに適用されるが、別のジョブには適用されない。
また、任意のステップで作業ディレクトリを変更しても、別のステップの開始時には working-directory
で指定したデフォルトの作業ディレクトリが適用される。
name: Working Directory on: workflow_dispatch: jobs: print-working-directory: runs-on: ubuntu-latest defaults: run: working-directory: subdir steps: - name: checkout uses: actions/checkout@v3 - name: step1 run: | pwd cd .. pwd - name: step2 run: | pwd
↑ このワークフローの実行結果は以下のようになる↓
/path/to/repo/subdir # step1 /path/to/repo # step1 /path/to/repo/subdir # step2
ワークフロー全体のデフォルトの作業ディレクトリを変更
ワークフローで defaults.run.working-directory
を指定すると、ワークフロー全体のデフォルトの作業ディレクトリを変更できる。
name: Working Directory on: workflow_dispatch: defaults: run: working-directory: subdir jobs: print-working-directory: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v3 - name: step run: | pwd print-working-directory-2: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v3 - name: step run: | pwd
↑ このワークフローの実行結果は以下のようになる↓
/path/to/repo/subdir # step1 /path/to/repo/subdir # step2
working-directory の指定は、より小さいスコープでの指定が優先される
working-directory
の指定は、より小さいスコープでの指定が優先される。
- ステップとジョブのそれぞれで
working-directory
を指定した場合は、ステップでの指定が優先される - ジョブとワークフロー全体のそれぞれで
working-directory
を指定した場合は、ジョブでの指定が優先される