[CL-CI-OOM] CI(api): чиним JS heap OOM в Typecheck — NODE_OPTIONS через env-блок #861
No reviewers
Labels
No labels
ci-failing
duplicate
needs-rebase
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
europa-tech-srl/europatech!861
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/claude-ci-api-oom-fix"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
В job
API(.forgejo/workflows/ci.yml) шаг Typecheck переведён с inline-формыNODE_OPTIONS=--max-old-space-size=4096 npx tsc --noEmitна step-levelenv:-блок:run: npx tsc --noEmit+env: { NODE_OPTIONS: --max-old-space-size=4096 }.Зачем
Шаг Typecheck падал с
FATAL ERROR: Ineffective mark-compacts near heap limit — JavaScript heap out of memory(v8 heap ~1550MB). Runner (/opt/forgejo-runner/config.yml)капает каждый job-контейнер на
--memory=3g, иnode:22авто-выбирает дефолтныйv8 old-space ~1550MB. Inline-форма
NODE_OPTIONS=... npx tscне доходит до процессаtsc в act/forgejo-runner — v8 остаётся на дефолте (в OOM-логе виден лимит 1550, не 4096).
env-блок инжектится какdocker run -eи применяется надёжно (тот же приём, чторабочий Build-шаг ниже).
apitsc крупнееapp, поэтому именно он перерос дефолт(app/contracts с тем же inline проходят — их tsc меньше 1550MB).
Память раннера НЕ трогаю намеренно: хост 30GB, свободно ~14GB (остальное — прод
adami-api/forgejo/postgres), поднятие
--memoryприcapacity:4переподписало бы RAM.План тестирования
tsc --noEmit(0 errors),eslint src --max-warnings 0, OpenAPI drift (clean), guards,pnpm install --frozen-lockfile,lockfile-integrity,
vitest run --coverage(10356/10356 passed, coverage выше порогов).Где могу ошибаться
app/contractstsc в будущем тоже перерастут 1550MB — у них остаётся та жесломанная inline-форма (здесь не трогал, YAGNI; чинить тем же приёмом при появлении OOM).
отдельное решение по памяти раннера.