Skip to content

github.workspace and runner.workspace are incorrect inside container jobs #2058

Open

Description

@tspascoal

Describe the bug

github.Workspace and runner.Workspace don't point to container valid paths when executing inside a container job.

The values are also inconsistent with the values for env variables GITHUB_WORKSPACE and RUNNER_WORKSPACE (both contain a valid path.

To Reproduce
Steps to reproduce the behavior:

  1. Create a workflow with the following jobs
jobs:
  runner:
    runs-on: ubuntu-latest

    steps:
      - name: dump
        run: |
          echo 'github.workspace === ${{ github.workspace }}'
          echo "GITHUB_WORKSPACE === $GITHUB_WORKSPACE"
          echo 'runner.workspace === ${{ runner.workspace }}'
          echo "RUNNER_WORKSPACE === $RUNNER_WORKSPACE"
  container:    
    runs-on: ubuntu-latest
    container:
      image: node:14.16
      
    steps:
      - name: dump
        run: |
          echo 'github.workspace === ${{ github.workspace }}'
          echo "GITHUB_WORKSPACE === $GITHUB_WORKSPACE"
          echo 'runner.workspace === ${{ runner.workspace }}'
          echo "RUNNER_WORKSPACE === $RUNNER_WORKSPACE"
  1. Check the value in the container job for ${{ github.workspace }} and $GITHUB_WORKSPACE which are not the same
  2. Check the value in the container job for ${{ runner.workspace }} and $RUNNER_WORKSPACE which are not the same

Expected behavior

On the container job github.workspaceand runner.workspace should point to a path in the directory /__w

Runner Version and Platform

Version of your runner? 2.295.0

OS of the machine running the runner? ubuntu 20.04.4 (ubuntu-latest)

What's not working?

The values for github.workspace and runner.workspace are incorrect in the container job (and inconsistent with respective env variables)

Job Log Output

If applicable, include the relevant part of the job / step log output here. All sensitive information should already be masked out, but please double-check before pasting here.

Output of container dump step in the container job

github.workspace === /home/runner/work/testContainers/testContainers
GITHUB_WORKSPACE === /__w/testContainers/testContainers
runner.workspace === /home/runner/work/testContainers
RUNNER_WORKSPACE === /__w/testContainers

Runner and Worker's Diagnostic Logs

If applicable, add relevant diagnostic log information. Logs are located in the runner's _diag folder. The runner logs are prefixed with Runner_ and the worker logs are prefixed with Worker_. Each job run correlates to a worker log. All sensitive information should already be masked out, but please double-check before pasting here.

Activity

  1. fhammerl commented on Aug 17, 2022

    @fhammerl
    Contributor

    Hi @tspascoal,

    Thanks for reporting this issue. We've investigated this issue before and are working on resolving it 👍

    2022-08-22 Update: Correctly translating github.workspace causes some regressions, considering introducing github.host-workspace

  2. self-assigned this
    on Aug 17, 2022
  3. nqb commented on Sep 21, 2022

    @nqb

    Hello @fhammerl,

    Did you make any progress on this issue ?

  4. wesbrownfavor commented on Oct 17, 2022

    @wesbrownfavor

    Has anyone figured out a workaround for this?

  5. added a commit that references this issue on Oct 25, 2022
  6. DmitriyBobrovskiy commented on Nov 9, 2022

    @DmitriyBobrovskiy

    We've started experiencing same issues since we moved to running jobs inside containers and what was the most interesting is the fact that we used in all cases ${{ github.workspace }} variable. Our pipeline looked like this:

      build:
        name: Build, Test & Publish
        runs-on: self-hosted
        container:
          image: internalregistry.io/internal-image:3
        steps:
          - uses: actions/checkout@v3
              
          - name: Build, Test and analyze
            shell: bash
            run: |
              dotnet test 
    
          - name: Publish
            shell: bash
            run: |
              for f in $(find src -name '*.csproj'); do
                d=$(dirname  $f)
                outputFolder=${{ github.workspace }}/${{ env.ARTIFACT }}/$d
                ( cd "$d" && dotnet publish --no-self-contained -c $BUILD_CONFIGURATION -o $outputFolder )
              done
    
          - name: Publish artifacts
            uses: actions/upload-artifact@v3.1.1
            with:
              name: ${{ env.ARTIFACT }}-v${{ github.run_number }}
              retention-days: 1
              path: ${{ github.workspace }}/${{ env.ARTIFACT }}/src
              if-no-files-found: error

    And $outputFolder looked like this /__w/<project_name>/<project_name>/<env.ARTIFACT>/src/SomeProject.
    But still in Publish artifacts step we were getting error:

    Error: No files were found with the provided path: /__w/<project_name>/<project_name>/<env.ARTIFACT>/src. No artifacts will be uploaded.

    Then we changed workflow to this to overcome this problem and it started working:

      build:
        name: Build, Test & Publish
        runs-on: self-hosted
        container:
          image: internalregistry.io/internal-image:3
        steps:
          - uses: actions/checkout@v3
              
          - name: Build, Test and analyze
            shell: bash
            run: |
              dotnet test 
    
          - name: Publish
            shell: bash
            run: |
              echo "GITHUB_WORKSPACE=$GITHUB_WORKSPACE" >> $GITHUB_ENV
              for f in $(find src -name '*.csproj'); do
                d=$(dirname  $f)
                outputFolder=${{ env.GITHUB_WORKSPACE }}/${{ env.ARTIFACT }}/$d
                ( cd "$d" && dotnet publish --no-self-contained -c $BUILD_CONFIGURATION -o $outputFolder )
              done
    
          - name: Publish artifacts
            uses: actions/upload-artifact@v3.1.1
            with:
              name: ${{ env.ARTIFACT }}-v${{ github.run_number }}
              retention-days: 1
              path: ${{ env.GITHUB_WORKSPACE }}/${{ env.ARTIFACT }}/src
              if-no-files-found: error

    Now paths in both steps look similar: /__w/<project_name>/<project_name>/<env.ARTIFACT>/src.
    So in short we saved $GITHUB_WORKSPACE to environment variables and started using it instead of ${{ github.workspace }}. Maybe we don't even need to save it and can just use it out of the box, didn't try this.

  7. added a commit that references this issue on Nov 23, 2022
  8. added
    keepLabel can be added as soon as we are sure the work on the issue is necessary
    on Dec 7, 2022
  9. woutersf commented on Dec 21, 2022

    @woutersf

    I started using Artifacts.
    In the first Job 1: push file to Artifact

      # Archive zip
      - name: Archive artifact
        uses: actions/upload-artifact@v3
        with:
          name: files-${{ github.run_id }}.tar.gz
          retention-days: 1
          if-no-files-found: error
          path: |
            ${{ github.workspace }}/files-${{ github.run_id }}.tar.gz
    

    In the second Job, download the file in order to use it.

      # Fetch Dump from artifact storage
      - uses: actions/download-artifact@v2
        with:
          name: files-${{ github.run_id }}.tar.gz
    

    After all other tasks: Delete the artifact, we dont want to keep it outside of the job run

      # Delete artifact
      - uses: geekyeggo/delete-artifact@v2
        with:
          name: |
              files-${{ github.run_id }}.tar.gz
    

    The infra people at our organisation wanted the workers to be ephermeral and not link in storage.
    The "workaround" with the arifacts actually works quite well.

  10. 79 remaining items

  11. alexrecuenco-hf commented on Aug 21, 2026

    @alexrecuenco-hf

    This is a bug in the runner-container-hooks I believe, it transfers the entire environment from the parent job

    The workaround I found to work best is to set the environment variables in env and use them inside the job (which is also better)

    This would make the action work for both container mode and non-container mode in my testing.

    It requires the upstream actions to change to make themselves compatible and work around this bug

    runs:
      using: "composite"
      steps:
        - id: run
          shell: bash
          run: "$GITHUB_ACTION_PATH/script.sh"
          env:
            GITHUB_ACTION_PATH: ${{ github.action_path }}
  12. added a commit that references this issue on Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Runner BugBug fix scope to the runnerbugSomething isn't workingkeepLabel can be added as soon as we are sure the work on the issue is necessary

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions