Фронтенд CI / Apple Silicon 2026

Чек-лист 2026: избегаем ловушек на фронтенде
Biome и инкрементальный TypeScript на удалённом Mac

31.03.2026 Инженеры фронтенда и платформы 8 мин чтения

На арендованных Mac-раннерах команды часто гоняют Biome и TypeScript подряд, не договорившись о кэшах, числе потоков и порядке шагов в CI/CD. Этот материал сопоставляет biome.json с параметрами tsc --incremental, фиксирует реалистичные каталоги кэша и добавляет трёхшаговую приёмку перед тегом релиза. Используйте его вместе с чек-листом удалённого кэша monorepo и гайдом по кэшу Vite и Webpack, чтобы статический анализ оставался быстрым и предсказуемым.

01 Типичные проблемы на общих удалённых Mac

Перегруз потоками: Biome распараллеливает обход файлов, а tsc держит крупный однопроцессный граф типов. Вместе они легко перегружают производительные ядра и «подвешивают» SSH-сессию. «Отравленные» кэши: смена ветки без инвалидации tsbuildinfo даёт зелёный пайплайн и красную локальную сборку. Неверный порядок стадий: тяжёлые браузерные проверки до дешёвых линта и типов сжигают минуты на каждый push. На удалённом Mac эти эффекты усиливаются, потому что вы делите машину с удалённым рабочим столом, индексацией Spotlight и фоновыми агентами macOS.

02 Матрица: biome.json и tsc --incremental

Таблица ниже выравнивает владельцев правил форматирования с владельцами графа типов. Biome закрывает линт и формат; инкрементальный режим TypeScript — повторное использование информации о типах между запусками. В контексте CI/CD оба слоя должны иметь явные ключи кэша и версии в логе job.

Тема Biome (biome.json / CLI) TypeScript (tsc / tsconfig)
Основные рычаги files.include, files.ignore, formatter, linter, vcs.useIgnoreFile "incremental": true, опционально "tsBuildInfoFile", "composite": true для project references
Примеры CLI biome check --write .; в пайплайнах — biome ci . tsc -p tsconfig.json --incremental или tsc -b для монорепозиториев
Параллелизм Пул воркеров внутри бинарника Biome по файлам В основном один процесс; tsc -b параллелит проекты по графу
Типичный артефакт кэша Локальные каталоги проекта; уточняйте по версии Biome и флагам логирования *.tsbuildinfo из tsBuildInfoFile, по умолчанию .tsbuildinfo рядом с конфигом
Входы ключа кэша CI Lockfile, версия Biome, хэш biome.json Lockfile, версия TypeScript, граф tsconfig, хэш исходных globs

03 Воркеры и привязка к ядрам CPU

В macOS нет аналога taskset из Linux: «привязка» на практике — это политика нагрузки, а не ручной пин каждого потока. Оставьте одно-два логических ядра под sshd, WindowServer и фоновые демоны. Число из sysctl hw.ncpu — верхняя граница, а не целевая конкуренция для всех тулов сразу. Для инкрементального tsc полезно задать NODE_OPTIONS=--max-old-space-size=... по бюджету RAM на один job, чтобы V8 не раздувал своп на общем хосте.

Профиль хоста Рекомендация: Biome + tsc
8 производительных ядер (базовый класс M4) В CI запускайте Biome и tsc последовательно либо параллельно только при свободных ≥24 ГБ ОЗУ под задачу.
10–12 ядер (класс Pro) Параллельно допустимо: Biome и tsc с NODE_OPTIONS=--max-old-space-size=8192; прочие Node-утилиты ограничьте примерно половиной логических CPU.
Интерактивная SSH-сессия Предпочитайте nice или меньшее число одновременных тяжёлых шагов, чтобы удалённый рабочий стол оставался отзывчивым.
Заметка про «биндинг»

Продвинутые команды могут оборачивать задачи атрибутами taskpolicy на macOS для приоритета QoS, но большинству фронтенд-пайплайнов достаточно ограничить одновременные тяжёлые стадии и опираться на tsbuildinfo для сокращения wall time.

04 Каталоги кэша, которые стоит восстанавливать в CI

Восстанавливайте кэши только при неизменном lockfile и согласованном ключе на ветку (или с включением хэша lockfile). Разделяйте артефакты между ветками, чтобы не подмешивать чужой tsbuildinfo. Согласуйте этот блок с префлайтом скриптов в package.json, чтобы смена scripts сбрасывала нужные слои.

  • TypeScript: сохраняйте каталог каждого tsBuildInfoFile и при необходимости node_modules/.cache, если обёртка пишет вспомогательные данные.
  • Biome: кэшируйте корень репозитория с biome.json и внутренние папки кэша вашей версии после первого прогона.
  • Правило очистки: удаляйте build info при смене package.json, workspace globs или compilerOptions.

05 Порядок CI и CD на удалённом Mac

Выстраивайте job от дешёвого сигнала к дорогому артефакту: установка зависимостей, затем Biome, затем tsc --noEmit в инкрементальном режиме, юнит-тесты, бандлеры, и уже потом смоук и predeploy-проверки. В CD нельзя продвигать сборку, где прошёл только Biome, но пропустили проверку типов: линтер и формат не заменяют семантику типов. Для матрицы нескольких Node-версий держите отдельные кэши tsbuildinfo на комбинацию ветка + версия TS + lockfile.

06 Пять шагов исполняемого runbook

  1. Зафиксируйте версии Biome и TypeScript в lockfile и выведите обе версии в заголовок лога CI.
  2. Запустите biome ci . с закоммиченным корневым biome.json; падайте на дрейфе форматтера.
  3. Выполните tsc -p tsconfig.json --incremental --noEmit (или tsc -b при references) и загрузите tsbuildinfo как артефакт кэша с ключом ветка + lockfile.
  4. Зафиксируйте wall time и загрузку CPU; если оба шага вместе держат >80% CPU дольше десяти минут, разнесите их по двум workflow job.
  5. При сбое прикладывайте к тикету первые ~50 диагностик от каждого инструмента, чтобы не гонять полный suite вслепую.

07 Три шага приёмки перед релизом

Шаг A: на точном SHA релиза прогоните Biome и инкрементальный tsc с холодным кэшем один раз — проверка воспроизводимости. Шаг B: прогон с тёплым кэшем должен быть заметно быстрее (ориентир — не менее ~30%); иначе пересмотрите ключ артефакта. Шаг C: выполните смоук-путь из runbook CD до простановки тега; при ошибке укажите использованный ключ кэша. Так вы отлавливаете устаревший tsbuildinfo до пользователей.

Ориентиры: инкрементальная проверка типов для среднего монорепо — в пределах нескольких минут; Biome с кэшем — в разумных секундах на крупной кодовой базе; на общих хостах всегда резервируйте два логических CPU под ОС.
Итог

Считайте biome.json и tsc --incremental взаимодополняющими воротами, храните их артефакты со строгими ключами и ограничивайте параллелизм на удалённом Mac, чтобы SSH оставался пригодным для отладки. Трёхшаговый блок приёмки отсекает «зелёный CI с битым кэшем» ещё до продакшена.

Дальше: откройте главную MacWww для контекста продукта, сравните тарифы и пакеты аренды Apple Silicon и загляните в центр помощи по SSH, VNC и автоматизации runner. Полный список материалов — в оглавлении блога.

Выделенный Mac mini M4

Biome и инкрементальный tsc на арендованном Mac

Стабильный Apple Silicon, нативные пути macOS и запас по каналу для параллельных стадий CI. Тарифы можно смотреть без входа; в помощи — проводка SSH runner.

Линт и типы Удалённый Mac Круглосуточно
Mac M4 под CI