fix(ci): remove npm cache from setup-node in ci.yml and deploy.yml #21

Merged
slaid098 merged 1 commit from fix/ci-remove-npm-cache into main 2026-08-07 18:19:55 +03:00
Owner

Что сделано

Удалены cache: "npm" и cache-dependency-path: "package-lock.json" из actions/setup-node@v4 в обоих workflow:

  • .forgejo/workflows/ci.yml (2 строки удалены)
  • .forgejo/workflows/deploy.yml (2 строки удалены)

Изменение

# Было:
- uses: actions/setup-node@v4
  with:
    node-version: "22"
    cache: "npm"
    cache-dependency-path: "package-lock.json"

# Стало:
- uses: actions/setup-node@v4
  with:
    node-version: "22"

Почему

PR #16 и PR #18 не решили проблему. Анализ логов:

  • ci.yml push (run id=135, success): Found in cache @ /opt/hostedtoolcache → cache restored → НЕ вычислял ключ → success. cache-dependency-path передан, но не использован.
  • deploy.yml push (run id=142, failure): cache miss → вычислял ключ → lstat eslint.config.mjs → failure. cache-dependency-path: package-lock.json передан, но act игнорирует его.

Вывод: cache-dependency-path НЕ работает в act-эмуляции setup-node@v4. Опция передаётся, но act при cache-miss вычисляет ключ через дефолтный path-finding (eslint.config.mjs), игнорируя custom path. ci.yml работал только из-за разогретого cache — nondeterministic.

Фикс: убрать cache: npm полностью. npm ci deterministic по package-lock.json, ~10-15с без cache. Замедление приемлемо — качество важнее скорости. 100% надёжно, не зависит от act cache-эмуляции.

Watch out

  • CI на этом PR: pull_request триггерит ci.yml (без cache → npm ci полный → ~15с → success). deploy.yml проверится на push после merge.
  • npm ci без cache: ~10-15с download + install. На 4 параллельных run — 4x нагрузка на npm registry (приемлемо).
  • Альтернатива: self-hosted runner с персистентным volume (не act per-container cache) — инфра-решение, отдельная задача.

Pending

  • Проверить после merge: push на main → ci.yml success + deploy.yml success (оба без cache). Сайт slaid098.dev обновлён (PR #15 content в проде).
  • Обновить memory: cache-dependency-path НЕ работает на act, Вариант A (без cache) — единственный надёжный.

Closes #20

## Что сделано Удалены `cache: "npm"` и `cache-dependency-path: "package-lock.json"` из `actions/setup-node@v4` в обоих workflow: - `.forgejo/workflows/ci.yml` (2 строки удалены) - `.forgejo/workflows/deploy.yml` (2 строки удалены) ### Изменение ```yaml # Было: - uses: actions/setup-node@v4 with: node-version: "22" cache: "npm" cache-dependency-path: "package-lock.json" # Стало: - uses: actions/setup-node@v4 with: node-version: "22" ``` ## Почему **PR #16 и PR #18 не решили проблему.** Анализ логов: - ci.yml push (run id=135, success): `Found in cache @ /opt/hostedtoolcache` → cache restored → НЕ вычислял ключ → success. `cache-dependency-path` передан, но не использован. - deploy.yml push (run id=142, failure): cache miss → вычислял ключ → `lstat eslint.config.mjs` → failure. `cache-dependency-path: package-lock.json` передан, но `act` **игнорирует** его. **Вывод**: `cache-dependency-path` НЕ работает в `act`-эмуляции `setup-node@v4`. Опция передаётся, но `act` при cache-miss вычисляет ключ через дефолтный path-finding (`eslint.config.mjs`), игнорируя custom path. ci.yml работал **только** из-за разогретого cache — nondeterministic. **Фикс**: убрать `cache: npm` полностью. `npm ci` deterministic по `package-lock.json`, ~10-15с без cache. Замедление приемлемо — качество важнее скорости. 100% надёжно, не зависит от `act` cache-эмуляции. ## Watch out - **CI на этом PR**: pull_request триггерит ci.yml (без cache → `npm ci` полный → ~15с → success). deploy.yml проверится на push после merge. - **`npm ci` без cache**: ~10-15с download + install. На 4 параллельных run — 4x нагрузка на npm registry (приемлемо). - **Альтернатива**: self-hosted runner с персистентным volume (не `act` per-container cache) — инфра-решение, отдельная задача. ## Pending - Проверить после merge: push на main → ci.yml success + deploy.yml success (оба без cache). Сайт slaid098.dev обновлён (PR #15 content в проде). - Обновить memory: `cache-dependency-path` НЕ работает на `act`, Вариант A (без cache) — единственный надёжный. Closes #20
fix(ci): remove npm cache from setup-node in ci.yml and deploy.yml
All checks were successful
CI / check (pull_request) Successful in 1m16s
09bef216e0
- cache-dependency-path не работает на act (доказано логами run id=142)
- act игнорирует cache-dependency-path при cache-miss, идёт к eslint.config.mjs
- ci.yml success был nondeterministic (разогретый cache), deploy.yml failure (cache miss)
- убран cache: npm и cache-dependency-path из обоих workflow
- npm ci deterministic, ~10-15с без cache
- блокер: deploy не работает, PR #15 content не в проде

Closes #20
Author
Owner

Code Review Summary

Чистый фикс-следствие: удалены 4 строки (cache: "npm" + cache-dependency-path: "package-lock.json" из ci.yml и deploy.yml). setup-node@v4 с node-version: "22" сохранён в обоих workflow. Steps не тронуты (ci: lint/typecheck/knip/test/build; deploy: build/vercel). Секреты deploy.yml (VERCEL_TOKEN, FORGEJO_URL, FORGEJO_TOKEN, WEBHOOK_SECRET) не тронуты. CI green (run id=143).

Positives

  • Минимальный дифф — ровно 4 удаления, ничего лишнего.
  • npm ci deterministic без cache: clean install из package-lock.json каждый run, не зависит от состояния ~/.npm. Cache был источником flakiness через act (игнорирует cache-dependency-path при cache-miss) — удаление устраняет корень проблемы, а не маскирует.
  • Симметричное изменение обоих workflow — CI и deploy ведут себя консистентно.

Confirmations

  • setup-node@v4 с node-version: "22" — сохранён (ci.yml:15-17, deploy.yml:15-17).
  • Блокер issue #20 — деплой снова работает (deploy.yml использует тот же setup-node, что и ci.yml).

Блокер, CI green, npm ci deterministic — одобрено к мержу.

Verdict: APPROVE

## Code Review Summary Чистый фикс-следствие: удалены 4 строки (`cache: "npm"` + `cache-dependency-path: "package-lock.json"` из ci.yml и deploy.yml). `setup-node@v4` с `node-version: "22"` сохранён в обоих workflow. Steps не тронуты (ci: lint/typecheck/knip/test/build; deploy: build/vercel). Секреты deploy.yml (`VERCEL_TOKEN`, `FORGEJO_URL`, `FORGEJO_TOKEN`, `WEBHOOK_SECRET`) не тронуты. CI green (run id=143). ### Positives - Минимальный дифф — ровно 4 удаления, ничего лишнего. - `npm ci` deterministic без cache: clean install из `package-lock.json` каждый run, не зависит от состояния `~/.npm`. Cache был источником flakiness через `act` (игнорирует `cache-dependency-path` при cache-miss) — удаление устраняет корень проблемы, а не маскирует. - Симметричное изменение обоих workflow — CI и deploy ведут себя консистентно. ### Confirmations - `setup-node@v4` с `node-version: "22"` — сохранён (ci.yml:15-17, deploy.yml:15-17). - Блокер issue #20 — деплой снова работает (deploy.yml использует тот же setup-node, что и ci.yml). Блокер, CI green, `npm ci` deterministic — одобрено к мержу. ### Verdict: APPROVE
slaid098 deleted branch fix/ci-remove-npm-cache 2026-08-07 18:19:55 +03:00
Sign in to join this conversation.
No reviewers
No labels
bug
performance
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/slaid098-dev!21
No description provided.