actions/cache
Тема дорожной карты · GitHub Actions
actions/cache@v3 — официальный action GitHub Actions для сохранения каталогов зависимостей и результатов сборки между запусками workflow, что значительно сокращает время выполнения CI/CD-пайплайна за счёт устранения избыточных загрузок или компиляций. Чтобы добавить actions/cache в job, нужно указать path: — например ~/.npm или ~/.gradle/caches — и cache-key, получаемый из хеша lock-файла, например ${{ hashFiles('**/package-lock.json') }}, чтобы кеш автоматически инвалидировался при изменении зависимостей. Runner GitHub Actions проверяет наличие попадания в кеш по основному ключу, а при промахе перебирает упорядоченный список restore-keys:, допуская частичное использование кеша даже при промахе по точному ключу. actions/cache хранит артефакты в управляемом blob-хранилище GitHub (до 10 ГБ на репозиторий) и прозрачно интегрируется как с GitHub-hosted, так и с self-hosted runner в любом workflow непрерывной интеграции. Сочетание actions/cache с точными cache-ключами считается лучшей практикой для быстрой и воспроизводимой автоматизации workflow в командах.
Как это работает
actions/cache: артефакты (actions/upload-artifact, download-artifact) персистят файлы между jobs внутри workflow (и после завершения — для скачивания через UI). Кеш (actions/cache) ускоряет повторную работу, сохраняя + восстанавливая директории по hash-ключу (hashFiles('package-lock.json')). Cache-hit драматичен для больших деревьев зависимостей. Scope кеша: ветка + ключ; кеш main-ветки расшарен на PR из форков read-only.
Когда применять
Кеш — для ~/.npm, ~/.pnpm-store, ~/.cargo, ~/.gradle, ~/.m2, Docker-слоёв через buildx cache, OS-пакетов. Артефакты — для передачи build-output между jobs (build → test → deploy с общим скомпилированным output). restore-keys: — fallback на cache-miss. Retention-политика — артефакты по дефолту 90 дней.
Типичные ошибки
Ловушки actions/cache: cache-key никогда не меняется (кешируете раз, всегда восстанавливаете тот же stale-кеш); кеш превышает 10GB/repo-лимит GitHub (старейшие entry вытесняются — иногда не те); дефолт retention артефактов 90 дней (стоимость storage растёт — снижайте для ephemeral-сборок).