[GH-ISSUE #107] command not found (in image node:12.6-buster-slim, as opposed to GH Actions) #71

Open
opened 2026-03-01 21:39:45 +03:00 by kerem · 59 comments
Owner

Originally created by @fwilhe on GitHub (Feb 26, 2020).
Original GitHub issue: https://github.com/nektos/act/issues/107

Hi,

as documented here GitHub configures passwordless sudo, so I can have sudo in my shell scripts to perform individual commands as root.

Given this minimal workflow:

on: push
name: Test
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - run: sudo id

The result on Actions is uid=0(root) gid=0(root) groups=0(root)

Running this workflow in act yields this result:

$ act
[Test/build] 🚀  Start image=node:12.6-buster-slim
[Test/build]   🐳  docker run image=node:12.6-buster-slim entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[]
[Test/build]   🐳  docker cp src=/Users/fwilhe/temp/test-actions/. dst=/github/workspace
[Test/build] ⭐  Run sudo id
| /github/workflow/0: line 2: sudo: command not found
[Test/build]   ❌  Failure - sudo id
Error: exit with `FAILURE`: 127

Not sure what the most elegant solution would be without re-building the node:12.6-buster-slim image to install sudo and configure it passwordless. But I think the goal should be to be 1:1 compatible with actions, if possible.

Originally created by @fwilhe on GitHub (Feb 26, 2020). Original GitHub issue: https://github.com/nektos/act/issues/107 Hi, as documented [here](https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners#administrative-privileges-of-github-hosted-runners) GitHub configures passwordless sudo, so I can have sudo in my shell scripts to perform individual commands as root. Given this minimal workflow: ``` on: push name: Test jobs: build: runs-on: ubuntu-latest steps: - run: sudo id ``` The result on Actions is `uid=0(root) gid=0(root) groups=0(root)` Running this workflow in `act` yields this result: ``` $ act [Test/build] 🚀 Start image=node:12.6-buster-slim [Test/build] 🐳 docker run image=node:12.6-buster-slim entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[] [Test/build] 🐳 docker cp src=/Users/fwilhe/temp/test-actions/. dst=/github/workspace [Test/build] ⭐ Run sudo id | /github/workflow/0: line 2: sudo: command not found [Test/build] ❌ Failure - sudo id Error: exit with `FAILURE`: 127 ``` Not sure what the most elegant solution would be without re-building the `node:12.6-buster-slim` image to install sudo and configure it passwordless. But I think the goal should be to be 1:1 compatible with actions, if possible.
Author
Owner

@cplee commented on GitHub (Feb 26, 2020):

See https://github.com/nektos/act#runners.

You can customize the image used for the runs-on. I've created an image that is a match to GitHub runners, but its like 15GB!

<!-- gh-comment-id:591591424 --> @cplee commented on GitHub (Feb 26, 2020): See https://github.com/nektos/act#runners. You can customize the image used for the runs-on. I've created an image that is a match to GitHub runners, but its like 15GB!
Author
Owner

@fwilhe commented on GitHub (Feb 26, 2020):

Hi @cplee

thanks for the work you put into this.

I know that the image is configurable, and I've locally tested with an image where I installed sudo. So this is kind of a workaround, but the reason I opened this issue is that this limits compatibility with workflows that run on GitHub. My intention was to point out where the documented (and actual) behavior of Actions is unequal the default of act, which makes it less useful compared to what it could be.

As mentioned I'm not sure what solution I would propose, as maintaining separate images seems inappropriate.

<!-- gh-comment-id:591624494 --> @fwilhe commented on GitHub (Feb 26, 2020): Hi @cplee thanks for the work you put into this. I know that the image is configurable, and I've locally tested with an image where I installed sudo. So this is kind of a workaround, but the reason I opened this issue is that this limits compatibility with workflows that run on GitHub. My intention was to point out where the documented (and actual) behavior of Actions is unequal the default of `act`, which makes it less useful compared to what it could be. As mentioned I'm not sure what solution I would propose, as maintaining separate images seems inappropriate.
Author
Owner

@cplee commented on GitHub (Feb 27, 2020):

Tough problem. The runners that GitHub Actions offers are huge. I didn't feel right using an 18GB image as the default, requiring users of act to download that large of an image to run it.

I chose the node image because it was required to run node actions and still light enough. Not sure how to proceed...not sure what good enough looks like for the default docker image.

Open to ideas 🙏

<!-- gh-comment-id:591825377 --> @cplee commented on GitHub (Feb 27, 2020): Tough problem. The runners that GitHub Actions offers are huge. I didn't feel right using an 18GB image as the default, requiring users of `act` to download that large of an image to run it. I chose the `node` image because it was required to run node actions and still light enough. Not sure how to proceed...not sure what good enough looks like for the default docker image. Open to ideas 🙏
Author
Owner

@aidansteele commented on GitHub (Mar 12, 2020):

I wonder if there's a way we could make an intermediary image that has 90% of the needed CLI tools for 10% of the footprint of the giant image. The only way we could reasonably do that (beyond intuition) is scanning a corpus of public GH Actions and seeing what works.

Then again, maybe it would give people a false sense of security as these issues would crop up less often - so it would be "stranger" and more likely to result in bug reports. 🤔

<!-- gh-comment-id:598002113 --> @aidansteele commented on GitHub (Mar 12, 2020): I wonder if there's a way we could make an intermediary image that has 90% of the needed CLI tools for 10% of the footprint of the giant image. The only way we could reasonably do that (beyond intuition) is scanning a corpus of public GH Actions and seeing what works. Then again, maybe it would give people a false sense of security as these issues would crop up less often - so it would be "stranger" and more likely to result in bug reports. 🤔
Author
Owner

@aniongithub commented on GitHub (Mar 16, 2020):

Maybe act could use a .Dockerfile that the user can customize to make sure whatever tools they need is available in the used image. This could live in ~/.act/ or the current project directory?

<!-- gh-comment-id:599640932 --> @aniongithub commented on GitHub (Mar 16, 2020): Maybe act could use a <Github-runner-name>.Dockerfile that the user can customize to make sure whatever tools they need is available in the used image. This could live in `~/.act/` or the current project directory?
Author
Owner

@cplee commented on GitHub (Apr 17, 2020):

see #196 for discussion on creating a slim runner

<!-- gh-comment-id:615048031 --> @cplee commented on GitHub (Apr 17, 2020): see #196 for discussion on creating a slim runner
Author
Owner

@christopherhesse commented on GitHub (Jun 4, 2020):

I think at least the documentation should be updated, it currently states "The environment variables and filesystem are all configured to match what GitHub provides." but should say that that is only the case if you use this non-default image.

I think that docker for mac/windows is actually not very good with large images, but that an 18GB image in general isn't that crazy given the high speed internet and large disks available today.

<!-- gh-comment-id:638991617 --> @christopherhesse commented on GitHub (Jun 4, 2020): I think at least the documentation should be updated, it currently states "The environment variables and filesystem are all configured to match what GitHub provides." but should say that that is only the case if you use this non-default image. I think that docker for mac/windows is actually not very good with large images, but that an 18GB image in general isn't that crazy given the high speed internet and large disks available today.
Author
Owner

@mobileka commented on GitHub (Jun 26, 2020):

I would at least add common tools that are used in CI builds. For example, make is currently missing. I think that adding it doesn't change the size of the image that much but saves time and makes it much more convenient for a big crowd of people.

Or maybe I'm doing something wrong without realizing it and make is actually in the image :)

<!-- gh-comment-id:650181553 --> @mobileka commented on GitHub (Jun 26, 2020): I would at least add common tools that are used in CI builds. For example, `make` is currently missing. I think that adding it doesn't change the size of the image that much but saves time and makes it much more convenient for a big crowd of people. Or maybe I'm doing something wrong without realizing it and make is actually in the image :)
Author
Owner

@fwilhe commented on GitHub (Jun 26, 2020):

I would at least add common tools that are used in CI builds

I guess there is not enough agreement on what is "common". In the end you would include everything that github installs in the runner, which @cplee already did in that 20 gig image.

I have to say that building my own "runtime" image worked well for me.

The nice thing with that image is that you can also use it to run the whole action in via

jobs:
  build:
    runs-on: ubuntu-latest
    container: myimage

and to not rely on any "setup" actions. That makes it much easier to reproduce the github build on your local machine using act.

Hope that helps.

<!-- gh-comment-id:650185614 --> @fwilhe commented on GitHub (Jun 26, 2020): > I would at least add common tools that are used in CI builds I guess there is not enough agreement on what is "common". In the end you would include everything that github installs in the runner, which @cplee already did in that 20 gig image. I have to say that building my [own "runtime" image](https://github.com/SAP/devops-docker-cx-server/tree/master/project-piper-action-runtime) worked well for me. The nice thing with that image is that you can also use it to run the whole action in via ``` jobs: build: runs-on: ubuntu-latest container: myimage ``` and to not rely on any "setup" actions. That makes it much easier to reproduce the github build on your local machine using `act`. Hope that helps.
Author
Owner

@mobileka commented on GitHub (Jun 26, 2020):

I guess there is not enough agreement on what is "common"

Yes, I agree. But the initial argument against using the huge github image seems to be its size. Such tools as make are tiny and are incredibly popular in this context, so it's not clear to me what's the practical motivation of not including it into the default image.

That makes it much easier to reproduce the github build on your local machine using act.

In my opinion, most of the people interested in this project are interested in it because they already use github actions in their projects, not the other way around. Asking them to change their existing CI configuration (especially on a company/organization level) just to be able to test it with a particular tool doesn't seem to be practical.

Just my opinion though.

<!-- gh-comment-id:650196259 --> @mobileka commented on GitHub (Jun 26, 2020): > I guess there is not enough agreement on what is "common" Yes, I agree. But the initial argument against using the huge github image seems to be its size. Such tools as `make` are tiny and are incredibly popular in this context, so it's not clear to me what's the practical motivation of not including it into the default image. > That makes it much easier to reproduce the github build on your local machine using act. In my opinion, most of the people interested in this project are interested in it because they already use github actions in their projects, not the other way around. Asking them to change their existing CI configuration (especially on a company/organization level) just to be able to test it with a particular tool doesn't seem to be practical. Just my opinion though.
Author
Owner

@fwilhe commented on GitHub (Jun 26, 2020):

so it's not clear to me what's the practical motivation of not including it into the default image.

I'm not the author of act, so I can only guess that the motivation is to use an off-the-shelf image, and not to build one and then discuss with everyone what should be included or not.

Asking them to change their existing CI configuration (especially on a company level) just to be able to test it with a particular tool doesn't seem to be practical.

No, I'm not asking anyone to do that, I just say what worked for me.

<!-- gh-comment-id:650200447 --> @fwilhe commented on GitHub (Jun 26, 2020): > so it's not clear to me what's the practical motivation of not including it into the default image. I'm not the author of act, so I can only guess that the motivation is to use an off-the-shelf image, and not to build one and then discuss with everyone what should be included or not. > Asking them to change their existing CI configuration (especially on a company level) just to be able to test it with a particular tool doesn't seem to be practical. No, I'm not asking anyone to do that, I just say what worked for me.
Author
Owner

@github-actions[bot] commented on GitHub (Aug 26, 2020):

Issue is stale and will be closed in 7 days unless there is new activity

<!-- gh-comment-id:680346073 --> @github-actions[bot] commented on GitHub (Aug 26, 2020): Issue is stale and will be closed in 7 days unless there is new activity
Author
Owner

@sjiekak commented on GitHub (Sep 10, 2020):

seems like git is not inside the node:12.6-buster-slim image either. Which is counter intuitive.

<!-- gh-comment-id:690282871 --> @sjiekak commented on GitHub (Sep 10, 2020): seems like git is not inside the node:12.6-buster-slim image either. Which is counter intuitive.
Author
Owner

@gvolpe commented on GitHub (Dec 3, 2020):

Got the same issue on NixOS, running this simple workflow.

[Build/Build] 🧪  Matrix: map[java:jdk11]
[Build/Build] 🚀  Start image=node:12.6-buster-slim
[Build/Build]   🐳  docker run image=node:12.6-buster-slim entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[]
[Build/Build]   🐳  docker cp src=/home/gvolpe/workspace/scala3-typed-holes/. dst=/github/workspace
[Build/Build] ⭐  Run actions/checkout@v2.3.2
[Build/Build]   ✅  Success - actions/checkout@v2.3.2
[Build/Build] ⭐  Run Install Nix ❄️
[Build/Build]   ☁  git clone 'https://github.com/cachix/install-nix-action' # ref=v12
[Build/Build]   🐳  docker cp src=/home/gvolpe/.cache/act/cachix-install-nix-action@v12 dst=/actions/
| /actions/cachix-install-nix-action@v12/lib/install-nix.sh: line 11: sudo: command not found
| child_process.js:644
|     throw err;
|     ^
|
| Error: Command failed: /actions/cachix-install-nix-action@v12/lib/install-nix.sh
|     at checkExecSyncError (child_process.js:623:11)
|     at Object.execFileSync (child_process.js:641:15)
|     at Object.<anonymous> (/actions/cachix-install-nix-action@v12/lib/main.js:4:17)
|     at Module._compile (internal/modules/cjs/loader.js:776:30)
|     at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
|     at Module.load (internal/modules/cjs/loader.js:643:32)
|     at Function.Module._load (internal/modules/cjs/loader.js:556:12)
|     at Function.Module.runMain (internal/modules/cjs/loader.js:839:10)
|     at internal/main/run_main_module.js:17:11 {
|   status: 127,
|   signal: null,
|   output: [ null, null, null ],
|   pid: 28,
|   stdout: null,
|   stderr: null
| }
[Build/Build]   ❌  Failure - Install Nix ❄️
Error: exit with `FAILURE`: 1
<!-- gh-comment-id:737992371 --> @gvolpe commented on GitHub (Dec 3, 2020): Got the same issue on NixOS, running [this simple workflow](https://github.com/zainab-ali/scala3-typed-holes/blob/main/.github/workflows/build.yml). ```sh [Build/Build] 🧪 Matrix: map[java:jdk11] [Build/Build] 🚀 Start image=node:12.6-buster-slim [Build/Build] 🐳 docker run image=node:12.6-buster-slim entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[] [Build/Build] 🐳 docker cp src=/home/gvolpe/workspace/scala3-typed-holes/. dst=/github/workspace [Build/Build] ⭐ Run actions/checkout@v2.3.2 [Build/Build] ✅ Success - actions/checkout@v2.3.2 [Build/Build] ⭐ Run Install Nix ❄️ [Build/Build] ☁ git clone 'https://github.com/cachix/install-nix-action' # ref=v12 [Build/Build] 🐳 docker cp src=/home/gvolpe/.cache/act/cachix-install-nix-action@v12 dst=/actions/ | /actions/cachix-install-nix-action@v12/lib/install-nix.sh: line 11: sudo: command not found | child_process.js:644 | throw err; | ^ | | Error: Command failed: /actions/cachix-install-nix-action@v12/lib/install-nix.sh | at checkExecSyncError (child_process.js:623:11) | at Object.execFileSync (child_process.js:641:15) | at Object.<anonymous> (/actions/cachix-install-nix-action@v12/lib/main.js:4:17) | at Module._compile (internal/modules/cjs/loader.js:776:30) | at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10) | at Module.load (internal/modules/cjs/loader.js:643:32) | at Function.Module._load (internal/modules/cjs/loader.js:556:12) | at Function.Module.runMain (internal/modules/cjs/loader.js:839:10) | at internal/main/run_main_module.js:17:11 { | status: 127, | signal: null, | output: [ null, null, null ], | pid: 28, | stdout: null, | stderr: null | } [Build/Build] ❌ Failure - Install Nix ❄️ Error: exit with `FAILURE`: 1 ```
Author
Owner

@tyeth commented on GitHub (Dec 11, 2020):

I propose we offer the large or slim image upon initial install (I used choco) and also include a configuration command (act --default-image slim/github/other) with the addition of --global affecting all images not the current workspace. Or something along those lines.

I'm just here to avoid never using act again because like mentioned above the readme clearly states it just works out the box and matches github actions like for like but locally in docker. This is not the case, and as a lazy user (I'd imagine 90% of your userbase) I would be happy to be asked once during install or just have to set my preferred default once and forget it. But to be honest I'm confused. In my head if you take the same docker image as github does and the action specify then yes it would be large but that's what the user signed up for. Still I feel your pain and appreciate the idea of slim by default. Also I dislike installers that don't have command line options like -y to answer yes to everything.

Separately, nice to see a healthy community and thanks for all the hard work / input all. Can't wait to see this move forward, but I'd be keen to hear if anyone had similar utility by using the official local github build agent, I imagine that's probably accessible/hackable enough (able to get access to terminal and files).

<!-- gh-comment-id:743140720 --> @tyeth commented on GitHub (Dec 11, 2020): I propose we offer the large or slim image upon initial install (I used choco) and also include a configuration command (`act --default-image slim/github/other`) with the addition of `--global` affecting all images not the current workspace. Or something along those lines. I'm just here to avoid never using act again because like mentioned above the readme clearly states it just works out the box and matches github actions like for like but locally in docker. This is not the case, and as a lazy user (I'd imagine 90% of your userbase) I would be happy to be asked once during install or just have to set my preferred default once and forget it. But to be honest I'm confused. In my head if you take the same docker image as github does and the action specify then yes it would be large but that's what the user signed up for. Still I feel your pain and appreciate the idea of slim by default. Also I dislike installers that don't have command line options like `-y` to answer yes to everything. Separately, nice to see a healthy community and thanks for all the hard work / input all. Can't wait to see this move forward, but I'd be keen to hear if anyone had similar utility by using the official local github build agent, I imagine that's probably accessible/hackable enough (able to get access to terminal and files).
Author
Owner

@catthehacker commented on GitHub (Dec 11, 2020):

I'd be keen to hear if anyone had similar utility by using the official local github build agent, I imagine that's probably accessible/hackable enough (able to get access to terminal and files).

Don't use GitHub actions or run full GitHub Actions docker image then.

<!-- gh-comment-id:743147067 --> @catthehacker commented on GitHub (Dec 11, 2020): > I'd be keen to hear if anyone had similar utility by using the official local github build agent, I imagine that's probably accessible/hackable enough (able to get access to terminal and files). Don't use GitHub actions or run full GitHub Actions docker image then.
Author
Owner

@tyeth commented on GitHub (Dec 15, 2020):

How's about we enhance the readme to mention how to run the full image in the installation instructions. That will remove most of these "duplicate" issues. Basically it needs to be more than obvious that 99% of users will need to do this or face errors...

Having the sections after detailed usage instructions is a case of TLDR, and I did RTFM (mostly initially then fully after experiencing issues) but still missed it and then got my syntax wrong for my already instantiated act instance once I'd finally spotted it. The configuration file eventually solved my snafu 🤦

<!-- gh-comment-id:745535920 --> @tyeth commented on GitHub (Dec 15, 2020): How's about we enhance the readme to mention how to run the full image in the installation instructions. That will remove most of these "duplicate" issues. Basically it needs to be more than obvious that 99% of users will need to do this or face errors... Having the sections after detailed usage instructions is a case of TLDR, and I did RTFM (mostly initially then fully after experiencing issues) but still missed it and then got my syntax wrong for my already instantiated act instance once I'd finally spotted it. The configuration file eventually solved my snafu 🤦
Author
Owner

@catthehacker commented on GitHub (Jan 10, 2021):

@tyeth Would something like this be okay?
image

<!-- gh-comment-id:757535802 --> @catthehacker commented on GitHub (Jan 10, 2021): @tyeth Would something like this be okay? ![image](https://user-images.githubusercontent.com/31106839/104134111-fd485b00-5387-11eb-8952-816021fbfb3a.png)
Author
Owner

@gvolpe commented on GitHub (Jan 11, 2021):

I think that's fair @CatTheHacker . If possible, I would like to see another Small image with essential Unix tools such as sudo, curl, awk, etc.

<!-- gh-comment-id:757802970 --> @gvolpe commented on GitHub (Jan 11, 2021): I think that's fair @CatTheHacker . If possible, I would like to see another Small image with essential Unix tools such as `sudo`, `curl`, `awk`, etc.
Author
Owner

@tyeth commented on GitHub (Jan 11, 2021):

@CatTheHacker Brilliant yes, and maybe worth mentioning in that comment its using the Github official image for big (somehow more concisely). Thanks for taking a look at windows Path slash direction too.

<!-- gh-comment-id:757923836 --> @tyeth commented on GitHub (Jan 11, 2021): @CatTheHacker Brilliant yes, and maybe worth mentioning in that comment its using the Github official image for big (somehow more concisely). Thanks for taking a look at windows Path slash direction too.
Author
Owner

@fwilhe commented on GitHub (Jan 11, 2021):

It might make sense to also base the "small" image on Ubuntu. I noticed that the setup-python action for example relies on ubuntu specifically to find out which archive to download, and fails on the node image that is based on debian.

<!-- gh-comment-id:757998856 --> @fwilhe commented on GitHub (Jan 11, 2021): It might make sense to also base the "small" image on Ubuntu. I noticed that the setup-python action for example relies on ubuntu specifically to find out which archive to download, and fails on the node image that is based on debian.
Author
Owner

@catthehacker commented on GitHub (Jan 11, 2021):

I think that's fair @CatTheHacker . If possible, I would like to see another Small image with essential Unix tools such as sudo, curl, awk, etc.

@gvolpe that's not in my power, to me it also seems weird that image without sudo or curl was chosen as default. I can make such as default in my fork but it will be up to act owner if they will chose to implement that in the end.

@CatTheHacker Brilliant yes, and maybe worth mentioning in that comment its using the Github official image for big (somehow more concisely). Thanks for taking a look at windows Path slash direction too.

@tyeth There isn't any official GitHub image for Docker unless you mean act big one. I'm open for suggestions on how to write/convey the message 👍 since I'm usually not the best in describing things to people.

It might make sense to also base the "small" image on Ubuntu. I noticed that the setup-python action for example relies on ubuntu specifically to find out which archive to download, and fails on the node image that is based on debian.

@fwilhe Just, Yes. (even though I'm always for Debian and hate strongly dislike Ubuntu, but when using ubuntu-xx.xx runner, I expect it to be actually Ubuntu)

feel free to make any suggestions, I'm trying to do as much as possible for this repo in free time

<!-- gh-comment-id:758086639 --> @catthehacker commented on GitHub (Jan 11, 2021): > I think that's fair @CatTheHacker . If possible, I would like to see another Small image with essential Unix tools such as `sudo`, `curl`, `awk`, etc. @gvolpe that's not in my power, to me it also seems weird that image without `sudo` or `curl` was chosen as default. I can make such as default in my fork but it will be up to `act` owner if they will chose to implement that in the end. > @CatTheHacker Brilliant yes, and maybe worth mentioning in that comment its using the Github official image for big (somehow more concisely). Thanks for taking a look at windows Path slash direction too. @tyeth There isn't any official GitHub image for Docker unless you mean `act` big one. I'm open for suggestions on how to write/convey the message 👍 since I'm usually not the best in describing things to people. > It might make sense to also base the "small" image on Ubuntu. I noticed that the setup-python action for example relies on ubuntu specifically to find out which archive to download, and fails on the node image that is based on debian. @fwilhe Just, Yes. (even though I'm always for Debian and ~~hate~~ *strongly dislike* Ubuntu, but when using `ubuntu-xx.xx` runner, I expect it to be actually Ubuntu) *feel free to make any suggestions, I'm trying to do as much as possible for this repo in free time*
Author
Owner

@tyeth commented on GitHub (Jan 12, 2021):

@tyeth Would something like this be okay?
image

My english brain is not firing on all cylinders right now, but having seen the merge progress today I thought I'd better get back here sharpish 👀 Maybe just add to the brackets describing big, from (includes more tools) to (included tools match Github Actions)

But I'd feel better with something else 🤦 Any suggestions people?

<!-- gh-comment-id:758844525 --> @tyeth commented on GitHub (Jan 12, 2021): > @tyeth Would something like this be okay? > ![image](https://user-images.githubusercontent.com/31106839/104134111-fd485b00-5387-11eb-8952-816021fbfb3a.png) My english brain is not firing on all cylinders right now, but having seen the merge progress today I thought I'd better get back here sharpish 👀 Maybe just add to the brackets describing big, from **(includes more tools)** to **(included tools match Github Actions)** But I'd feel better with something else 🤦 Any suggestions people?
Author
Owner

@catthehacker commented on GitHub (Jan 14, 2021):

Ok, so I've been thinking a bit and came up with this

image

Looking for feedback/suggestions

<!-- gh-comment-id:760376329 --> @catthehacker commented on GitHub (Jan 14, 2021): Ok, so I've been thinking a bit and came up with this - Micro image: current `node:12.6-buster-slim` (we could build upon that image to add below image env vars but leave it with just node.js, to make it a bit more compatible) - Medium image: https://github.com/CatTheHacker/docker-images, `ubuntu:act-*`, includes required env vars for some software setup (like `ruby/setup-ruby`), includes more tools (`gawk`,`curl`,`git`,`ssh`,etc.) - Large image: `nektos/act-environments-ubuntu:18.04` - I also have been working on full GitHub Actions Runner image (+60GB), and I think of making above large image as `big` and mine as `large` ([quay.io/catthehacker/virtual-environments](https://quay.io/catthehacker/virtual-environments) | https://github.com/CatTheHacker/virtual-environments) ![image](https://user-images.githubusercontent.com/31106839/104631042-f8dbb500-569b-11eb-91bb-da40d5ca5b30.png) Looking for feedback/suggestions
Author
Owner

@xloem commented on GitHub (Feb 13, 2021):

It would be really nice if there were clear instructions on how a user can build and enable an image of their own that matches the one used by github. Here's are two clear question to answer:

  • How do I configure act to build my workflows without modification?
  • How do I configure act to use a docker image I build myself? I'm not very familiar with docker.
<!-- gh-comment-id:778657602 --> @xloem commented on GitHub (Feb 13, 2021): It would be really nice if there were clear instructions on how a user can build and enable an image of their own that matches the one used by github. Here's are two clear question to answer: - How do I configure act to build my workflows without modification? - How do I configure act to use a docker image I build myself? I'm not very familiar with docker.
Author
Owner

@catthehacker commented on GitHub (Feb 13, 2021):

@xloem

<!-- gh-comment-id:778671522 --> @catthehacker commented on GitHub (Feb 13, 2021): @xloem - What modification? - https://github.com/nektos/act#use-an-alternative-runner-image
Author
Owner

@xloem commented on GitHub (Feb 13, 2021):

Modifications to remove or install inaccessible commands. I'll ask the first question a different way:

  • How do I build a complete docker github workflow image?

I infer the way to run a custom docker image is:

  • Make an empty folder
  • Make a Dockerfile in the folder based on a simple template (needs link to example)
  • Add lines to the Dockerfile to install any missing packages (needs example format)
  • Build the Docker file into an image (needs commandline)
  • Change your .actrc to reference the name of the image like nektos/act-environments-ubuntu:18.04 in -P ubuntu-18.04=nektos/act-environments-ubuntu:18.04
<!-- gh-comment-id:778672122 --> @xloem commented on GitHub (Feb 13, 2021): Modifications to remove or install inaccessible commands. I'll ask the first question a different way: - How do I build a complete docker github workflow image? I infer the way to run a custom docker image is: - Make an empty folder - Make a `Dockerfile` in the folder based on a simple template (needs link to example) - Add lines to the Dockerfile to install any missing packages (needs example format) - Build the Docker file into an image (needs commandline) - Change your `.actrc` to reference the name of the image like nektos/act-environments-ubuntu:18.04 in `-P ubuntu-18.04=nektos/act-environments-ubuntu:18.04`
Author
Owner

@catthehacker commented on GitHub (Feb 13, 2021):

How do I build a complete docker github workflow image?

It's just not possible due to the way how Docker works. See https://github.com/actions/virtual-environments/discussions/2320#discussioncomment-328445

way to run a custom docker image

I'd say it's not our responsibility to teach how to make Docker images, there is plenty of (much better) sources that go into details on how to do that where official Docker documentation is quite good source on that.
README.md describes:

  • It requires Docker
  • How to run different Docker image

Eventually there could be link to Docker documentation regarding how to make Docker images in README.md.

<!-- gh-comment-id:778672847 --> @catthehacker commented on GitHub (Feb 13, 2021): > How do I build a complete docker github workflow image? It's just not possible due to the way how Docker works. See https://github.com/actions/virtual-environments/discussions/2320#discussioncomment-328445 > way to run a custom docker image I'd say it's not our responsibility to teach how to make Docker images, there is plenty of (much better) sources that go into details on how to do that where official Docker documentation is quite good source on that. `README.md` describes: - It requires Docker - How to run different Docker image Eventually there could be link to Docker documentation regarding how to make Docker images in `README.md`.
Author
Owner

@killthekitten commented on GitHub (Apr 12, 2021):

I was debugging another issue and wanted to check if the large image would solve it. It looks like I'm stuck with the micro image that I've chosen at the very first install. Is there a way to force-reset to the large one?

I've tried a bunch of things:

  • Reinstalling act
  • Deleting ~/.actrc
  • Deleting ~/.cache/act
  • Providing -P ... with the command
  • Deleting volumes and containers

After reinstalling it fails almost instantly and never attempts to download the large image, and it looks like containers section of the workflow overrides the runs-on.

Logs
DEBU[0000] Loading environment from /Users/user/project/.env 
DEBU[0000] Loading secrets from /Users/user/project/.act.secrets 
DEBU[0000] Loading workflows from '/Users/user/project/.github/workflows' 
DEBU[0000] Reading workflow '/Users/user/project/.github/workflows/ci.yml' 
DEBU[0000] Reading workflow '/Users/user/project/.github/workflows/deploy-production.yaml' 
DEBU[0000] Reading workflow '/Users/user/project/.github/workflows/deploy-staging.yaml' 
DEBU[0000] Planning job: test                           
DEBU[0000] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0000] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0000] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0000] HEAD matches refs/heads/main                 
DEBU[0000] using github ref: refs/heads/main            
DEBU[0000] context env => map[ACT:true] 
[Python application/test] 🚀  Start image=python:3.8.5
DEBU[0000] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0000] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0000] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0000] HEAD matches refs/heads/main                 
DEBU[0000] using github ref: refs/heads/main            
[Python application/test]   🐳  docker pull python:3.8.5
DEBU[0000] Image exists? true                           
[Python application/test]   🐳  docker volume rm act-Python-application-test
[Python application/test]   🐳  docker create image=python:3.8.5 platform=linux/amd64 entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[]
[Python application/test] Created container name=act-Python-application-test id=47772b3cbce77238f1debd13522cb1457c0bbc2727de148e9a80577d88f4d837 from image python:3.8.5 (platform: linux/amd64)
[Python application/test] ENV ==> [RUNNER_TOOL_CACHE=/opt/hostedtoolcache RUNNER_OS=Linux RUNNER_TEMP=/tmp]
[Python application/test]   🐳  docker run image=python:3.8.5 platform=linux/amd64 entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[]
[Python application/test] Starting container: 47772b3cbce77238f1debd13522cb1457c0bbc2727de148e9a80577d88f4d837
[Python application/test] Started container: 47772b3cbce77238f1debd13522cb1457c0bbc2727de148e9a80577d88f4d837
[Python application/test]   🐳  docker cp src=/Users/user/project/. dst=/Users/user/project
[Python application/test] Exec command '[mkdir -p /Users/user/project]'
DEBU[0000] Writing tarball /var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act438170973 from /Users/user/project/. 
DEBU[0000] Stripping prefix:/Users/user/project/ src:/Users/user/project/. 
[Python application/test] Extracting content from '/var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act438170973' to '/Users/user/project'
DEBU[0006] Writing entry to tarball workflow/event.json len:2 
DEBU[0006] Writing entry to tarball workflow/envs.txt len:0 
DEBU[0006] Writing entry to tarball home/.act len:0     
[Python application/test] Extracting content to '/Users/user/project'
DEBU[0006] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0006] HEAD matches refs/heads/main                 
DEBU[0006] using github ref: refs/heads/main            
DEBU[0006] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0006] HEAD matches refs/heads/main                 
DEBU[0006] using github ref: refs/heads/main            
DEBU[0006] context env => map[ACT:true] 
DEBU[0006] context env => map[ACT:true] 
[Python application/test] setupEnv => map[ACT:true]
[Python application/test] ⭐  Run actions/checkout@v2
DEBU[0006] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0006] HEAD matches refs/heads/main                 
DEBU[0006] using github ref: refs/heads/main            
[Python application/test] Skipping actions/checkout
[Python application/test]   ✅  Success - actions/checkout@v2
DEBU[0006] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0006] HEAD matches refs/heads/main                 
DEBU[0006] using github ref: refs/heads/main            
DEBU[0006] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0007] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0007] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0007] HEAD matches refs/heads/main                 
DEBU[0007] using github ref: refs/heads/main            
DEBU[0007] context env => map[ACT:true] 
DEBU[0007] Loading slug from git directory '/Users/user/project/.git' 
DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0007] Loading revision from git directory '/Users/user/project/.git' 
DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 
DEBU[0007] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' 
DEBU[0007] HEAD matches refs/heads/main                 
DEBU[0007] using github ref: refs/heads/main            
DEBU[0007] context env => map[ACT:true] 
DEBU[0007] Evaluating 'secrets['SOME_SECRET_KEY']' instead of 'secrets.SOME_SECRET_KEY' 
DEBU[0007] context env => map[ACT:true] 
DEBU[0007] Evaluating 'secrets['SOME_SECRET_KEY']' instead of 'secrets.SOME_SECRET_KEY' 
[Python application/test] setupEnv => map[ACT:true]
[Python application/test] ⭐  Run webfactory/ssh-agent@v0.5.2
[Python application/test]   ☁  git clone 'https://github.com/webfactory/ssh-agent' # ref=v0.5.2
[Python application/test]   cloning https://github.com/webfactory/ssh-agent to /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2
[Python application/test] Cloned https://github.com/webfactory/ssh-agent to /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2
[Python application/test] Checked out v0.5.2
DEBU[0008] Read action &{webfactory/ssh-agent  Run `ssh-agent` and load an SSH key to access other private repositories map[ssh-auth-sock:{Where to place the SSH Agent auth socket false } ssh-private-key:{Private SSH key to register in the SSH agent true }] map[] {node12 map[] dist/index.js  [] []} {yellow loader}} from '/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2/action.yml' 
DEBU[0008] About to run action &{webfactory/ssh-agent  Run `ssh-agent` and load an SSH key to access other private repositories map[ssh-auth-sock:{Where to place the SSH Agent auth socket false } ssh-private-key:{Private SSH key to register in the SSH agent true }] map[] {node12 map[] dist/index.js  [] []} {yellow loader}} 
DEBU[0008] type=3 actionDir=/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 actionPath= Workdir=/Users/user/project ActionCacheDir=/Users/user/.cache/act actionName=webfactory-ssh-agent@v0.5.2 containerActionDir=/actions 
DEBU[0008] Removing /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2/.gitignore before docker cp 
[Python application/test]   🐳  docker cp src=/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 dst=/actions/
[Python application/test] Exec command '[mkdir -p /actions/]'
DEBU[0008] Writing tarball /var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act810834712 from /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 
DEBU[0008] Stripping prefix:/Users/user/.cache/act/ src:/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 
[Python application/test] Extracting content from '/var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act810834712' to '/actions/'
DEBU[0008] executing remote job container: [node /actions/webfactory-ssh-agent@v0.5.2/dist/index.js] 
[Python application/test] Exec command '[node /actions/webfactory-ssh-agent@v0.5.2/dist/index.js]'
| OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "node": executable file not found in $PATH: unknown
[Python application/test]   ❌  Failure - webfactory/ssh-agent@v0.5.2
DEBU[0008] exit with `FAILURE`: 126                     
DEBU[0008] exit with `FAILURE`: 126                     
DEBU[0008] exit with `FAILURE`: 126                     
Error: exit with `FAILURE`: 126
<!-- gh-comment-id:817827770 --> @killthekitten commented on GitHub (Apr 12, 2021): I was debugging another issue and wanted to check if the large image would solve it. It looks like I'm stuck with the micro image that I've chosen at the very first install. Is there a way to force-reset to the large one? I've tried a bunch of things: - Reinstalling `act` - Deleting `~/.actrc` - Deleting `~/.cache/act` - Providing `-P ...` with the command - Deleting volumes and containers After reinstalling it fails almost instantly and never attempts to download the large image, and it looks like `containers` section of the workflow overrides the `runs-on`. <details> <summary>Logs</summary> ``` DEBU[0000] Loading environment from /Users/user/project/.env DEBU[0000] Loading secrets from /Users/user/project/.act.secrets DEBU[0000] Loading workflows from '/Users/user/project/.github/workflows' DEBU[0000] Reading workflow '/Users/user/project/.github/workflows/ci.yml' DEBU[0000] Reading workflow '/Users/user/project/.github/workflows/deploy-production.yaml' DEBU[0000] Reading workflow '/Users/user/project/.github/workflows/deploy-staging.yaml' DEBU[0000] Planning job: test DEBU[0000] Loading slug from git directory '/Users/user/project/.git' DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0000] Loading revision from git directory '/Users/user/project/.git' DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0000] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0000] HEAD matches refs/heads/main DEBU[0000] using github ref: refs/heads/main DEBU[0000] context env => map[ACT:true] [Python application/test] 🚀 Start image=python:3.8.5 DEBU[0000] Loading slug from git directory '/Users/user/project/.git' DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0000] Loading revision from git directory '/Users/user/project/.git' DEBU[0000] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0000] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0000] HEAD matches refs/heads/main DEBU[0000] using github ref: refs/heads/main [Python application/test] 🐳 docker pull python:3.8.5 DEBU[0000] Image exists? true [Python application/test] 🐳 docker volume rm act-Python-application-test [Python application/test] 🐳 docker create image=python:3.8.5 platform=linux/amd64 entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[] [Python application/test] Created container name=act-Python-application-test id=47772b3cbce77238f1debd13522cb1457c0bbc2727de148e9a80577d88f4d837 from image python:3.8.5 (platform: linux/amd64) [Python application/test] ENV ==> [RUNNER_TOOL_CACHE=/opt/hostedtoolcache RUNNER_OS=Linux RUNNER_TEMP=/tmp] [Python application/test] 🐳 docker run image=python:3.8.5 platform=linux/amd64 entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[] [Python application/test] Starting container: 47772b3cbce77238f1debd13522cb1457c0bbc2727de148e9a80577d88f4d837 [Python application/test] Started container: 47772b3cbce77238f1debd13522cb1457c0bbc2727de148e9a80577d88f4d837 [Python application/test] 🐳 docker cp src=/Users/user/project/. dst=/Users/user/project [Python application/test] Exec command '[mkdir -p /Users/user/project]' DEBU[0000] Writing tarball /var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act438170973 from /Users/user/project/. DEBU[0000] Stripping prefix:/Users/user/project/ src:/Users/user/project/. [Python application/test] Extracting content from '/var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act438170973' to '/Users/user/project' DEBU[0006] Writing entry to tarball workflow/event.json len:2 DEBU[0006] Writing entry to tarball workflow/envs.txt len:0 DEBU[0006] Writing entry to tarball home/.act len:0 [Python application/test] Extracting content to '/Users/user/project' DEBU[0006] Loading slug from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] Loading revision from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0006] HEAD matches refs/heads/main DEBU[0006] using github ref: refs/heads/main DEBU[0006] Loading slug from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] Loading revision from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0006] HEAD matches refs/heads/main DEBU[0006] using github ref: refs/heads/main DEBU[0006] context env => map[ACT:true] DEBU[0006] context env => map[ACT:true] [Python application/test] setupEnv => map[ACT:true] [Python application/test] ⭐ Run actions/checkout@v2 DEBU[0006] Loading slug from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] Loading revision from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0006] HEAD matches refs/heads/main DEBU[0006] using github ref: refs/heads/main [Python application/test] Skipping actions/checkout [Python application/test] ✅ Success - actions/checkout@v2 DEBU[0006] Loading slug from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] Loading revision from git directory '/Users/user/project/.git' DEBU[0006] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0006] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0006] HEAD matches refs/heads/main DEBU[0006] using github ref: refs/heads/main DEBU[0006] Loading slug from git directory '/Users/user/project/.git' DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0007] Loading revision from git directory '/Users/user/project/.git' DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0007] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0007] HEAD matches refs/heads/main DEBU[0007] using github ref: refs/heads/main DEBU[0007] context env => map[ACT:true] DEBU[0007] Loading slug from git directory '/Users/user/project/.git' DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0007] Loading revision from git directory '/Users/user/project/.git' DEBU[0007] Found revision: efaea79abd1368aab365933c69b326d3542a9bd5 DEBU[0007] HEAD points to 'efaea79abd1368aab365933c69b326d3542a9bd5' DEBU[0007] HEAD matches refs/heads/main DEBU[0007] using github ref: refs/heads/main DEBU[0007] context env => map[ACT:true] DEBU[0007] Evaluating 'secrets['SOME_SECRET_KEY']' instead of 'secrets.SOME_SECRET_KEY' DEBU[0007] context env => map[ACT:true] DEBU[0007] Evaluating 'secrets['SOME_SECRET_KEY']' instead of 'secrets.SOME_SECRET_KEY' [Python application/test] setupEnv => map[ACT:true] [Python application/test] ⭐ Run webfactory/ssh-agent@v0.5.2 [Python application/test] ☁ git clone 'https://github.com/webfactory/ssh-agent' # ref=v0.5.2 [Python application/test] cloning https://github.com/webfactory/ssh-agent to /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 [Python application/test] Cloned https://github.com/webfactory/ssh-agent to /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 [Python application/test] Checked out v0.5.2 DEBU[0008] Read action &{webfactory/ssh-agent Run `ssh-agent` and load an SSH key to access other private repositories map[ssh-auth-sock:{Where to place the SSH Agent auth socket false } ssh-private-key:{Private SSH key to register in the SSH agent true }] map[] {node12 map[] dist/index.js [] []} {yellow loader}} from '/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2/action.yml' DEBU[0008] About to run action &{webfactory/ssh-agent Run `ssh-agent` and load an SSH key to access other private repositories map[ssh-auth-sock:{Where to place the SSH Agent auth socket false } ssh-private-key:{Private SSH key to register in the SSH agent true }] map[] {node12 map[] dist/index.js [] []} {yellow loader}} DEBU[0008] type=3 actionDir=/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 actionPath= Workdir=/Users/user/project ActionCacheDir=/Users/user/.cache/act actionName=webfactory-ssh-agent@v0.5.2 containerActionDir=/actions DEBU[0008] Removing /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2/.gitignore before docker cp [Python application/test] 🐳 docker cp src=/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 dst=/actions/ [Python application/test] Exec command '[mkdir -p /actions/]' DEBU[0008] Writing tarball /var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act810834712 from /Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 DEBU[0008] Stripping prefix:/Users/user/.cache/act/ src:/Users/user/.cache/act/webfactory-ssh-agent@v0.5.2 [Python application/test] Extracting content from '/var/folders/5b/k1by84y17ln1mxfr8nczl3hw0000gn/T/act810834712' to '/actions/' DEBU[0008] executing remote job container: [node /actions/webfactory-ssh-agent@v0.5.2/dist/index.js] [Python application/test] Exec command '[node /actions/webfactory-ssh-agent@v0.5.2/dist/index.js]' | OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "node": executable file not found in $PATH: unknown [Python application/test] ❌ Failure - webfactory/ssh-agent@v0.5.2 DEBU[0008] exit with `FAILURE`: 126 DEBU[0008] exit with `FAILURE`: 126 DEBU[0008] exit with `FAILURE`: 126 Error: exit with `FAILURE`: 126 ``` </details>
Author
Owner

@catthehacker commented on GitHub (Apr 12, 2021):

@killthekitten
You are using python:3.8.5 according to your log.
To get default image survey, .actrc cannot exist in ~, ~/.config/ and current directory where act is run or you can just replace image yourself, those are described in README

<!-- gh-comment-id:817842408 --> @catthehacker commented on GitHub (Apr 12, 2021): @killthekitten You are using `python:3.8.5` according to your log. To get default image survey, `.actrc` cannot exist in `~`, `~/.config/` and current directory where `act` is run or you can just replace image yourself, those are described in README
Author
Owner

@killthekitten commented on GitHub (Apr 12, 2021):

@catthehacker thanks for the fast response!

To get default image survey, .actrc cannot exist in ~,

Did you mean it can exist or cannot exist?

I tried replacing the python runtime with no big success:

act -j test --secret-file .act.secrets -v -P python:3.8.5=nektos/act-environments-ubuntu:18.04

Maybe it has to do with runs-on and container defined at the same time? It comes from this section of my workflow:

jobs:
  test:
    runs-on: ubuntu-latest
    container:
      image: python:3.8.5
<!-- gh-comment-id:817857910 --> @killthekitten commented on GitHub (Apr 12, 2021): @catthehacker thanks for the fast response! > To get default image survey, .actrc **cannot** exist in ~, Did you mean it **can** exist or **cannot** exist? I tried replacing the python runtime with no big success: ``` act -j test --secret-file .act.secrets -v -P python:3.8.5=nektos/act-environments-ubuntu:18.04 ``` Maybe it has to do with `runs-on` and `container` defined at the same time? It comes from this section of my workflow: ```yaml jobs: test: runs-on: ubuntu-latest container: image: python:3.8.5 ```
Author
Owner

@catthehacker commented on GitHub (Apr 12, 2021):

container will use the image you defined in container:. -P is used to replace image used in runs-on:.

<!-- gh-comment-id:817865288 --> @catthehacker commented on GitHub (Apr 12, 2021): `container` will use the image you defined in `container:`. `-P` is used to replace image used in `runs-on:`.
Author
Owner

@jonico commented on GitHub (Apr 17, 2021):

@catthehacker : First of all I like to show my fullest appreciation for all the work you were doing to provide access to multiple image sizes. I was wondering whether in order to avoid many duplicate issues here - one could create symlinks to tools that have not been included in the smaller images to a file that once executed provides a message explaining that you need a larger image, point to this issue and then error out?

<!-- gh-comment-id:821784143 --> @jonico commented on GitHub (Apr 17, 2021): @catthehacker : First of all I like to show my fullest appreciation for all the work you were doing to provide access to multiple image sizes. I was wondering whether in order to avoid many duplicate issues here - one could create symlinks to tools that have not been included in the smaller images to a file that once executed provides a message explaining that you need a larger image, point to this issue and then error out?
Author
Owner

@catthehacker commented on GitHub (Apr 17, 2021):

@jonico that's an amazing idea, I'll try to work on that.

<!-- gh-comment-id:821786104 --> @catthehacker commented on GitHub (Apr 17, 2021): @jonico that's an amazing idea, I'll try to work on that.
Author
Owner

@jonico commented on GitHub (Apr 17, 2021):

@jonico that's an amazing idea, I'll try to work on that.

If one were to use an unusual exit code for that script, one may also have special treatment of this error code one the docker container exited - will definitely try out any suggestions you do 😊

<!-- gh-comment-id:821791113 --> @jonico commented on GitHub (Apr 17, 2021): > @jonico that's an amazing idea, I'll try to work on that. > If one were to use an unusual exit code for that script, one may also have special treatment of this error code one the docker container exited - will definitely try out any suggestions you do 😊
Author
Owner

@catthehacker commented on GitHub (Apr 17, 2021):

I would use already existing exit code 127 which stands for command not found but I will use command-not-found or write small Go program to make proper error message and add it to image.

<!-- gh-comment-id:821796772 --> @catthehacker commented on GitHub (Apr 17, 2021): I would use already existing exit code `127` which stands for command not found but I will use [`command-not-found`](https://packages.ubuntu.com/groovy/command-not-found) or write small Go program to make proper error message and add it to image.
Author
Owner

@jonico commented on GitHub (May 17, 2021):

@catthehacker: I will feature nektos/act in GitHub's upcoming summer fest. I figured you are in a similar time zone and might be interested in listening in. Here is the registration link (everybody is welcome - and there will be :octocat: swag for the first 200 registrants): https://resources.github.com/webcasts/Summerfest-2021-South-Europe/

<!-- gh-comment-id:842463304 --> @jonico commented on GitHub (May 17, 2021): @catthehacker: I will feature nektos/act in GitHub's upcoming summer fest. I figured you are in a similar time zone and might be interested in listening in. Here is the registration link (everybody is welcome - and there will be :octocat: swag for the first 200 registrants): https://resources.github.com/webcasts/Summerfest-2021-South-Europe/
Author
Owner

@catthehacker commented on GitHub (May 18, 2021):

@jonico I've tried to work on the not installed tools and:

  • There is just too many tools in GHA runners to create symlinks for (and later maintain that)
  • bash command_not_found_handle won't work because like in GHA, we don't load profiles and rc files
<!-- gh-comment-id:843548645 --> @catthehacker commented on GitHub (May 18, 2021): @jonico I've tried to work on the not installed tools and: - There is just too many tools in GHA runners to create symlinks for (and later maintain that) - `bash` `command_not_found_handle` won't work because like in GHA, we don't load profiles and `rc` files
Author
Owner

@jonico commented on GitHub (May 18, 2021):

Would it be possible to intercept the 128 / command not found when the docker container already exited?

<!-- gh-comment-id:843570677 --> @jonico commented on GitHub (May 18, 2021): Would it be possible to intercept the 128 / command not found when the docker container already exited?
Author
Owner

@catthehacker commented on GitHub (May 25, 2021):

Sounds possible but haven't got around that yet.

<!-- gh-comment-id:847845331 --> @catthehacker commented on GitHub (May 25, 2021): Sounds possible but haven't got around that yet.
Author
Owner

@catthehacker commented on GitHub (Aug 11, 2021):

@jonico
image

<!-- gh-comment-id:896432126 --> @catthehacker commented on GitHub (Aug 11, 2021): @jonico ![image](https://user-images.githubusercontent.com/31106839/128956413-966c5ac7-e8f7-4c88-95cc-fb3bb2f1cd12.png)
Author
Owner

@jonico commented on GitHub (Aug 11, 2021):

@catthehacker: Wonderful 😻 - I would suggest to change the error message to
"Please see https://github.com/nektos/act/issues/107 for potential reasons and solutions." but this is probably just 🚲 shedding 😊

<!-- gh-comment-id:896607859 --> @jonico commented on GitHub (Aug 11, 2021): @catthehacker: Wonderful 😻 - I would suggest to change the error message to "Please see https://github.com/nektos/act/issues/107 for potential reasons and solutions." but this is probably just 🚲 shedding 😊
Author
Owner

@RyanMeulenkamp commented on GitHub (Oct 26, 2022):

Why isn't the gh command installed though?

<!-- gh-comment-id:1291784929 --> @RyanMeulenkamp commented on GitHub (Oct 26, 2022): Why isn't the `gh` command installed though?
Author
Owner

@Waltari10 commented on GitHub (Feb 24, 2023):

So I tried using the medium instead of slim for git, but noticed medium doesn't have yarn :/

<!-- gh-comment-id:1443559205 --> @Waltari10 commented on GitHub (Feb 24, 2023): So I tried using the medium instead of slim for git, but noticed medium doesn't have yarn :/
Author
Owner

@fwilhe2 commented on GitHub (Apr 10, 2023):

Not sure if this is useful for anyone, but out of curiosity I've tried to build a 'minimal' runner image based on github's packer scripts. The repo is here, the image is published to DockerHub both for x86 and arm.

The idea is to keep the pre-installed amount of tools low because I assume most workflows anyway use setup-* actions.

I know about existing images, but maybe mine fill a gap and are useful for some people?

Let me know if this is useful to you.

<!-- gh-comment-id:1502148879 --> @fwilhe2 commented on GitHub (Apr 10, 2023): Not sure if this is useful for anyone, but out of curiosity I've tried to build a 'minimal' runner image based on github's packer scripts. The repo is [here](https://github.com/fwilhe2/act-runner-image), the image is published to DockerHub both for x86 and arm. The idea is to keep the pre-installed amount of tools low because I assume most workflows anyway use `setup-*` actions. I know about existing images, but maybe mine fill a gap and are useful for some people? Let me know if this is useful to you.
Author
Owner

@alexeysergeev-cm commented on GitHub (Dec 31, 2023):

Why isn't the gh command installed though?

Were you able to resolve this? Should I install gh first via brew install?

<!-- gh-comment-id:1873041351 --> @alexeysergeev-cm commented on GitHub (Dec 31, 2023): > Why isn't the `gh` command installed though? Were you able to resolve this? Should I install `gh` first via `brew install`?
Author
Owner

@RichardJECooke commented on GitHub (Feb 20, 2024):

Is this the command I'm supposed to use please? It doesn't seem to spend time pulling any bigger image though -

./act -P catthehacker/ubuntu:custom-latest-20240215 -s GITHUB_TOKEN=abIUV8V push

I still get this error

[Test FusionAuth login/run-tests]   ✅  Success - Main Get docker-compose.yaml
[Test FusionAuth login/run-tests] ⭐ Run Main Start FusionAuth
[Test FusionAuth login/run-tests]   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-1.sh] user= workdir=faDockerComposeFilePath
| /var/run/act/workflow/1-composite-1.sh: line 2: docker: command not found
[Test FusionAuth login/run-tests]   ❌  Failure - Main Start FusionAuth
[Test FusionAuth login/run-tests] exitcode '127': command not found, please refer to https://github.com/nektos/act/issues/107 for more information

same as when I tried running

./act -P ubuntu-22.04=-self-hosted 
<!-- gh-comment-id:1953821575 --> @RichardJECooke commented on GitHub (Feb 20, 2024): Is this the command I'm supposed to use please? It doesn't seem to spend time pulling any bigger image though - ```sh ./act -P catthehacker/ubuntu:custom-latest-20240215 -s GITHUB_TOKEN=abIUV8V push ``` I still get this error ```sh [Test FusionAuth login/run-tests] ✅ Success - Main Get docker-compose.yaml [Test FusionAuth login/run-tests] ⭐ Run Main Start FusionAuth [Test FusionAuth login/run-tests] 🐳 docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-1.sh] user= workdir=faDockerComposeFilePath | /var/run/act/workflow/1-composite-1.sh: line 2: docker: command not found [Test FusionAuth login/run-tests] ❌ Failure - Main Start FusionAuth [Test FusionAuth login/run-tests] exitcode '127': command not found, please refer to https://github.com/nektos/act/issues/107 for more information ``` same as when I tried running ```sh ./act -P ubuntu-22.04=-self-hosted ```
Author
Owner

@rseymour commented on GitHub (Feb 21, 2024):

What's interesting is the runner links are broken above, and I would love to know how to use the 18GB runner right now.

<!-- gh-comment-id:1957716935 --> @rseymour commented on GitHub (Feb 21, 2024): What's interesting is the runner links are broken above, and I would love to know how to use the 18GB runner right now.
Author
Owner

@rseymour commented on GitHub (Feb 21, 2024):

For those looking, the docs on runners have apparently moved here: https://nektosact.com/usage/runners.html also my issue is one of surprise. The first run I was asked how large an env would I like. I chose micro, because I'm just starting. By making that uninformed choice, I spent the last couple hours trying to figure out what issue 107 meant and how to do -P ubuntu-latest=catthehacker/ubuntu:act-latest once I finally found the documentation. Forcing a user on first run to make a size choice with no obvious way to change said choice is a great way to trap folks in this non-intuitive error.

<!-- gh-comment-id:1957722088 --> @rseymour commented on GitHub (Feb 21, 2024): For those looking, the docs on runners have apparently moved here: https://nektosact.com/usage/runners.html also my issue is one of surprise. The first run I was asked how large an env would I like. I chose micro, because I'm just starting. By making that uninformed choice, I spent the last couple hours trying to figure out what issue 107 meant and how to do `-P ubuntu-latest=catthehacker/ubuntu:act-latest` once I finally found the documentation. Forcing a user on first run to make a size choice with no obvious way to change said choice is a great way to trap folks in this non-intuitive error.
Author
Owner

@munapower commented on GitHub (Mar 13, 2024):

So I tried using the medium instead of slim for git, but noticed medium doesn't have yarn :/

I added these steps and act was able to add yarn with that

      - name: Set Node.js 16.x
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
      - name: Run install
        uses: Borales/actions-yarn@v5.0.0
        with:
          cmd: install # will run `yarn install` command
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # if needed
      - name: 🚀 Build bundle
        uses: Borales/actions-yarn@v5.0.0
        with:
          cmd: run build
          dir: ./
<!-- gh-comment-id:1995496273 --> @munapower commented on GitHub (Mar 13, 2024): > So I tried using the medium instead of slim for git, but noticed medium doesn't have yarn :/ I added these steps and act was able to add `yarn` with that ``` - name: Set Node.js 16.x uses: actions/setup-node@v3 with: node-version: 16.x - name: Run install uses: Borales/actions-yarn@v5.0.0 with: cmd: install # will run `yarn install` command env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # if needed - name: 🚀 Build bundle uses: Borales/actions-yarn@v5.0.0 with: cmd: run build dir: ./ ```
Author
Owner

@lewsmith commented on GitHub (Apr 18, 2024):

Hi,

as documented here GitHub configures passwordless sudo, so I can have sudo in my shell scripts to perform individual commands as root.

Given this minimal workflow:

on: push
name: Test
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - run: sudo id

The result on Actions is uid=0(root) gid=0(root) groups=0(root)

Running this workflow in act yields this result:

$ act
[Test/build] 🚀  Start image=node:12.6-buster-slim
[Test/build]   🐳  docker run image=node:12.6-buster-slim entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[]
[Test/build]   🐳  docker cp src=/Users/fwilhe/temp/test-actions/. dst=/github/workspace
[Test/build] ⭐  Run sudo id
| /github/workflow/0: line 2: sudo: command not found
[Test/build]   ❌  Failure - sudo id
Error: exit with `FAILURE`: 127

Not sure what the most elegant solution would be without re-building the node:12.6-buster-slim image to install sudo and configure it passwordless. But I think the goal should be to be 1:1 compatible with actions, if possible.

Very old issue, but I'm getting around it by installing sudo if env.ACT is true. That way only 4 extra lines are needed. E.g.

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Install Act dependencies
        if: ${{ env.ACT }}
        run: |
          apt-get update && apt-get install sudo -y

      - name: Install dependencies
        run: |
          sudo apt-get update && sudo apt-get install curl build-essential -y
<!-- gh-comment-id:2063855006 --> @lewsmith commented on GitHub (Apr 18, 2024): > Hi, > > as documented [here](https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners#administrative-privileges-of-github-hosted-runners) GitHub configures passwordless sudo, so I can have sudo in my shell scripts to perform individual commands as root. > > Given this minimal workflow: > > ``` > on: push > name: Test > jobs: > build: > runs-on: ubuntu-latest > steps: > - run: sudo id > ``` > > The result on Actions is `uid=0(root) gid=0(root) groups=0(root)` > > Running this workflow in `act` yields this result: > > ``` > $ act > [Test/build] 🚀 Start image=node:12.6-buster-slim > [Test/build] 🐳 docker run image=node:12.6-buster-slim entrypoint=["/usr/bin/tail" "-f" "/dev/null"] cmd=[] > [Test/build] 🐳 docker cp src=/Users/fwilhe/temp/test-actions/. dst=/github/workspace > [Test/build] ⭐ Run sudo id > | /github/workflow/0: line 2: sudo: command not found > [Test/build] ❌ Failure - sudo id > Error: exit with `FAILURE`: 127 > ``` > > Not sure what the most elegant solution would be without re-building the `node:12.6-buster-slim` image to install sudo and configure it passwordless. But I think the goal should be to be 1:1 compatible with actions, if possible. Very old issue, but I'm getting around it by installing sudo if `env.ACT` is true. That way only 4 extra lines are needed. E.g. ```yaml jobs: test: runs-on: ubuntu-latest steps: - name: Install Act dependencies if: ${{ env.ACT }} run: | apt-get update && apt-get install sudo -y - name: Install dependencies run: | sudo apt-get update && sudo apt-get install curl build-essential -y ```
Author
Owner

@gliptak commented on GitHub (Apr 28, 2025):

do newer Node images also exhibit this behaviour?

<!-- gh-comment-id:2835859407 --> @gliptak commented on GitHub (Apr 28, 2025): do newer Node images also exhibit this behaviour?
Author
Owner

@will-e-yams commented on GitHub (Aug 12, 2025):

See https://github.com/nektos/act#runners.

You can customize the image used for the runs-on. I've created an image that is a match to GitHub runners, but its like 15GB!

This link is dead.

<!-- gh-comment-id:3181112833 --> @will-e-yams commented on GitHub (Aug 12, 2025): > See https://github.com/nektos/act#runners. > > You can customize the image used for the runs-on. I've created an image that is a match to GitHub runners, but its like 15GB! This link is dead.
Author
Owner

@gliptak commented on GitHub (Aug 13, 2025):

https://nektosact.com/usage/runners.html

<!-- gh-comment-id:3181879620 --> @gliptak commented on GitHub (Aug 13, 2025): https://nektosact.com/usage/runners.html
Author
Owner

@imide commented on GitHub (Aug 27, 2025):

Medium lacks mvn FYI...

<!-- gh-comment-id:3228874299 --> @imide commented on GitHub (Aug 27, 2025): Medium lacks mvn FYI...
Author
Owner

@panekj commented on GitHub (Aug 27, 2025):

Medium lacks mvn FYI...

Medium images lack everything that isn't base requirement for using Actions, so it contains git, couple other most common CLI tools and NodeJS/Docker (since that's required to run docker/node actions) + few bits to make environment more compatible/acting like GHA runners.

If you know you are using specific language tooling or something that's more sophisticated, then use full images. Medium images are only meant to be a better default than nodejs image.

<!-- gh-comment-id:3228898452 --> @panekj commented on GitHub (Aug 27, 2025): > Medium lacks mvn FYI... Medium images lack everything that isn't base requirement for using Actions, so it contains `git`, couple other most common CLI tools and NodeJS/Docker (since that's required to run docker/node actions) + few bits to make environment more compatible/acting like GHA runners. If you know you are using specific language tooling or something that's more sophisticated, then use full images. Medium images are only meant to be a better default than nodejs image.
Author
Owner

@JustCryen commented on GitHub (Oct 6, 2025):

Hi, I started using Github Local Actions extension for VScode. This is also my first contact with act.
I am using the "Medium" image and I'm trying to run it on a zmk repository (zmk is a tool / firmware for programmable keyboards and it is using Github Actions)

The failure seems to be related to a 'node' command and since NodeJS is supposed to work on a Medium image I'm not sure where the problem actually is.

I could try the Large image but currently I'm not sure if it will fix my problem, its size is actually quite a lot.
If there is another option I would rather try it first before moving to the Large image.
I'm not sure if any other language is being used here.

The build config file in my repository points to this build file in a remote / main project repo:
https://github.com/zmkfirmware/zmk/blob/main/.github/workflows/build-user-config.yml

I'll include shortened result of not just one Failure, but every place a Failure occurred. If you prefer a full log just ask.

[build/Reusable user config build/Build-2              ] ⭐ Run Main Cache west modules
[build/Reusable user config build/Build-2              ]   🐳  docker cp src=/home/cryen/.cache/act/actions-cache@v4/ dst=/var/run/act/actions/actions-cache@v4/
[build/Reusable user config build/Build-1              ] 🧪  Matrix: map[board:seeeduino_xiao_ble shield:corne_xiao_v2_left snippet:studio-rpc-usb-uart]
[build/Reusable user config build/Build-2              ]   🐳  docker exec cmd=[node /var/run/act/actions/actions-cache@v4/dist/restore/index.js] user= workdir=
[build/Reusable user config build/Build-1              ] ⭐ Run Main Checkout
[build/Reusable user config build/Build-1              ]   🐳  docker cp src=/home/cryen/git/cryen/zmk-corne-xiao-handwired/. dst=/home/cryen/git/cryen/zmk-corne-xiao-handwired
[build/Reusable user config build/Build-1              ]   ✅  Success - Main Checkout [25.891328ms]
[build/Reusable user config build/Build-2              ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH
[build/Reusable user config build/Build-2              ] Failed but continue next step
[build/Reusable user config build/Build-2              ]   ❌  Failure - Main Cache west modules [350.778014ms]
[build/Reusable user config build/Build-1              ] ⭐ Run Main Create build directory
[…]
[build/Reusable user config build/Build-1              ] ⭐ Run Main Cache west modules
[build/Reusable user config build/Build-1              ]   🐳  docker cp src=/home/cryen/.cache/act/actions-cache@v4/ dst=/var/run/act/actions/actions-cache@v4/
[build/Reusable user config build/Build-2              ]   🐳  docker exec cmd=[sh -e /var/run/act/workflow/6.sh] user= workdir=/tmp/zmk-config
[build/Reusable user config build/Build-1              ]   🐳  docker exec cmd=[node /var/run/act/actions/actions-cache@v4/dist/restore/index.js] user= workdir=
[build/Reusable user config build/Build-2              ] === updating zmk (zmk):
[build/Reusable user config build/Build-2              ] --- zmk: initializing
[build/Reusable user config build/Build-2              ] Initialized empty Git repository in /tmp/zmk-config/zmk/.git/
[build/Reusable user config build/Build-2              ] --- zmk: fetching, need revision main
[build/Reusable user config build/Build-1              ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH
[build/Reusable user config build/Build-1              ] Failed but continue next step
[build/Reusable user config build/Build-1              ]   ❌  Failure - Main Cache west modules [325.524505ms]
[build/Reusable user config build/Build-1              ] ⭐ Run Main West Init
[…]
[build/Reusable user config build/Build-1              ] [232/324] Building C object zephyr/subsys/bluetooth/controller/CMakeFiles/subsys__bluetooth__controller.dir/ll_sw/nordic/hal/nrf5/mayfly.c.obj
[build/Reusable user config build/Build-1              ] [233/324] Building C object zephyr/subsys/bluetooth/controller/CMakeFiles/subsys__bluetooth__controller.dir/ll_sw/nordic/lll/lll.c.obj
[build/Reusable user config build/Build-2              ]   🐳  docker exec cmd=[node /var/run/act/actions/actions-upload-artifact@v4/dist/upload/index.js] user= workdir=
[build/Reusable user config build/Build-1              ] [234/324] Building C object zephyr/drivers/adc/CMakeFiles/drivers__adc.dir/adc_common.c.obj
[build/Reusable user config build/Build-2              ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH
[build/Reusable user config build/Build-2              ]   ❌  Failure - Main Archive (corne_xiao_v2_right - seeeduino_xiao_ble) [952.431467ms]
[build/Reusable user config build/Build-2              ] exitcode '127': command not found, please refer to https://github.com/nektos/act/issues/107 for more information
[build/Reusable user config build/Build-2              ]   🐳  docker exec cmd=[node /var/run/act/workflow/hashfiles/index.js] user= workdir=
[build/Reusable user config build/Build-1              ] [235/324] Building C object zephyr/subsys/net/CMakeFiles/subsys__net.dir/buf.c.obj
[build/Reusable user config build/Build-2              ] ⭐ Run Complete job
[…]
[build/Reusable user config build/Build-1              ] ⭐ Run Main Rename artifacts
[build/Reusable user config build/Build-1              ]   🐳  docker exec cmd=[sh -x /var/run/act/workflow/11] user= workdir=
[build/Reusable user config build/Build-1              ] + mkdir /tmp/tmp.5F8bS4glzA/artifacts
[build/Reusable user config build/Build-1              ] + [ -f /tmp/tmp.5F8bS4glzA/zephyr/zmk.uf2 ]
[build/Reusable user config build/Build-1              ] + cp /tmp/tmp.5F8bS4glzA/zephyr/zmk.uf2 /tmp/tmp.5F8bS4glzA/artifacts/corne_xiao_v2_left-seeeduino_xiao_ble-zmk.uf2
[build/Reusable user config build/Build-1              ]   ✅  Success - Main Rename artifacts [95.484391ms]
[build/Reusable user config build/Build-1              ] ⭐ Run Main Archive (corne_xiao_v2_left - seeeduino_xiao_ble)
[build/Reusable user config build/Build-1              ]   🐳  docker cp src=/home/cryen/.cache/act/actions-upload-artifact@v4/ dst=/var/run/act/actions/actions-upload-artifact@v4/
[build/Reusable user config build/Build-1              ]   🐳  docker exec cmd=[node /var/run/act/actions/actions-upload-artifact@v4/dist/upload/index.js] user= workdir=
[build/Reusable user config build/Build-1              ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH
[build/Reusable user config build/Build-1              ]   ❌  Failure - Main Archive (corne_xiao_v2_left - seeeduino_xiao_ble) [261.170389ms]
[build/Reusable user config build/Build-1              ] exitcode '127': command not found, please refer to https://github.com/nektos/act/issues/107 for more information
[build/Reusable user config build/Build-1              ]   🐳  docker exec cmd=[node /var/run/act/workflow/hashfiles/index.js] user= workdir=
[build/Reusable user config build/Build-1              ] ⭐ Run Complete job
[build/Reusable user config build/Build-1              ]   ✅  Success - Complete job
[build/Reusable user config build/Build-1              ] 🏁  Job failed
Error: Job 'Build' failed
[build/Reusable user config build/Merge Output Artifacts] Skipping job 'Merge Output Artifacts' due to 'success()'

build #1 exited with exit code 1.

Any help is highly appreciated!

<!-- gh-comment-id:3373097814 --> @JustCryen commented on GitHub (Oct 6, 2025): Hi, I started using Github Local Actions extension for VScode. This is also my first contact with act. I am using the "Medium" image and I'm trying to run it on a zmk repository (zmk is a tool / firmware for programmable keyboards and it is using Github Actions) The failure seems to be related to a 'node' command and since NodeJS is supposed to work on a Medium image I'm not sure where the problem actually is. I could try the Large image but currently I'm not sure if it will fix my problem, its size is actually quite a lot. If there is another option I would rather try it first before moving to the Large image. I'm not sure if any other language is being used here. The build config file in my repository points to this build file in a remote / main project repo: https://github.com/zmkfirmware/zmk/blob/main/.github/workflows/build-user-config.yml I'll include shortened result of not just one Failure, but every place a Failure occurred. If you prefer a full log just ask. ``` [build/Reusable user config build/Build-2 ] ⭐ Run Main Cache west modules [build/Reusable user config build/Build-2 ] 🐳 docker cp src=/home/cryen/.cache/act/actions-cache@v4/ dst=/var/run/act/actions/actions-cache@v4/ [build/Reusable user config build/Build-1 ] 🧪 Matrix: map[board:seeeduino_xiao_ble shield:corne_xiao_v2_left snippet:studio-rpc-usb-uart] [build/Reusable user config build/Build-2 ] 🐳 docker exec cmd=[node /var/run/act/actions/actions-cache@v4/dist/restore/index.js] user= workdir= [build/Reusable user config build/Build-1 ] ⭐ Run Main Checkout [build/Reusable user config build/Build-1 ] 🐳 docker cp src=/home/cryen/git/cryen/zmk-corne-xiao-handwired/. dst=/home/cryen/git/cryen/zmk-corne-xiao-handwired [build/Reusable user config build/Build-1 ] ✅ Success - Main Checkout [25.891328ms] [build/Reusable user config build/Build-2 ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH [build/Reusable user config build/Build-2 ] Failed but continue next step [build/Reusable user config build/Build-2 ] ❌ Failure - Main Cache west modules [350.778014ms] [build/Reusable user config build/Build-1 ] ⭐ Run Main Create build directory […] [build/Reusable user config build/Build-1 ] ⭐ Run Main Cache west modules [build/Reusable user config build/Build-1 ] 🐳 docker cp src=/home/cryen/.cache/act/actions-cache@v4/ dst=/var/run/act/actions/actions-cache@v4/ [build/Reusable user config build/Build-2 ] 🐳 docker exec cmd=[sh -e /var/run/act/workflow/6.sh] user= workdir=/tmp/zmk-config [build/Reusable user config build/Build-1 ] 🐳 docker exec cmd=[node /var/run/act/actions/actions-cache@v4/dist/restore/index.js] user= workdir= [build/Reusable user config build/Build-2 ] === updating zmk (zmk): [build/Reusable user config build/Build-2 ] --- zmk: initializing [build/Reusable user config build/Build-2 ] Initialized empty Git repository in /tmp/zmk-config/zmk/.git/ [build/Reusable user config build/Build-2 ] --- zmk: fetching, need revision main [build/Reusable user config build/Build-1 ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH [build/Reusable user config build/Build-1 ] Failed but continue next step [build/Reusable user config build/Build-1 ] ❌ Failure - Main Cache west modules [325.524505ms] [build/Reusable user config build/Build-1 ] ⭐ Run Main West Init […] [build/Reusable user config build/Build-1 ] [232/324] Building C object zephyr/subsys/bluetooth/controller/CMakeFiles/subsys__bluetooth__controller.dir/ll_sw/nordic/hal/nrf5/mayfly.c.obj [build/Reusable user config build/Build-1 ] [233/324] Building C object zephyr/subsys/bluetooth/controller/CMakeFiles/subsys__bluetooth__controller.dir/ll_sw/nordic/lll/lll.c.obj [build/Reusable user config build/Build-2 ] 🐳 docker exec cmd=[node /var/run/act/actions/actions-upload-artifact@v4/dist/upload/index.js] user= workdir= [build/Reusable user config build/Build-1 ] [234/324] Building C object zephyr/drivers/adc/CMakeFiles/drivers__adc.dir/adc_common.c.obj [build/Reusable user config build/Build-2 ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH [build/Reusable user config build/Build-2 ] ❌ Failure - Main Archive (corne_xiao_v2_right - seeeduino_xiao_ble) [952.431467ms] [build/Reusable user config build/Build-2 ] exitcode '127': command not found, please refer to https://github.com/nektos/act/issues/107 for more information [build/Reusable user config build/Build-2 ] 🐳 docker exec cmd=[node /var/run/act/workflow/hashfiles/index.js] user= workdir= [build/Reusable user config build/Build-1 ] [235/324] Building C object zephyr/subsys/net/CMakeFiles/subsys__net.dir/buf.c.obj [build/Reusable user config build/Build-2 ] ⭐ Run Complete job […] [build/Reusable user config build/Build-1 ] ⭐ Run Main Rename artifacts [build/Reusable user config build/Build-1 ] 🐳 docker exec cmd=[sh -x /var/run/act/workflow/11] user= workdir= [build/Reusable user config build/Build-1 ] + mkdir /tmp/tmp.5F8bS4glzA/artifacts [build/Reusable user config build/Build-1 ] + [ -f /tmp/tmp.5F8bS4glzA/zephyr/zmk.uf2 ] [build/Reusable user config build/Build-1 ] + cp /tmp/tmp.5F8bS4glzA/zephyr/zmk.uf2 /tmp/tmp.5F8bS4glzA/artifacts/corne_xiao_v2_left-seeeduino_xiao_ble-zmk.uf2 [build/Reusable user config build/Build-1 ] ✅ Success - Main Rename artifacts [95.484391ms] [build/Reusable user config build/Build-1 ] ⭐ Run Main Archive (corne_xiao_v2_left - seeeduino_xiao_ble) [build/Reusable user config build/Build-1 ] 🐳 docker cp src=/home/cryen/.cache/act/actions-upload-artifact@v4/ dst=/var/run/act/actions/actions-upload-artifact@v4/ [build/Reusable user config build/Build-1 ] 🐳 docker exec cmd=[node /var/run/act/actions/actions-upload-artifact@v4/dist/upload/index.js] user= workdir= [build/Reusable user config build/Build-1 ] OCI runtime exec failed: exec failed: unable to start container process: exec: "node": executable file not found in $PATH [build/Reusable user config build/Build-1 ] ❌ Failure - Main Archive (corne_xiao_v2_left - seeeduino_xiao_ble) [261.170389ms] [build/Reusable user config build/Build-1 ] exitcode '127': command not found, please refer to https://github.com/nektos/act/issues/107 for more information [build/Reusable user config build/Build-1 ] 🐳 docker exec cmd=[node /var/run/act/workflow/hashfiles/index.js] user= workdir= [build/Reusable user config build/Build-1 ] ⭐ Run Complete job [build/Reusable user config build/Build-1 ] ✅ Success - Complete job [build/Reusable user config build/Build-1 ] 🏁 Job failed Error: Job 'Build' failed [build/Reusable user config build/Merge Output Artifacts] Skipping job 'Merge Output Artifacts' due to 'success()' build #1 exited with exit code 1. ``` Any help is highly appreciated!
Author
Owner

@daniellaera commented on GitHub (Nov 11, 2025):

Hello everyone, I just landed on this topic and I wanted to give my config if it can help.
I had an LXC container on proxmox + a Ubuntu VM for the Act Runner docker image.
My actual config is.
docker compose for the runner

services:
  runner:
    image: docker.io/gitea/act_runner:nightly
    container_name: my_runner
    environment:
      GITEA_INSTANCE_URL: "http://192.168.1.103:3000"
      GITEA_RUNNER_REGISTRATION_TOKEN: "<your_token_from_gitea_server_ui>"
      GITEA_RUNNER_NAME: "my-runner-1"
      GITEA_RUNNER_LABELS: "ubuntu-latest:docker://docker:24-dind"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data
    restart: unless-stopped

then in a test-repository on the Gitea server a simple test.yml in the .gitea/workflows/ folder:

name: Test Runner Connectivity
on: [push, workflow_dispatch]

jobs:
  check-runner:
    # Use the simplest label that your runner is registered for
    runs-on: ubuntu-latest
    
    # *** FORCING THE CORRECT EXECUTION IMAGE HERE ***
    container: docker.io/catthehacker/ubuntu:act-latest 
    
    steps:
      - name: Verify Environment and Checkout Code
        # This will now use the Node.js from the catthehacker image
        uses: actions/checkout@v4
      
      - name: List Files
        run: ls -l
      
      - name: Basic Check
        run: echo "CI environment is active!"

another yml in the same folder for build, tag and push image to package registry:

name: Docker Build and Push Registry

on: [push]

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    container: docker.io/catthehacker/ubuntu:act-latest

    steps:
      - uses: actions/checkout@v4

      - name: Login to Registry
        run: |
          echo ${{ secrets.TOKEN_REGISTRY }} | docker login your.gitea.instance.ip:3000 -u ${{ github.actor }} --password-stdin

      - name: Build and Tag Image
        run: |
          IMAGE_NAME=your.gitea.instance.ip:3000/<repository_owner>//test-repository:latest
          docker build -t $IMAGE_NAME .

      - name: Push Docker Image
        run: |
          IMAGE_NAME=your.gitea.instance.ip:3000/<repository_owner>/test-repository:latest
          docker push $IMAGE_NAME
<!-- gh-comment-id:3515528385 --> @daniellaera commented on GitHub (Nov 11, 2025): Hello everyone, I just landed on this topic and I wanted to give my config if it can help. I had an LXC container on proxmox + a Ubuntu VM for the Act Runner docker image. My actual config is. docker compose for the runner ````yml services: runner: image: docker.io/gitea/act_runner:nightly container_name: my_runner environment: GITEA_INSTANCE_URL: "http://192.168.1.103:3000" GITEA_RUNNER_REGISTRATION_TOKEN: "<your_token_from_gitea_server_ui>" GITEA_RUNNER_NAME: "my-runner-1" GITEA_RUNNER_LABELS: "ubuntu-latest:docker://docker:24-dind" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./data:/data restart: unless-stopped ````` then in a test-repository on the Gitea server a simple test.yml in the .gitea/workflows/ folder: ````yml name: Test Runner Connectivity on: [push, workflow_dispatch] jobs: check-runner: # Use the simplest label that your runner is registered for runs-on: ubuntu-latest # *** FORCING THE CORRECT EXECUTION IMAGE HERE *** container: docker.io/catthehacker/ubuntu:act-latest steps: - name: Verify Environment and Checkout Code # This will now use the Node.js from the catthehacker image uses: actions/checkout@v4 - name: List Files run: ls -l - name: Basic Check run: echo "CI environment is active!" ````` another yml in the same folder for build, tag and push image to package registry: ````yml name: Docker Build and Push Registry on: [push] jobs: build-and-push: runs-on: ubuntu-latest container: docker.io/catthehacker/ubuntu:act-latest steps: - uses: actions/checkout@v4 - name: Login to Registry run: | echo ${{ secrets.TOKEN_REGISTRY }} | docker login your.gitea.instance.ip:3000 -u ${{ github.actor }} --password-stdin - name: Build and Tag Image run: | IMAGE_NAME=your.gitea.instance.ip:3000/<repository_owner>//test-repository:latest docker build -t $IMAGE_NAME . - name: Push Docker Image run: | IMAGE_NAME=your.gitea.instance.ip:3000/<repository_owner>/test-repository:latest docker push $IMAGE_NAME ````
Author
Owner

@VitalickS commented on GitHub (Dec 31, 2025):

You can use vaibhavgawali/dotnet-node-python-openjdk (1.2Gb) with all frameworks bundle. Memory usage !== Image size, so 1.2gb not a big deal.

<!-- gh-comment-id:3701967738 --> @VitalickS commented on GitHub (Dec 31, 2025): You can use vaibhavgawali/dotnet-node-python-openjdk (1.2Gb) with all frameworks bundle. Memory usage !== Image size, so 1.2gb not a big deal.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/act#71
No description provided.