Skip to content

build: major dependency upgrades, wave 1 - #101

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

agentHits merged 8 commits into
AgentHits-Devfrom
build/major-upgrades-wave-1

Conversation

@agentHits

@agentHits agentHits commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Зачем

Первая волна мажорных обновлений библиотек форка одним PR, чтобы все изменения вошли в одну версию. Minor и patch обновляет ежедневный deps-auto-update.yml, мажоры делаются вручную. В волну вошли инструменты разработки и серверные зависимости с небольшим охватом кода. Неиспользуемый redis удалён, а не обновлён.

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

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

Пакет Было → стало Где Что важно
bl 6.1.6 → 7.0.13 apps/dokploy, packages/server Только ESM, Node ≥ 20, своих зависимостей больше нет. spawnAsync, через который идёт вывод почти всех команд деплоя, работает без правок
boxen ^7.1.1 → ^9.0.0 apps/dokploy, packages/server Node ≥ 22. Баннер в начале лога Docker Compose деплоя побайтово такой же, как на v7
public-ip 6.0.2 → 8.0.0 apps/dokploy, packages/server Вместо got встроенный fetch. Таймаут 5 с теперь на весь поиск, поэтому веб-терминал переходит с IPv4 на IPv6 не позже чем через 5 с
@hono/node-server ^1.19.17 → ^2.1.5 apps/api, apps/schedules Быстрее обработка запросов, Node ≥ 20. Эти облачные сервисы upstream в образ панели форка не входят
redis 4.7.1 → удалён apps/api Нигде не импортировался
vitest ^4.1.12 → ^5.0.5 apps/dokploy, только тесты В v5 clearMocks включён по умолчанию: история вызовов моков сбрасывается перед каждым тестом
vite-tsconfig-paths 4.3.2 → 6.1.1 apps/dokploy, только тесты Только ESM, конфиг тестов не менялся
lint-staged ^15.5.2 → ^17.6.0 корень, apps/dokploy Node ≥ 22.22.1. К git-хукам не подключён, конфиг не менялся
  • Код приложения не менялся.
  • Новый тест apps/dokploy/__test__/process/spawn-async.test.ts запускает настоящие процессы и проверяет, как spawnAsync собирает stdout, передаёт input в stdin и формирует ошибку из stderr. Раньше тесты мокали его целиком.
  • bun.lock: добавлены 27 версий, все из деревьев этих пакетов; ушли 88, которые больше никому не нужны (readable-stream@4, дерево got@12, @redis/*, execa@8, listr2 и другие). Посторонние пакеты, в том числе @biomejs/biome, не сдвинулись.

Проверки

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

  • bun install --frozen-lockfile: без изменений.
  • bun audit --audit-level=moderate: уязвимостей нет (1480 пакетов).
  • bunx biome check по изменённым файлам: замечаний нет.
  • bun run server:build, затем bun run typecheck: все четыре workspace без ошибок; после bun run server:script у packages/server/package.json нет изменений.
  • bun run test в apps/dokploy: 375 файлов и 4286 тестов прошли, 1 файл и 5 тестов пропущены, упавших нет. Здесь vitest 5 и vite-tsconfig-paths 6 впервые работают вместе.
  • Набор новых версий в bun.lock совпадает с объединением наборов из build: upgrade bl to v7 #92–build: upgrade vite-tsconfig-paths to v6 #99.

По отдельности в #92–#99 зелёными были все проверки CI: audit, typecheck, build, test и сборки образов.

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

  1. Задеплоить приложение со сборкой: лог идёт в реальном времени и деплой завершается как обычно. У заведомо падающего деплоя текст ошибки из stderr виден в логе и в уведомлении (bl).
  2. Открыть веб-терминал локального и удалённого сервера: оба подключаются, в логах Dokploy нет Error obtaining public IPv4 address (public-ip).
  3. Задеплоить Docker Compose сервис: в начале лога двойная рамка шириной 80, правая граница не съезжает (boxen).

🤖 Generated with Claude Code

agentHits and others added 8 commits October 27, 2026 12:00
Что:
- apps/api/package.json: удалена зависимость redis 4.7.1.
- bun.lock: удалены redis@4.7.1, @redis/bloom, @redis/client, @redis/graph, @redis/json, @redis/search, @redis/time-series, generic-pool и вложенные копии @redis/client/cluster-key-slot и @redis/client/yallist. Пакеты ioredis, bullmq, cluster-key-slot, redis-errors и redis-parser остаются: их использует apps/schedules.
Зачем:
- Пакет нигде не импортируется: в apps/ и packages/ нет ни одного import или require из redis или @redis/*; в конфигурации сборки apps/api и Dockerfile.server его тоже нет. Удалить проще, чем обновлять 4 → 6.
- apps/api — облачный сервис upstream, в образ панели форка (./Dockerfile) он не входит.
Риски:
- Минимальные: код, который мог бы загрузить пакет, отсутствует. Если upstream позже добавит импорт redis в apps/api, это проявится при слиянии с canary как ошибка typecheck.
Проверки:
- bun install --frozen-lockfile после изменения - без изменений.
- bun run typecheck - все 4 workspace без ошибок.
- bun run server:build, затем сборка apps/api (tsc) - без ошибок; после bun run server:script packages/server/package.json без изменений, сборочные dist удалены.
- bunx biome check apps/api/package.json - без замечаний.
- bun audit --audit-level=moderate - No vulnerabilities found (1516 пакетов).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- @hono/node-server ^1.19.17 -> ^2.1.5 в apps/api и apps/schedules; bun.lock меняется только в этом пакете.
- Код не менялся: serve({ fetch, port }) в v2 работает так же.

Зачем:
- Ветка 1.x больше не развивается; v2 быстрее обрабатывает запросы (по данным авторов до 2.3 раза) и содержит исправления 2.1.x.
- apps/api и apps/schedules - облачные сервисы upstream, в образ панели форка они не входят.

Риски:
- v2 требует Node.js 20+; образы Dockerfile.server и Dockerfile.schedule на Node 24, engines тоже ^24.
- Удалён адаптер @hono/node-server/vercel; в проекте он не используется.
- hono остаётся 4.13.13 (pin в overrides), v2 поддерживает hono ^4.

Проверки:
- bun run typecheck - ок во всех воркспейсах.
- bun run server:build, затем build apps/api и apps/schedules - ок; server:script вернул packages/server/package.json без diff.
- Собранный apps/api с фиктивным env слушает порт, GET /health отдаёт 200.
- cloud-queue-availability.test.ts - 12/12.
- bunx biome check на изменённых файлах - ок; bun audit --audit-level=moderate - уязвимостей нет.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- lint-staged ^15.5.2 -> ^17.6.0 (17.6.0 от 2026-09-26) в корневом package.json и apps/dokploy/package.json.
- bun.lock: lint-staged 17 тянет только picomatch, string-argv и tinyexec (уже были в lock); ушли execa 8, listr2, commander, lilconfig, chalk, debug и их зависимости.
- Конфиг lint-staged в обоих package.json не менялся.

Зачем:
- Major-обновление волны 1. lint-staged только инструмент разработчика и не подключён к git-хукам в этом репозитории.

Риски:
- Нужен Node >=22.22.1 и Git >=2.32; локально и в CI Node 24.22.1.
- В 16 убран флаг --shell и выполнение команд через shell, в 17 yaml стал опциональным; наш конфиг в package.json и одна команда biome без shell, это не затрагивает.

Проверки:
- bun install --frozen-lockfile: без изменений.
- bun audit --audit-level=moderate: No vulnerabilities found.
- lint-staged 17.6.0 на тестовых форматных правках в apps/dokploy и packages/server: файл из apps/dokploy взял конфиг apps/dokploy/package.json (cwd apps/dokploy), файл из packages/server взял корневой конфиг; biome исправил оба и lint-staged заново их застейджил. Тестовые правки откатаны.
- bunx biome check package.json apps/dokploy/package.json: без замечаний.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- public-ip 6.0.2 -> 8.0.0 (точная версия) в apps/dokploy и packages/server.
- Код не менялся: getPublicIpWithFallback в packages/server/src/wss/utils.ts и apps/dokploy/server/wss/terminal.ts вызывает publicIpv4/publicIpv6 без опций и ловит любую ошибку.
- Из bun.lock ушли got 12 и его зависимости (cacheable-request, http2-wrapper, keyv и др.): v8 ходит по HTTPS через встроенный fetch.

Зачем:
- Major-обновление (волна 1): v6 больше не развивается, v8 тянет меньше зависимостей.

Риски:
- timeout (по умолчанию 5 с) в v8 считается на всю операцию, а не на каждый запрос: при недоступном IPv4 переход на IPv6 наступает не позже чем через 5 с.
- При ошибке теперь бросается IpNotFoundError или TimeoutError; код ловит любую ошибку, поведение то же.
- Нужен Node.js 20+, в образах Node 24.
- Метод .cancel() удалён; в коде он не использовался.

Проверки:
- bun run typecheck: все 4 workspace без ошибок.
- vitest: __test__/wss, domain-validation, domain-overview, cluster-router-security - 41 файл, 602 теста пройдены.
- bunx biome check на изменённых package.json: без замечаний.
- bun audit --audit-level=moderate: уязвимостей нет.
- Локально publicIpv4() вернул IPv4-адрес, publicIpv6() без IPv6 отклонился с TimeoutError.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- bl 6.1.6 → 7.0.13 (точная версия) в apps/dokploy/package.json и packages/server/package.json.
- bun.lock: у bl 7 нет runtime-зависимостей, из дерева ушли readable-stream 4, @types/readable-stream, abort-controller, event-target-shim, events и process; readable-stream 3.6.2 поднялся на верхний уровень вместо копий у docker-modem, tar-stream и are-we-there-yet.
- apps/dokploy/__test__/process/spawn-async.test.ts: новый тест spawnAsync на настоящих процессах (сбор stdout по частям, onData, input в stdin, ошибка с stderr, кодом и обоими потоками).
- Код spawnAsync не менялся: default-экспорт bl 7 по-прежнему BufferListStream с append/toString/length.

Зачем:
- bl 7 перешёл на ESM и node:stream/node:buffer без зависимостей: меньше пакетов в дереве и в образе.

Риски:
- bl 7 только ESM и требует Node >= 20. Оба пакета уже "type": "module", esbuild собирает сервер с packages: "external", поэтому bl грузится через import.
- spawnAsync собирает вывод почти всех команд деплоя и сборки; поломка проявилась бы в логах деплоя и текстах ошибок.

Проверки:
- bun run typecheck — все четыре workspace без ошибок.
- bunx vitest run __test__/process/ — 4 из 4.
- bun run server:build — успешно, затем server:script, packages/server/package.json без лишних изменений.
- bunx biome check по изменённым файлам — чисто; bun audit --audit-level=moderate — уязвимостей нет.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- boxen ^7.1.1 -> ^9.0.0 в apps/dokploy/package.json и packages/server/package.json (одна версия в обоих воркспейсах).
- bun.lock: обновлено только дерево boxen (chalk 6, cli-boxes 4, string-width 8, wrap-ansi 10, widest-line 6, slice-ansi 9, type-fest 5), ушли ansi-align и camelcase@7; остальное в lock - перестановка уже имеющихся версий.
- Код не менялся: вызов boxen() в packages/server/src/utils/builders/compose.ts использует только padding, width и borderStyle, их API в 8 и 9 не менялся.

Зачем:
- Выйти с ветки 7.x, которая больше не получает исправлений; 9.x - актуальная мажорная версия с багфиксами переноса строк и ширины.

Риски:
- boxen 9 требует Node.js >= 22; у нас Node 24, проблем нет.
- Баннер в начале лога деплоя Docker Compose мог бы поменять вид; локально вывод v7 и v9 на одинаковом входе совпал побайтово (рамка double, ширина 80, перенос длинной команды, эмодзи).

Проверки:
- bun run typecheck - все 4 воркспейса без ошибок.
- bunx vitest run (compose-exact-deploy, build-compose-command, compose-env-upsert, env-file-preserved) - 4 файла, 50 тестов прошли.
- bunx biome check на изменённых package.json - чисто.
- bun audit --audit-level=moderate - уязвимостей нет.
- next build и полный набор тестов локально не запускались, их прогонит CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- vitest ^4.1.12 -> ^5.0.5 в apps/dokploy (devDependencies)
- bun.lock: обновлено только дерево vitest (@vitest/mocker, @vitest/spy, tinybench, obug, why-is-node-running, magic-string для vitest); @vitest/expect, runner, snapshot, utils, pretty-format, tinyrainbow, siginfo, stackback больше не нужны
- конфиг и тесты не менялись: в наборе нет удалённых в v5 API (test.sequential, toThrow(""), vi.mock внутри describe, неожидаемые resolves/rejects, expect.poll)

Зачем:
- ветка 4.x больше не получает новых возможностей; v5 работает с закреплённым vite 8.3.4 и Node 24

Риски:
- в v5 clearMocks включён по умолчанию: история вызовов моков сбрасывается перед каждым тестом. Текущие тесты от этого не зависят, но новые тесты должны это учитывать
- только тестовая зависимость, на сборку и работу приложения не влияет

Проверки:
- bun run test (apps/dokploy) до: 2 failed | 4281 passed | 5 skipped (падения из-за Docker: application.real.test.ts и env-file-literals.test.ts не смогли скачать образ)
- bun run test после: 4283 passed | 5 skipped, 0 failed
- bun run typecheck: все 4 workspace без ошибок
- bun audit --audit-level=moderate: уязвимостей нет
- bunx biome check apps/dokploy/package.json: без замечаний

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что:
- vite-tsconfig-paths 4.3.2 -> 6.1.1 (точная версия) в devDependencies apps/dokploy.
- bun.lock: изменилась только запись самого пакета, дерево зависимостей прежнее.
- Конфиг apps/dokploy/__test__/vitest.config.ts без изменений: опция projects в v6 осталась.

Зачем:
- Плагин нужен только тестам (Vitest), он резолвит алиасы путей из tsconfig. Версия 4 больше не развивается.

Риски:
- v5 сделал пакет только ESM; apps/dokploy уже "type": "module", конфиг грузится без ошибок.
- v6 — внутренний рефакторинг без заявленных ломающих изменений; на прод и сборку не влияет.

Проверки:
- bun run test (apps/dokploy): до 374 файлов / 4283 тестов прошли, 5 пропущено; после то же самое.
- bun run typecheck: все воркспейсы без ошибок.
- bunx biome check на изменённых файлах: чисто.
- bun audit --audit-level=moderate: уязвимостей нет.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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