Skip to content

build: major dependency upgrades, wave 2 - #108

Merged
agentHits merged 5 commits into
AgentHits-Devfrom
build/major-upgrades-wave-2
Oct 27, 2026
Merged

agentHits merged 5 commits into
AgentHits-Devfrom
build/major-upgrades-wave-2

Conversation

@agentHits

@agentHits agentHits commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Зачем

Вторая волна мажорных обновлений библиотек форка одним PR, чтобы все изменения вошли в одну версию. Это серверные библиотеки панели: интеграция с GitHub, пароли, генерация ID, даты и мониторинг.

Заменяет PR #103–#107: в них те же изменения, по одному пакету на PR. Они закрываются без слияния.

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

Пакет Было → стало Где Что важно
octokit 3.2.2 → 5.0.5 apps/dokploy, packages/server Только ESM, Node ≥ 20, удалён тип авторизации oauth, который у нас не используется. Получение installation-токенов, paginate и rest.* работают как раньше
@octokit/auth-app ^6.1.4 → ^8.3.1 apps/dokploy, packages/server Новая подпись JWT для GitHub App (universal-github-app-jwt 2)
@octokit/webhooks ^13.9.1 → ^14.2.0 apps/dokploy Webhooks#verify(payload, signature) не изменился: верная подпись принимается, неверная отклоняется
@octokit/rest ^20.1.2 → удалён packages/server Нигде не импортировался
bcrypt 5.1.1 → 6.0.0 apps/dokploy, packages/server Готовые сборки для Linux, macOS и Windows лежат в самом пакете, node-pre-gyp больше ничего не скачивает. Хэши $2a$ и $2b$, сделанные bcrypt 5, проверяются
@types/bcrypt 5.0.2 → 6.0.0 apps/dokploy, packages/server Типы под bcrypt 6
nanoid 3.3.20 → 6.0.2 apps/dokploy, packages/server Только ESM, Node 22 или 24. Формат ID (21 символ A-Za-z0-9_-) и 6-символьные суффиксы имён приложений не изменились
date-fns 3.6.0 → 4.4.0 apps/dokploy, packages/server Вывод format, formatDistanceToNow и isPast совпал во всех 132 сравнениях до и после. react-day-picker теперь использует ту же копию
node-os-utils 2.0.5 → 3.1.0 apps/dokploy, packages/server Методы и форма результатов прежние, метрики в Linux-контейнере совпали с v2. Без утилиты ip v3 возвращает ошибку, а не роняет процесс
  • Код приложения не менялся.
  • Новые тесты:
    • apps/dokploy/__test__/security/bcrypt-hash-compat.test.ts: хэши, сделанные bcrypt 5, проверяются в v6;
    • apps/dokploy/__test__/lib/id-format.test.ts: формат ID и суффикса имени приложения.
  • bun.lock: 41 новая версия, все из деревьев этих пакетов. Ушли @mapbox/node-pre-gyp со своими зависимостями, jsonwebtoken и lodash.* из старого octokit. Посторонние пакеты не сдвинулись.

Не вошли bullmq и ioredis, они остаются на v5. В bullmq 6 убрали старый API повторяющихся задач, на котором построен облачный планировщик upstream apps/schedules. Форк этот сервис не запускает, а переход потребовал бы переписать его логику.

Проверки

На этой ветке:

  • bun install --frozen-lockfile: без изменений.
  • bun audit --audit-level=moderate: уязвимостей нет (1444 пакета).
  • bunx biome check по изменённым файлам: замечаний нет.
  • Набор новых версий в bun.lock совпадает с объединением наборов из build: upgrade octokit to v5 #103–build: upgrade node-os-utils to v3 #107.
  • bun run server:build, затем bun run typecheck: все четыре workspace без ошибок.
  • bun run test в apps/dokploy: 377 файлов и 4292 теста прошли, 1 файл и 5 тестов пропущены, упавших нет.

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

  1. Войти в панель, ввести супер-пароль для защищённого действия. Сервис с basic auth должен пускать по старому логину и паролю (bcrypt).
  2. Settings → Git → GitHub показывает репозитории и ветки. Push в подключённый репозиторий запускает деплой, приватный репозиторий клонируется (octokit).
  3. Создать проект и сервис: у ID в адресе 21 символ, у имени приложения 6-символьный суффикс (nanoid).
  4. Даты и «… ago» в списках деплоев и бэкапов выглядят как раньше (date-fns).
  5. Страница Monitoring: CPU, память, swap, диск и сеть близки к free -m и df -h на хосте (node-os-utils).

🤖 Generated with Claude Code

agentHits and others added 5 commits October 27, 2026 14:40
Что:
- octokit 3.2.2 -> 5.0.5 (точный пин) в apps/dokploy и packages/server.
- @octokit/auth-app ^6.1.4 -> ^8.3.1 в обоих воркспейсах.
- @octokit/webhooks ^13.9.1 -> ^14.2.0 в apps/dokploy.
- Удалён неиспользуемый @octokit/rest из packages/server.

Зачем:
Мажорное обновление семейства octokit (волна 2). Из дерева уходят
старые транзитивные зависимости (jsonwebtoken, btoa-lite, deprecation).

Риски:
Breaking changes: пакеты стали только ESM, удалён тип авторизации
"oauth", минимальный Node 20. Оба воркспейса уже ESM, Node 24, тип
"oauth" не используется, поэтому код не менялся. Вызовы auth,
paginate, rest.* и Webhooks.verify сохранили сигнатуры.

Проверки:
- bun install --frozen-lockfile, bun run typecheck: ок.
- vitest __test__/git-provider и __test__/deploy: 40 файлов, 426 тестов ок.
- bunx biome check по изменённым файлам, bun audit: ок.
- Импорт в Node: Octokit + createAppAuth создаются, verify принимает
  верную подпись и отклоняет неверную.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что: bcrypt 5.1.1 -> 6.0.0 и @types/bcrypt 5.0.2 -> 6.0.0 (точные версии)
в apps/dokploy и packages/server. Из lock ушло дерево @mapbox/node-pre-gyp,
node-addon-api свёлся к одной версии 8.9.2. Добавлен тест
__test__/security/bcrypt-hash-compat.test.ts с хэшами, сделанными bcrypt 5.1.1.

Зачем: bcrypt 6 больше не скачивает бинарник через node-pre-gyp при
установке, а поставляет готовые N-API сборки внутри пакета (prebuilds/,
включая linux-x64 glibc) и грузит их через node-gyp-build. Минус
устаревшая цепочка зависимостей (npmlog, gauge, rimraf 3, glob 7, tar 6).

Риски: нативный модуль. Скрипт install (node-gyp-build) только находит
готовую сборку, сеть и компилятор не нужны; bcrypt есть в списке пакетов,
которым bun доверяет по умолчанию. Next держит bcrypt внешним пакетом,
esbuild-конфиги собирают с packages: external, поэтому поиск prebuilds
через __dirname не ломается. Dockerfile не менялся: prod-deps ставит
hoisted node_modules вместе с prebuilds. Формат хэшей прежний ($2b$).

Проверки: bun install --frozen-lockfile, bun run typecheck, тесты
__test__/security (350/350), полный набор (один нестабильный тест
backups/backup-files под нагрузкой, отдельно проходит), biome check,
bun audit --audit-level=moderate. Загрузка биндинга под Node 24.22.1
локально (darwin-arm64). Образ проверит main-image-smoke в CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что: nanoid 3.3.20 -> 6.0.2 (точная версия) в apps/dokploy и
packages/server. Добавлен тест формата id (21 символ A-Za-z0-9_-) и
6-символьного суффикса имени приложения из customAlphabet.

Зачем: ветка 3.x поддерживается только ради CommonJS; оба пакета уже
ESM. В 6.x nanoid() и customAlphabet() быстрее, исправлены ошибки
customRandom и защита от отрицательного размера.

Риски: v4 убрала CommonJS, v5 убрала nanoid/async и Node 14/16, v6
требует Node ^22 || ^24 || >=26. В коде нет require("nanoid") и
удалённых точек входа, всё в серверном ESM-коде; Node 24.22.1. API
nanoid() и customAlphabet(alphabet, size), размер по умолчанию 21 и
алфавит не менялись. postcss сохраняет свою копию nanoid 3.

Проверки: bun install --frozen-lockfile, bun run typecheck, полный
набор тестов (4286 пройдено, 2 упавших по таймингу под нагрузкой
прошли при повторном запуске), biome check, bun audit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- date-fns 3.6.0 -> 4.4.0 (точная версия) в apps/dokploy и packages/server.
- В bun.lock осталась одна копия date-fns@4.4.0: отдельная вложенная копия для react-day-picker (^4.1.0) больше не нужна.
- Код не менялся: все 34 файла импортируют format, formatDate, formatDistanceToNow, isPast из корня пакета, их API в v4 тот же.

Зачем:
- Мажорное обновление волны 2; одна версия date-fns вместо двух в зависимостях.

Риски:
- v4 стал ESM-first (CJS сохранён) и ужесточил типы; typecheck проходит без правок.
- Вывод форматирования проверен скриптом на 3.6.0 и 4.4.0 (все шаблоны из кода, UTC и Europe/Moscow): совпадает построчно.

Проверки:
- bun install --frozen-lockfile до и после: ок.
- bun run typecheck: ок во всех workspace.
- vitest (13 файлов, связанных с форматированием дат, уведомлениями и деплоями): 79/79.
- bunx biome check на изменённых файлах: ок.
- bun audit --audit-level=moderate: уязвимостей нет.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что: node-os-utils 2.0.5 -> 3.1.0 (точная версия) в apps/dokploy и
packages/server. Код в packages/server/src/monitoring/utils.ts менять не
пришлось: конструктор, опция disk.includeStats, методы cpu.usage,
memory.info, memory.swap, disk.usageByMountPoint, disk.stats,
network.overview и тип MonitorResult (success/data) в v3 те же.

Зачем: волна мажорных обновлений. В v3 сбой монитора без слушателя
error больше не роняет процесс (в v2 при отсутствии ip/ifconfig
network.overview() выбрасывал необработанное событие error), исправлены
разбор df (df -P) и единицы памяти в запасном пути Linux, добавлен
таймаут операций 10 с.

Риски: ломающие изменения v3 касаются ProcessInfo, kill(), system.info()
и DataSize с NaN/Infinity; мы их не используем. Таймаут 10 с: если
команда зависнет, метрика придет как неуспешный результат, и код
подставит 0, как и раньше при ошибке.

Проверки: bun install --frozen-lockfile до и после, bun run typecheck,
vitest __test__/monitoring (83 из 83), biome check, bun audit
--audit-level=moderate (уязвимостей нет). Сравнение v2 и v3 в
node:24.22.1-bookworm-slim с iproute2: структура и значения CPU, памяти,
swap, диска, сети и disk.stats совпадают, диск совпадает с df байт в байт.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits
agentHits merged commit 6c54880 into AgentHits-Dev Oct 27, 2026
7 checks passed
@agentHits
agentHits deleted the build/major-upgrades-wave-2 branch October 27, 2026 18:51
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