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.