Дайджесты новостей
Панель мониторинга конвейера Vercel CI с графиком шестикратного ускорения сборки проектов.

Vercel CI в бета-тесте: ускорение проверок до 6 раз за счет анализа графа зависимостей Turborepo

Каждый инженер, работающий в современном монорепозитории на десятки или сотни пакетов, знает эту боль ожидания. Ты исправил одну строчку в README или обновил цвет кнопки в изолированном UI-компоненте, отправляешь пулл-реквест — и твой CI-пайплайн в GitHub Actions уходит в глубокую задумчивость на сорок минут. Запускаются линтеры для всего проекта, пересобираются нетронутые микросервисы, прогоняются интеграционные тесты для баз данных, с которыми твой коммит даже близко не пересекался.

Конечно, продвинутые команды настраивают умное кэширование через Turborepo или Nx. Но классические CI-платформы изначально проектировались как монолитные виртуальные машины: они не понимают внутреннюю топологию твоего JavaScript-кода и вынуждены тратить драгоценные минуты на развертывание окружения и скачивание гигабайтов node_modules.

Чтобы переломить эту парадигму, Vercel представила Vercel CI — облачную систему непрерывной интеграции, нативно спаянную с графом зависимостей Turborepo. Ранее мы подробно разбирали, как Linear ускорил CI вдвое при росте автотестов от ИИ, а Vercel предлагает системное платформенное решение этой проблемы.

Граф зависимостей вместо монолитного раннера

Ключевое архитектурное отличие Vercel CI заключается в отказе от одной жирной виртуальной машины в пользу сотен микро-контейнеров, запускаемых параллельно под каждую конкретную задачу.

Когда в репозиторий прилетает коммит, Vercel CI анализирует Git diff и строит направленный ациклический граф (DAG) зависимостей в Turborepo. Система мгновенно вычисляет, какие пакеты были реально затронуты изменениями, а какие остались нетронутыми.

Преимущества такого подхода:

  1. Точечный запуск (Affected-Only Execution): Если правка коснулась только пакета @corp/ui, Vercel CI запустит тесты исключительно для него и зависимых клиентских приложений. Бэкенд-сервисы и документация даже не проснутся.
  2. Абсолютный параллелизм: Каждая задача из секции turbo.json выполняется в изолированном контейнере с гарантированными ресурсами (от 2 до 8 vCPU) и мгновенным доступом к глобальному Remote Cache.
  3. Сокращение времени ожидания до 6 раз: По замерам на реальных enterprise-проектах, суммарное время прохождения чеков сокращается с 25–35 минут до 4–6 минут.
  4. Умный шеринг артефактов: Результаты компиляции промежуточных библиотек не перекладываются через медленные сетевые архивы tar.gz, а монтируются в файловую систему соседних контейнеров через распределенный блочный кэш.
  5. Автоматическая инвалидация по переменным окружения: Система отслеживает изменения в .env файлах и пересобирает только те пакеты, которые явно декларируют зависимость от изменившихся секретов.

Настройка turbo.json и активация через CLI

Переход на Vercel CI не требует переписывания многостраничных YAML-файлов воркфлоу. Достаточно добавить теги "ci" в существующий конфигурационный файл turbo.json:

{
  "$schema": "https://turborepo.dev/schema.json",
  "ui": "tui",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "inputs": ["$TURBO_DEFAULT$", ".env*"],
      "outputs": [".next/**", "!.next/cache/**", "dist/**"]
    },
    "test": {
      "dependsOn": ["^build"],
      "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"],
      "outputs": ["coverage/**"],
      "tags": ["ci", "ci:cpus:4"]
    },
    "lint": {
      "inputs": ["$TURBO_DEFAULT$"],
      "tags": ["ci"]
    }
  }
}

А вот так можно переопределить параметры для тяжелого устаревшего пакета через локальный файл packages/legacy/turbo.json, отключив его от облачного CI:

{
  "extends": ["//"],
  "tasks": {
    "test": {
      "tags": ["!ci"]
    }
  }
}

Активация сервиса и локальная симуляция запуска выполняются буквально парой консольных команд:

# Проверка установленных версий инструментов
vercel --version
turbo --version

# Включение нативной интеграции Vercel CI для текущего репозитория
vercel ci enable

# Локальная симуляция запуска затронутых тестов относительно предыдущего коммита
turbo run test --filter=...[HEAD~1]

Обратная сторона медали: вендорлок и ценообразование

При всех неоспоримых скоростных преимуществах важно трезво оценивать стратегические компромиссы:

  • Жесткий вендорлок: Vercel CI максимально эффективен только внутри экосистемы Next.js и Vercel. Если часть твоих сервисов деплоится в AWS ECS или Kubernetes на bare-metal серверах, тебе все равно придется поддерживать параллельный контур в GitHub Actions.
  • Модель оплаты за минуты контейнеров: Параллельный запуск десятков легковесных раннеров на каждый пулл-реквест при активной разработке может существенно увеличить ежемесячный счет за облачные ресурсы.
  • Сложность воспроизведения сбоев: Если сборка падает из-за специфики сетевого окружения изолированного микроконтейнера Vercel, локальная отладка через turbo run не всегда воспроизводит ту же ошибку.

Для команд, чей фронтенд и edge-функции уже живут на Vercel, это обновление станет настоящим глотком свежего воздуха, избавляющим от многочасового ожидания статуса мерджа.