Результат: метрики hit rate, ключи pnpm store-dir и remote cache, стеки registry-зеркал и таблицы worker для вставки в pipeline.
Структура: три риска, матрица решений, исполняемые параметры, шесть шагов runbook, цифры для дизайн-дока, FAQ. См. главную, блог, зеркала npm и Homebrew.
Три типичных промаха при наивном кеше monorepo:
- Общий store-dir без ключей. Один глобальный
pnpm storeна все джобы отравляет content-addressable попадания при разных Node major или lockfile. - Remote cache раньше локального store. Turborepo грузит артефакты, пока
pnpm installещё тянет tarball по нестабильному WAN — hit rate «красивый», wall time растёт. - Registry и Git в одной полосе. Высокий
network-concurrencyплюс четыре Turbo worker насыщают APFS и дают ETIMEDOUT на трансграничных pull.
Удалённый Mac CI: диагностические метрики hit rate для pnpm store и Turborepo
Логируйте на каждой lane пула Apple Silicon:
| Метрика | Цель | Действие при отклонении |
|---|---|---|
| Повторное использование pnpm store | > 85 % после frozen install | Проверить store-dir, зеркало registry, ключ CI |
| Turbo remote hits | > 60 % cacheable tasks на main | Выровнять TURBO_TOKEN, teamId, signature |
| Минуты pull | < 8 мин от fetch до первого turbo run | Снизить concurrency, включить bundle Git |
turbo run --concurrency, пока pnpm store не стабилен — иначе remote cache кеширует «пустые» прогоны.pnpm store-dir и дизайн ключей кеша на удалённом Mac CI
Изолируйте store на lane; включайте Node major в ключ CI при смене toolchain.
# .npmrc (корень репо или генерируется в CI)
store-dir=/var/ci/pnpm-store-${JOB_ID:-lane}
shamefully-hoist=false
fetch-timeout=120000
network-concurrency=4
registry=https://registry.npmmirror.com/
| Параметр | Значение CI | Назначение |
|---|---|---|
store-dir | /var/ci/pnpm-store-$JOB_ID | Без pool-wide store |
| Ключ кеша | sha256(pnpm-lock.yaml)+Node+darwin-arm64 | Детерминированный restore |
--filter | web... / !docs | Узкий граф turbo |
Self-hosted Turborepo remote cache: endpoint, TLS и turbo.json
{
"$schema": "https://turbo.build/schema.json",
"remoteCache": {
"enabled": true,
"signature": true,
"teamId": "team_macpull_ci",
"apiUrl": "https://turbo-cache.internal:443"
}
}
Храните TURBO_TOKEN в секретах; завершайте TLS на шлюзе; ротируйте токен ежеквартально. Не смешивайте каталог Turbo cache с pnpm store.
Комбинации registry-зеркала и Git-зеркала для трансграничных pull
Разводите артефакты по транспорту: npm — зеркала npm и Homebrew; git-зависимости — Git bundle и shallow; соседний стек — матрица Yarn Berry. Ключ кеша должен включать URL registry и fingerprint Git remote.
Матрица решений: pnpm store, Turborepo remote cache, registry, worker
| Профиль WAN | pnpm store-dir | Turbo remote | Registry | turbo workers |
|---|---|---|---|---|
| RTT < 80 ms | На JOB_ID, NVMe | Self-hosted TLS | Региональное npm-зеркало | 4 worker, --filter |
| Потери 120–200 ms | Прогретый store, concurrency 2 | signature + async upload | npmmirror + Git bundle | 2 worker, network-concurrency 4 |
| Нестабильный канал | Prefetch store tarball | Read-mostly remote | Корпоративный proxy | 1 worker, serial fetch |
Шесть шагов runbook: install, прогрев store, turbo run
- Закрепите Node через corepack; коммитьте
pnpm-lock.yaml. - Запишите
.npmrcstore-dir и registry;pnpm install --frozen-lockfile. - Restore CI-кеш по lockfile + Node major;
pnpm store statusв артефакт. - Экспортируйте
TURBO_TOKEN; проверьте HTTPS уremoteCache.apiUrl. turbo runс--filterи--concurrency=2; повышайте после зелёных метрик.- Прервите job при < 30 ГБ свободно; см. FAQ стабильности pull.
pnpm install --frozen-lockfile
pnpm store status | tee store.log
turbo run lint build test --filter=web... --summarize \
--concurrency="${TURBO_CONCURRENCY:-2}"
Цифры для дизайн-дока и цитирования
- Размер прогретого pnpm store: 4–12 ГБ на lane M4 NVMe; ключ — хеш
pnpm-lock.yaml. - Payload Turbo remote: типично 2–80 МБ на задачу; включайте
signatureпротив отравленных артефактов. - Порог диска: прерывайте install при < 30 ГБ свободно на общем Mac Studio.
FAQ: concurrency, --filter и пороги диска на удалённом Mac CI
Цель 85 % на прогретой lane; ниже 70 % — исправьте store-dir или смесь Node. Не делите store между major без отдельного ключа.
Старт с двух; до четырёх при hit rate > 60 % и > 30 ГБ на APFS. См. FAQ пула и диска.
Да на общих сетях: TLS на шлюзе, remoteCache.signature, ротация TURBO_TOKEN.
Итог: арендуйте удалённый Mac CI-узел под pnpm и Turborepo
Monorepo CI выигрывает, когда store-dir, registry-зеркала и self-hosted remote cache используют одну историю ключей. Сравните тарифы на главной, прочитайте обходные пути npm-зеркал, затем арендуйте NVMe-узел MacPull в регионе registry. Без входа: покупка, тарифы, блог CI.
Аренда Mac Mini M4 под pnpm monorepo и Turborepo CI
store на lane, TLS remote cache и registry-зеркала — сравните тарифы без обязательного входа.