概要
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職人の皆様の参考になれば幸いです。