From 0a1407719e2454df94a18dde4a3e13d7e76d259e Mon Sep 17 00:00:00 2001 From: danamir Date: Sun, 9 Aug 2026 01:00:12 +0300 Subject: [PATCH] Install Node.js before Checkout in the CI/CD workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Host-mode jobs execute directly on the bare runner container rather than a per-job container, and actions/checkout is a JS action — it needs `node` on PATH to run at all, which the runner image doesn't ship. Failed every run with "Cannot find: node in PATH" before any other step got a chance to install anything. --- .gitea/workflows/ci-cd.yml | 9 +++++++++ docs/CI-CD.md | 8 +++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/ci-cd.yml b/.gitea/workflows/ci-cd.yml index e7be4a7..4337cfa 100644 --- a/.gitea/workflows/ci-cd.yml +++ b/.gitea/workflows/ci-cd.yml @@ -17,6 +17,15 @@ jobs: build-test-deploy: runs-on: host steps: + # `runs-on: host` runs every step directly on the bare runner + # container instead of spinning up a fresh container per job, and + # `actions/checkout` below is a JS action — it needs a `node` binary + # on PATH to run at all, which this image doesn't ship. Has to come + # before Checkout, since Checkout itself is what fails without it. + - name: Install Node.js + shell: bash + run: apk add --no-cache nodejs + - name: Checkout uses: https://github.com/actions/checkout@v4 diff --git a/docs/CI-CD.md b/docs/CI-CD.md index d21064c..94a5369 100644 --- a/docs/CI-CD.md +++ b/docs/CI-CD.md @@ -37,9 +37,11 @@ docker run -d --name gitea-ci-runner --restart unless-stopped \ `host:host` — раннер выполняет джобы напрямую в своём собственном контейнере (никаких вложенных контейнеров на каждый джоб), у него смонтирован docker.sock хоста — поэтому `docker compose` -внутри джоба управляет реальными контейнерами на этой машине. Джоб сам ставит себе `docker-cli` и -.NET SDK через `apk`/`dotnet-install.sh` (см. workflow) — образ раннера намеренно голый, чтобы не -поддерживать отдельный кастомный образ. +внутри джоба управляет реальными контейнерами на этой машине. Джоб сам ставит себе `node`, +`docker-cli` и .NET SDK через `apk`/`dotnet-install.sh` (см. workflow) — образ раннера намеренно +голый, чтобы не поддерживать отдельный кастомный образ. `node` ставится первым шагом, до +`actions/checkout` — этот шаг сам является JS-экшеном и без `node` в PATH падает с `Cannot find: +node in PATH` раньше, чем успевает выполниться что-либо ещё. Проверить, что раннер подключился: Site Administration → Actions → Runners — должен появиться `ruvdstest-prod` со статусом Idle/Online.