runner icon indicating copy to clipboard operation
runner copied to clipboard

Prepending PATH breaks the container environment if the image does not have PATH env

Open ueokande opened this issue 1 year ago • 1 comments

Describe the bug

I have encountered an issue with using a openSUSE container. The job fails as it cannot execute any commands after prepending PATH by $GITHUB_PATH.

To Reproduce

Here is a minimal manifest to reproduce the issue:

my-job:
  runs-on: ubuntu-latest
  container: opensuse/leap
  steps:
    - run: id
    - run: echo "/tmp/.bin" >> $GITHUB_PATH
    - run: id

The job runs successfully for the Debian container (container: debian), but with the openSUSE container (container: opensuse/leap), it fails with the following error message:

OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown

Expected behavior

Any commands after prepending PATH should run successfully.

Runner Version and Platform

It can reproduce the current GitHub-hosted runners.

  • Runner version: '2.314.1'
  • Runner's OS: Ubuntu 22.04.4 LTS (GitHub hosted runners ubuntu-latest)
  • Runner: ubuntu-22.04 20240310.1.0
  • Container: The latest openSUSE official image (opensuse/leap)

What's not working?

The GitHub Actions agent prepends the user-configured PATH in the $GITHUB_PATH with the container's PATH. The agent retrieves the current PATH by docker inspect (ref.). If the docker container has a PATH configuration, the agent joins the configured PATH in the $GITHUB_PATH with the container's PATH, and pass by the -e option on the docker exec command (ref). If the docker image doesn't have a PATH configuration, the agent pass just -e PATH=/tmp/.bin option. This causes an error because sh does not exist in the passed PATH.

We can see that the openSUSE container image does not have the PATH configuration according to the output of the command docker image inspect.

$ docker inspect debian --format "{{range .Config.Env}}{{println .}}{{end}}"
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ docker inspect opensuse/leap --format "{{range .Config.Env}}{{println .}}{{end}}"
(no output)

The job output:

Screenshot 2024-03-16 at 09-37-22 make minimal · ueokande_actions-add-path@6e88c6a

ueokande avatar Mar 16 '24 09:03 ueokande

This issue is stale because it has been open 365 days with no activity. Remove stale label or comment or this will be closed in 15 days.

github-actions[bot] avatar Mar 17 '25 00:03 github-actions[bot]

This issue was closed because it has been stalled for 15 days with no activity.

github-actions[bot] avatar Apr 07 '25 00:04 github-actions[bot]