🙌
コンテナ実行のGitHub ActionsでGITHUB_WORKSPACEを統一して扱う
GitHub Actionsで使うコンテキストの github.workspace
と、環境変数の GITHUB_WORKSPACE
は、通常同一なのであまり意識しないで使うことがあると思う。
例えば以下のようなワークフローで、 echo $GITHUB_WORKSPACE
と echo ${{ github.workspace }}
の出力結果は同じだし、 env
に設定した MAVEN_ARGS
も想定通りの位置になる。
not-container:
runs-on: ubuntu-latest
steps:
- run: |
echo $GITHUB_WORKSPACE
echo ${{ github.workspace }}
- uses: actions/checkout@v4
with:
path: ${{ github.workspace }}
- run: |
echo $MAVEN_ARGS
ls $GITHUB_WORKSPACE
ls ${{ github.workspace }}
env:
MAVEN_ARGS: "-Dmaven.repo.local=${{ github.workspace }}/.m2/repository"
ところが、これをコンテナ上で動かすワークフローにした場合、話が変わってきて、なぜか github.workspace
と GITHUB_WORKSPACE
の値が異なる。
これはIssueとしても上がっているが、影響が大きいからか今のところ修正される様子がない。
なので、コンテナを利用したActionsでは一工夫必要で、結論としては GITHUB_WORKSPACE
に統一するのが良さそう。
github.workspace
に統一するのもやってみたんだけど、actions/chackoutの path
に github.workspace
を指定しても GITHUB_WORKSPACE
が使われるのでやめた方が良い。
結局、こんな感じで統一した。
WORKSPACE
に GITHUB_WORKSPACE
を入れて環境変数化しているのは、他のActionを使うときに with
で使えるようにするため。
withでは env.GITHUB_WORKSPACE
にアクセスできないので…
ちなみに、env
で環境変数は展開されないので、こっちの方法だとMAVEN_ARGSを env
でセットすることができない。
using-container:
runs-on: ubuntu-latest
container:
image: ubuntu:24.04
steps:
- run: |
echo $GITHUB_WORKSPACE
echo ${{ github.workspace }}
echo "WORKSPACE=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- uses: actions/checkout@v4
with:
path: ${{ env.WORKSPACE }}
- run: |
MAVEN_ARGS="-Dmaven.repo.local=${GITHUB_WORKSPACE}/.m2/repository"
echo $MAVEN_ARGS
ls $GITHUB_WORKSPACE
Discussion