Skip to content

build: upgrade Node.js to v26 - #114

Merged
agentHits merged 1 commit into
AgentHits-Devfrom
build/node-26
Oct 28, 2026
Merged

agentHits merged 1 commit into
AgentHits-Devfrom
build/node-26

Conversation

@agentHits

@agentHits agentHits commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Зачем

Ветка Node 24 с 20 октября 2026 получает только исправления, её поддержка кончается 30 апреля 2028. Node 26 становится LTS 28 октября 2026 и поддерживается до 30 апреля 2029. В Node 26 движок V8 14.6 (было 13.6) и undici 8 для fetch.

Что изменилось

  • Образы панели (Dockerfile, Dockerfile.cloud, Dockerfile.schedule, Dockerfile.server) и devcontainer собираются на node:26.12.1-bookworm-slim вместо node:24.22.1-bookworm-slim. Debian та же, bookworm.
  • CI (pull-request.yml, sync-openapi-docs.yml, dokploy.yml) запускается на Node 26.12.1.
  • engines во всех package.json, .nvmrc, PINNED_VERSIONS.node, CONTRIBUTING.md и таблица в docs/server-components-update.md теперь указывают 26.12.1.
  • @types/node ^26.6.5.
  • execAsyncStream берёт код выхода, только если это число, как уже делает execAsync: в @types/node 26 ExecException.code бывает строкой, например ENOENT.

Нативные модули (node-pty, bcrypt, cpu-features, tree-sitter, msgpackr-extract) пересобираются под новый ABI при сборке образа. Удалённые в Node 25 и 26 API (_stream_*, http writeHeader, Corepack в поставке) не используются ни кодом, ни зависимостями.

Проверки

  • CI: проверка типов, тесты на Node 26, сборка всех четырёх образов.
  • В собранном образе: Node 26.12.1, V8 14.6, ABI 147. node-pty отдаёт весь вывод процесса, bcrypt хеширует и сверяет пароль, ssh2 загружается.
  • Замеры: образ этой ветки на Node 26 против образа AgentHits-Dev того же коммита на Node 24.
    • Стенд изолированный: Docker-in-Docker, amd64 под эмуляцией на Mac. Абсолютные цифры на сервере будут другими, но соотношение между версиями верное.
    • Прогоны шли в порядке 24 → 26 → 24 → 26, в каждом три повтора сценария. В таблице средние.
Node 24.22.1 Node 26.12.1 Изменение
Шаги сценария без ошибок 60 из 60 60 из 60
API, запросов в секунду (1000 запросов, 10 одновременно) 156 192 +23%
API, задержка 95% запросов 94 мс 70 мс −26%
Страница проектов, запросов в секунду (200 запросов, 5 одновременно) 138 158 +15%
Процессорное время на сценарий 36,5 с 32,1 с −12%
Пик памяти процесса сервера 723 МиБ 638 МиБ −12%
Память процесса после нагрузки 479 МиБ 459 МиБ −4%
Память процесса в простое 282 МиБ 289 МиБ без изменений
Запуск до ответа health 31–33 с 19–34 с без изменений
Деплой Compose из кэша / деплой из образа 2,5 с / 1,07 с 2,4 с / 1,07 с без изменений
Живой лог деплоя, логи и терминал контейнера, SSH-терминал работают работают без изменений
Размер образа 3,48 ГБ 3,59 ГБ +3%

Сценарий: вход; пять страниц панели; 10 запросов project.all подряд; нагрузка выше; проект; деплой Compose со сборкой и живым логом; логи и терминал контейнера; деплой из образа; добавление сервера и SSH-терминал.

Что проверить вручную на dev

  • Терминал сервера и терминал контейнера, логи контейнера.
  • Деплой с живыми логами и деплой из образа.
  • Деплой по push из GitHub и тестовое уведомление. Они идут через fetch, а в нём теперь undici 8.
  • Бэкап базы в S3.

🤖 Generated with Claude Code

Что: панель, CI и devcontainer переходят с Node 24.22.1 на 26.12.1.
Базовый образ node:26.12.1-bookworm-slim, Debian bookworm та же.
@types/node ^26.6.5, engines ^26.12.1, .nvmrc и PINNED_VERSIONS.node
теперь 26.12.1.

Зачем: ветка 24 с 2026-10-20 получает только исправления, её поддержка
кончается 2028-04-30. Ветка 26 становится LTS 2026-10-28 и
поддерживается до 2029-04-30. В ней V8 14.6 вместо 13.6 и undici 8.

Риски: у Node 26 новый ABI нативных модулей (NODE_MODULE_VERSION 147),
поэтому node-pty, bcrypt, cpu-features, tree-sitter и msgpackr-extract
пересобираются при сборке образа. В Node 25 и 26 удалены старые API
(_stream_*, http writeHeader, Corepack в поставке); ни код, ни
зависимости их не используют. @types/node 26 описывает
ExecException.code как string | number, поэтому execAsyncStream, как и
execAsync, берёт код выхода только если это число.

Проверки: bun run typecheck, component-versions-sync.test.ts, сборка
образа linux/amd64 и сценарий панели на тестовом стенде: запуск,
память, процессор, страницы и API под нагрузкой, деплои, живые логи,
логи и терминал контейнера, SSH-терминал. Результаты в описании PR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits
agentHits merged commit 19105a3 into AgentHits-Dev Oct 28, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant