Чек-лист 2026: избегаем ловушек на фронтенде
Biome и инкрементальный TypeScript на удалённом Mac
На арендованных 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
- Зафиксируйте версии Biome и TypeScript в lockfile и выведите обе версии в заголовок лога CI.
- Запустите
biome ci .с закоммиченным корневымbiome.json; падайте на дрейфе форматтера. - Выполните
tsc -p tsconfig.json --incremental --noEmit(илиtsc -bпри references) и загрузитеtsbuildinfoкак артефакт кэша с ключом ветка + lockfile. - Зафиксируйте wall time и загрузку CPU; если оба шага вместе держат >80% CPU дольше десяти минут, разнесите их по двум workflow job.
- При сбое прикладывайте к тикету первые ~50 диагностик от каждого инструмента, чтобы не гонять полный suite вслепую.
07 Три шага приёмки перед релизом
Шаг A: на точном SHA релиза прогоните Biome и инкрементальный tsc с холодным кэшем один раз — проверка воспроизводимости. Шаг B: прогон с тёплым кэшем должен быть заметно быстрее (ориентир — не менее ~30%); иначе пересмотрите ключ артефакта. Шаг C: выполните смоук-путь из runbook CD до простановки тега; при ошибке укажите использованный ключ кэша. Так вы отлавливаете устаревший tsbuildinfo до пользователей.
Считайте biome.json и tsc --incremental взаимодополняющими воротами, храните их артефакты со строгими ключами и ограничивайте параллелизм на удалённом Mac, чтобы SSH оставался пригодным для отладки. Трёхшаговый блок приёмки отсекает «зелёный CI с битым кэшем» ещё до продакшена.
Дальше: откройте главную MacWww для контекста продукта, сравните тарифы и пакеты аренды Apple Silicon и загляните в центр помощи по SSH, VNC и автоматизации runner. Полный список материалов — в оглавлении блога.