[CL-CI-TSC-OOM] Чиним красный CI: heap OOM в API tsc #914

Closed
andrei wants to merge 1 commit from feature/claude-ci-tsc-oom-fix into master
Owner

Что сделано

В шаге Typecheck API-джоба (.forgejo/workflows/ci.yml) heap-лимит для tsc задаётся явно прямым вызовом node: node --max-old-space-size=2560 node_modules/typescript/bin/tsc --noEmit вместо npx tsc --noEmit.

Зачем

CI / API падал стабильно (не флака): FATAL ERROR: Ineffective mark-compacts near heap limit — JavaScript heap out of memory на ~1562MB ceiling. Причина: job-контейнер раннера регрессировал с 4g к 3g, node default heap = container/2 ≈ 1550MB < ~2000MB потребности tsc (TS 6.0.3). Прошлый фикс (CL-CI-OOM) был server-side через runner config.yml --memory=4g — хрупкий, откатился. tsc игнорирует --max-old-space-size через npx, но применяет при прямом запуске node — отсюда runner-независимый in-repo фикс. Красный CI блокирует Deploy-гейты → блокирует старт продаж.

План тестирования

  • Локально точная CI-команда → exit 0
  • YAML валиден (python yaml.safe_load)
  • Husky pre-push: tsc+build green, 189/189 тестов pass
  • Финал — зелёный API-чек в этом PR

Где могу ошибаться

  • Если раннер восстановят к 4g — heap 2560 всё равно fits, регрессии нет.
  • 2560MB с запасом над пиком tsc (~2048) и под 3g cgroup; при росте codebase >2.5G — поднять лимит (нужен 4g контейнер).
## Что сделано В шаге `Typecheck` API-джоба (.forgejo/workflows/ci.yml) heap-лимит для tsc задаётся явно прямым вызовом node: `node --max-old-space-size=2560 node_modules/typescript/bin/tsc --noEmit` вместо `npx tsc --noEmit`. ## Зачем CI / API падал стабильно (не флака): `FATAL ERROR: Ineffective mark-compacts near heap limit — JavaScript heap out of memory` на ~1562MB ceiling. Причина: job-контейнер раннера регрессировал с 4g к 3g, node default heap = container/2 ≈ 1550MB < ~2000MB потребности tsc (TS 6.0.3). Прошлый фикс (CL-CI-OOM) был server-side через runner config.yml --memory=4g — хрупкий, откатился. tsc игнорирует --max-old-space-size через npx, но применяет при прямом запуске node — отсюда runner-независимый in-repo фикс. Красный CI блокирует Deploy-гейты → блокирует старт продаж. ## План тестирования - Локально точная CI-команда → exit 0 - YAML валиден (python yaml.safe_load) - Husky pre-push: tsc+build green, 189/189 тестов pass - Финал — зелёный API-чек в этом PR ## Где могу ошибаться - Если раннер восстановят к 4g — heap 2560 всё равно fits, регрессии нет. - 2560MB с запасом над пиком tsc (~2048) и под 3g cgroup; при росте codebase >2.5G — поднять лимит (нужен 4g контейнер).
[CL-CI-TSC-OOM] fix(ci): явный heap-лимит для tsc в API-джобе
Some checks failed
CI / API (pull_request) Failing after 4m32s
CI / App (pull_request) Failing after 24m1s
SEO Audit / SEO Audit / europatech (pull_request) Failing after 2h29m41s
React Doctor / React Doctor / App (pull_request) Failing after 2h30m32s
PR Janitor / janitor (pull_request) Failing after 2h30m48s
CI / Prisma Migrate Gate (pull_request) Failing after 2h30m50s
CI / Secrets Scan (pull_request) Failing after 2h31m14s
CI / Python SDK (pull_request) Failing after 2h31m40s
CI / Telegram Mini App (pull_request) Failing after 2h33m18s
CI / Contracts (pull_request) Failing after 2h35m32s
296754d7c1
Шаг Typecheck падал в JS heap OOM (FATAL Ineffective mark-compacts) на
~1562MB ceiling — job-контейнер раннера регрессировал с 4g к 3g, node
default heap = container/2 = ~1550MB < ~2000MB потребности tsc. CI red.
Robust runner-независимый фикс: heap задаётся явно прямым вызовом node
(node --max-old-space-size=2560 node_modules/typescript/bin/tsc), т.к.
tsc игнорирует флаг через npx, но применяет при прямом запуске node.
andrei closed this pull request 2026-06-26 10:39:33 +00:00
Some checks failed
CI / API (pull_request) Failing after 4m32s
CI / App (pull_request) Failing after 24m1s
SEO Audit / SEO Audit / europatech (pull_request) Failing after 2h29m41s
React Doctor / React Doctor / App (pull_request) Failing after 2h30m32s
PR Janitor / janitor (pull_request) Failing after 2h30m48s
CI / Prisma Migrate Gate (pull_request) Failing after 2h30m50s
CI / Secrets Scan (pull_request) Failing after 2h31m14s
CI / Python SDK (pull_request) Failing after 2h31m40s
CI / Telegram Mini App (pull_request) Failing after 2h33m18s
CI / Contracts (pull_request) Failing after 2h35m32s

Pull request closed

Sign in to join this conversation.
No reviewers
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
europa-tech-srl/europatech!914
No description provided.