intermediate

Кэширование

Кэшируйте зависимости и outputs задач только когда ключи включают каждый вход, влияющий на корректность.

Кэш пайплайна экономит загрузку зависимостей или детерминированные outputs задач. Правильные ключи включают lockfile, исходники, конфиг, платформу, версию runtime и env-переменные, влияющие на результат.

| Тип кэша | Входы ключа | |----------|-------------| | Зависимости | Хеш lockfile, ОС, версия менеджера пакетов | | Build output | Хеш исходников, конфиг, версия toolchain | | Test cache | Хеш fixtures, id шарда |

					- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
				

Restore keys дают частичные попадания при промахе точного ключа. Инструменты монорепо (Turborepo, Nx) добавляют remote cache с объявленными inputs/outputs задач.

На интервью: кэш зависимостей vs build, restore keys, cache poisoning, когда агрессивно инвалидировать.

Типовые ошибки: быстрый неверный кэш хуже отсутствия кэша; кэш секретов или mutable generated output утекает или скрывает падения.

Компромисс — скорость feedback против корректности при неполных входах в ключе.

Чеклист:

  • Хешируйте все входы, влияющие на корректность.
  • Не кэшируйте секреты и неограниченные mutable dirs.
  • Измеряйте hit rate и ложнозелёные прогоны.
  • Инвалидируйте при смене toolchain или lockfile.