Сборка 100 пакетов за секунду.
Content-addressable кэш, параллельное выполнение и обнаружение затронутых пакетов. kb-devkit запускает только то, что действительно изменилось.
Один файл. Любой монорепо.
Положи devkit.yaml в корень репозитория. kb-devkit найдёт все пакеты автоматически и запустит задачи в правильном порядке, учитывая зависимости между пакетами.
Поддерживает pnpm, npm, yarn workspaces. Внутри KB Labs управляет сборкой 125+ пакетов.
schemaVersion: 2
workspace:
discovery:
- "packages/**"
tasks:
build:
command: tsup
inputs: ["src/**", "tsup.config.ts", "tsconfig*.json"]
outputs: ["dist/**"]
deps: ["^build"]
lint:
command: eslint src/
inputs: ["src/**", "eslint.config.*"]
outputs: []
test:
command: vitest run --passWithNoTests
inputs: ["src/**", "test/**"]
deps: ["build"]
affected:
strategy: gitВсё поддаётся автоматизации.
kb-devkit run buildЗапустить задачу build для всех пакетов с кэшем и параллельным выполнением.kb-devkit run build lint test --affectedВыполнить build, lint, test только для пакетов, изменённых в git, и их downstream-зависимостей.kb-devkit run build --no-cacheПропустить чтение и запись кэша для этого запуска. Артефакты не восстанавливаются.kb-devkit checkПроверить все пакеты по правилам из devkit.yaml: именование, tsconfig, eslint, зависимости, структура.kb-devkit fixПрименить безопасные автоматические исправления для нарушений, найденных командой check.kb-devkit statsПоказать health score (A–F), количество проблем по категориям и метрики покрытия по всем пакетам.Все команды поддерживают --json для скриптов и CI
Детали, которые важны.
Content-addressable кэш
SHA256 входных файлов → ключ кэша. Попадание — артефакты восстанавливаются за ~1ms. Промах — задача выполняется и результат сохраняется. Один файл в двух пакетах хранится один раз.
Затронутые пакеты + downstream BFS
Находит пакеты, изменённые в git. Затем обходит граф обратных зависимостей BFS и включает всех downstream-потребителей. Три стратегии: git, submodules, command.
DAG-планировщик
Зависимости задач образуют граф. Алгоритм Кана разбивает его на слои: пакеты внутри слоя выполняются параллельно, слои — последовательно.
Один бинарник. Любой TypeScript/Node.js монорепо.
curl -fsSL https://kblabs.ru/kb-devkit/install.sh | sh