Gitea Actions "node: not found" in the runner image in CI
Gitea Actions runs JavaScript actions (like checkout) with a node binary inside the job container. If your label maps to an image without node, the runner cannot launch the action and reports node not found.
What this error means
A run fails at the first JavaScript action (often checkout) with "node: not found" or a missing node executable, because the container image for that label has no Node.js.
/var/run/act/workflow/1: line 1: node: not found
Error: failed to run JavaScript action: exec: "node": executable file not found in $PATHCommon causes
The label image has no Node.js
A bare image such as alpine or ubuntu has no node, so JavaScript actions cannot run inside it.
A slim custom image dropped node
A trimmed runner image removed Node.js to save space, breaking every action implemented in JavaScript.
How to fix it
Map the label to an image that includes node
- Register the label with a docker image that ships Node.js.
- Restart the runner so the new mapping applies.
- Re-run the job and confirm JavaScript actions start.
act_runner register --no-interactive \
--instance https://gitea.example.com --token <TOKEN> \
--labels ubuntu-latest:docker://node:20-bookwormInstall node in a custom runner image
If you build your own image, add Node.js so JavaScript actions have a runtime.
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nodejs npmHow to prevent it
- Map runner labels to images that include Node.js.
- Keep node in any custom runner image you build.
- Test a JavaScript action (checkout) after changing an image.