fix(ci): setup-uv@v3 fails with __dirname ES module error in act runner #5

Closed
opened 2026-08-09 21:43:55 +03:00 by slaid098 · 1 comment
Owner

Контекст

CI jobs lint и typecheck в .github/workflows/ci.yml падают на шаге astral-sh/setup-uv@v3 в Forgejo act runner. Action использует CommonJS (__dirname), но act runner выполняет его как ES module — возникает ReferenceError.

Логи Forgejo Actions (run 252, jobs 524/525):

/******/ 	if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
ReferenceError: __dirname is not defined in ES module scope
  ❌  Failure - Main astral-sh/setup-uv@v3
exitcode '1': failure
🏁  Job failed

На run 251 (раньше) ошибка была другой: lstat .../docs: no such file or directory — flaky act cache. На run 252 — стабильная ES module ошибка.

Проблема затрагивает ВСЕ PR в репо (не только wake-word), так как setup-uv@v3 используется в 4 из 5 jobs. Без фиксации lint/typecheck никогда не пройдут.

Задача

Заставить lint и typecheck доходить до выполнения ruff/mypy в act runner.

Контракты

  • ci.yml использует astral-sh/setup-uv@v3 в jobs: lint, typecheck, test (×2), complexity
  • Act runner (Forgejo Actions) выполняет actions в Docker-контейнере
  • setup-uv@v3 — сторонний action, запакован через @vercel/ncc (отсюда __nccwpck_require__ и __dirname)
  • Act runner загружает action как ES module, но action ожидает CommonJS

Инварианты

  • Решение должно работать в act runner (Forgejo Actions)
  • Не сломать запуск на GitHub Actions (если вернётся)
  • Минимальные изменения в ci.yml
  • Альтернативы (выбрать одну):
    1. Пин astral-sh/setup-uv@v3 к конкретному commit (возможно конкретная версия не имеет ES module проблемы)
    2. Откат на astral-sh/setup-uv@v2 (если v2 CommonJS-совместим)
    3. Убрать setup-uv@v3 и установить uv вручную: run: curl -LsSf https://astral.sh/uv/install.sh | sh (act runner сам скачает uv, action не нужен)
    4. Использовать astral-sh/setup-uv@v3 с явным version: latest + enable-cache: false (отключить cache, который вызывает lstat-ошибку)

Граничные случаи

  • Flaky lstat .../docs (run 251) vs стабильный __dirname (run 252) — возможно две разные проблемы, но обе в setup-uv@v3
  • complexity job использует тот же setup-uv@v3 и проходит — значит проблема может быть order-dependent или зависит от состояния cache

Влияние на связанные компоненты

  • ci.yml → lint, typecheck: начнут доходить до ruff/mypy
  • ci.yml → test, complexity: не затронуты (уже проходят)
  • Все будущие PR: разблокируется CI (lint/typecheck — обязательные checks)

Вне scope

  • sudo проблема (issue #4) — уже чинится в PR#3
  • Кодовая база voice_assistant — проблема только в CI инфраструктуре

Критерии приемки

  • lint job доходит до uv run ruff check src/ tests/
  • typecheck job доходит до uv run mypy src/
  • Решение работает в act runner (Forgejo Actions)
  • Решение совместимо с GitHub Actions (не только act)
## Контекст CI jobs `lint` и `typecheck` в `.github/workflows/ci.yml` падают на шаге `astral-sh/setup-uv@v3` в Forgejo act runner. Action использует CommonJS (`__dirname`), но act runner выполняет его как ES module — возникает `ReferenceError`. Логи Forgejo Actions (run 252, jobs 524/525): ``` /******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/"; ReferenceError: __dirname is not defined in ES module scope ❌ Failure - Main astral-sh/setup-uv@v3 exitcode '1': failure 🏁 Job failed ``` На run 251 (раньше) ошибка была другой: `lstat .../docs: no such file or directory` — flaky act cache. На run 252 — стабильная ES module ошибка. Проблема затрагивает ВСЕ PR в репо (не только wake-word), так как `setup-uv@v3` используется в 4 из 5 jobs. Без фиксации lint/typecheck никогда не пройдут. ## Задача Заставить `lint` и `typecheck` доходить до выполнения `ruff`/`mypy` в act runner. ## Контракты - `ci.yml` использует `astral-sh/setup-uv@v3` в jobs: lint, typecheck, test (×2), complexity - Act runner (Forgejo Actions) выполняет actions в Docker-контейнере - `setup-uv@v3` — сторонний action, запакован через `@vercel/ncc` (отсюда `__nccwpck_require__` и `__dirname`) - Act runner загружает action как ES module, но action ожидает CommonJS ## Инварианты - Решение должно работать в act runner (Forgejo Actions) - Не сломать запуск на GitHub Actions (если вернётся) - Минимальные изменения в `ci.yml` - Альтернативы (выбрать одну): 1. Пин `astral-sh/setup-uv@v3` к конкретному commit (возможно конкретная версия не имеет ES module проблемы) 2. Откат на `astral-sh/setup-uv@v2` (если v2 CommonJS-совместим) 3. Убрать `setup-uv@v3` и установить uv вручную: `run: curl -LsSf https://astral.sh/uv/install.sh | sh` (act runner сам скачает uv, action не нужен) 4. Использовать `astral-sh/setup-uv@v3` с явным `version: latest` + `enable-cache: false` (отключить cache, который вызывает lstat-ошибку) ## Граничные случаи - Flaky `lstat .../docs` (run 251) vs стабильный `__dirname` (run 252) — возможно две разные проблемы, но обе в `setup-uv@v3` - `complexity` job использует тот же `setup-uv@v3` и проходит — значит проблема может быть order-dependent или зависит от состояния cache ## Влияние на связанные компоненты - `ci.yml` → lint, typecheck: начнут доходить до ruff/mypy - `ci.yml` → test, complexity: не затронуты (уже проходят) - Все будущие PR: разблокируется CI (lint/typecheck — обязательные checks) ## Вне scope - `sudo` проблема (issue #4) — уже чинится в PR#3 - Кодовая база voice_assistant — проблема только в CI инфраструктуре ## Критерии приемки - [ ] `lint` job доходит до `uv run ruff check src/ tests/` - [ ] `typecheck` job доходит до `uv run mypy src/` - [ ] Решение работает в act runner (Forgejo Actions) - [ ] Решение совместимо с GitHub Actions (не только act)
Author
Owner

Fixed in PR #3 (replaced astral-sh/setup-uv@v3 action with manual install curl -LsSf https://astral.sh/uv/install.sh | sh + $GITHUB_PATH in all 4 jobs). Closing as resolved.

Fixed in PR #3 (replaced `astral-sh/setup-uv@v3` action with manual install `curl -LsSf https://astral.sh/uv/install.sh | sh` + `$GITHUB_PATH` in all 4 jobs). Closing as resolved.
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
slaid098/voice_assistant#5
No description provided.