Description
It took me forever to figure out, why this action doesn't work if I run the whole workflow inside a container.
The problem is that the Github Action somehow changes/sets the HOME
variable inside the container so that the ~/.ssh/known_hosts
file is at a wrong location.
This action puts the Github PubKeys inside ~/.ssh/known_hosts
which is in the home path of the runner. But the running container normally runs as root
so ssh looks for /root/.ssh/known_hosts
which doesn't exist.
Copying the known_hosts
to this location if the workflow is running inside Docker solves the problem. As I am a total Node noob I just played around with the dist/index.js
file, but putting the following snippet after creating the known_hosts
file the SSH agent also works inside docker:
if(fs.existsSync('/.dockerenv') && child_process.execFileSync('id', ['-u']).toString().trim() === '0') {
fs.mkdirSync('/root/.ssh', { recursive: true});
fs.copyFileSync(`${homeSsh}/known_hosts`, '/root/.ssh/known_hosts');
}
I'm not sure if that somehow breaks running the action in Windows because in Windows there is no id
command. But that shouldn't be a problem because Github Actions currently doesn't allow running non-Linux containers. Also, I don't know if the root
check is even necessary because probably all containers run as root.
Would it be possible to add this snippet to your action so Docker users can also use it? :)