🙌

コンテナ実行のGitHub ActionsでGITHUB_WORKSPACEを統一して扱う

2025/02/11に公開

GitHub Actionsで使うコンテキストの github.workspace と、環境変数の GITHUB_WORKSPACE は、通常同一なのであまり意識しないで使うことがあると思う。

例えば以下のようなワークフローで、 echo $GITHUB_WORKSPACEecho ${{ 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.workspaceGITHUB_WORKSPACE の値が異なる。
これはIssueとしても上がっているが、影響が大きいからか今のところ修正される様子がない。
https://github.com/actions/runner/issues/2058

なので、コンテナを利用したActionsでは一工夫必要で、結論としては GITHUB_WORKSPACE に統一するのが良さそう。
github.workspace に統一するのもやってみたんだけど、actions/chackoutの pathgithub.workspace を指定しても GITHUB_WORKSPACE が使われるのでやめた方が良い。

結局、こんな感じで統一した。

WORKSPACEGITHUB_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