9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Github Actions actions/checkoutの保存先について

Posted at

概要

Github Actionsでソースコードをcloneする場合はactions/checkout@v3を使用しますが、ディレクトリを指定してcloneするときの挙動についてまとめます。

ディレクトリを指定する書式

        uses: actions/checkout@v3
        with:
          path: path/to/repo-1

withpathを与えるとpath/to/repo-1にリポジトリをcloneします。

その他の全書式はこちらを参照
https://github.com/actions/checkout

checkoutのバージョンによって挙動が大きく異なるので注意が必要です。

デフォルトワークスペースについて

以下のワードにはデフォルトワークスペースパスが記載されており、このpathにcloneされます。この2つは同一のパスを格納しています、

  • ${{ github.workspace }}
  • ${GITHUB_WORKSPACE}

通常、デフォルトワークスペースには以下のパスが格納されています。(Github Actionsのランナーを用いる場合)
/home/runner/work/<repo-name>/<repo-name>

actions/checkout@v1 (path無指定)

# リポジトリ名:My-Dev
      - name: Show workspace dir (before)
        run: |
          echo "${{ github.workspace }}"
        # /home/runner/work/My-Dev/My-Devを出力

      - name: No Path
        uses: actions/checkout@v1
      # /home/runner/work/My-Dev/My-Devにcloneされる

      - name: Show workspace dir (after)
        run: |
          echo "${{ github.workspace }}"
        # /home/runner/work/My-Dev/My-Devを出力

パスを指定せず、checkoutするとデフォルトワークスペースにcloneされます、
/home/runner/work/My-Dev/My-Dev

2段目のMy-Dev直下に.gitを含むリポジトリ一式がcloneされます。
/home/runner/work/My-Dev/My-Dev/.git

${{ github.workspace }}はcloneの前後で/home/runner/work/My-Dev/My-Devを指します。

actions/checkout@v1 (path指定)

# リポジトリ名:My-Dev
      - name: Show workspace dir (before)
        run: |
          echo "${{ github.workspace }}"
        # /home/runner/work/My-Dev/My-Devを出力

      - name: No Path
        uses: actions/checkout@v1
        with:
          path: path/to/repo-1
      # /home/runner/work/My-Dev/path/to/repo-1にcloneされる

      - name: Show workspace dir (after)
        run: |
          echo "${{ github.workspace }}"
        # /home/runner/work/My-Dev/path/to/repo-1を出力

パスを指定した場合、以下に一式がcloneされます。
/home/runner/work/My-Dev/path/to/repo-1/.git

${{ github.workspace }}
home/runner/work/My-Dev/path/to/repo-1を指します。

path無指定の場合の最大の違いは、
${{ github.workspace }}/../path/to/repo-1/.gitにcloneされ、
${{ github.workspace }}
${{ github.workspace }}/../path/to/repo-1に更新されてしまうことです!

ですので後続のスクリプトでworking-directory文でディレクトリを変更する必要がありません。
逆に、その他のディレクトリを参照する場合は、${{ github.workspace }}からの相対パス指定する必要があります。

actions/checkout@v2 or v3 (path無指定)

actions/checkout@v1 (path無指定)と同じ

actions/checkout@v2 or v3 (path指定)

# リポジトリ名:My-Dev
      - name: Show workspace dir (before)
        run: |
          echo "${{ github.workspace }}"
        # /home/runner/work/My-Dev/My-Devを出力

      - name: No Path
        uses: actions/checkout@v3
        with:
          path: path/to/repo-1
      # /home/runner/work/My-Dev/My-Dev/path/to/repo-1にcloneされる

      - name: Show workspace dir (after)
        run: |
          echo "${{ github.workspace }}"
        # /home/runner/work/My-Dev/My-Devを出力

パスを指定した場合、以下に一式がcloneされます。
/home/runner/work/My-Dev/My-Dev/path/to/repo-1/.git

${{ github.workspace }}
/home/runner/work/My-Dev/My-Devを指します。

${{ github.workspace }}/path/to/repo-1にcloneされ、${{ github.workspace }}は変更されません。
このディレクトリにアクセスするためには後続のスクリプトでworking-directory文でディレクトリ変更指定する必要があります。v2,v3の挙動のほうが素直ですね。

まとめ

actions/checkout@? clone先 ${{ github.workspace }}の変更
v1(path無) ${{ github.workspace }} なし
v1(path有) ${{ github.workspace }}../path/ ${{ github.workspace }}../path/に変更
v2, v3(path無) ${{ github.workspace }} なし
v2, v3(path有) ${{ github.workspace }}/path/ なし

Github Actions職人の皆様の参考になれば幸いです。

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?