概要
Github Actionsでソースコードをcloneする場合はactions/checkout@v3
を使用しますが、ディレクトリを指定してcloneするときの挙動についてまとめます。
ディレクトリを指定する書式
uses: actions/checkout@v3
with:
path: path/to/repo-1
with
にpath
を与えると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職人の皆様の参考になれば幸いです。