Prepending PATH breaks the container environment if the image does not have PATH env
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:
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.
This issue was closed because it has been stalled for 15 days with no activity.