Когда добавил на сайт поиск, скорость сборки, которая была подвергнута сумасшедшей оптимизации год назад, и занимала около 30 секунд (из них 6 секунд сама сборка сайта), просела до катастрофических 2,5 минут — из-за того, что теперь надо качать еще один репозиторий для поиска, собирать его и индексировать данные.

Решение — довольно очевидное: закэшировать все что можно! Для многих популярных языков/билд систем и т.п. уже скорее всего есть какие-то действия, где все подумали за вас. Например, у меня в сборке уже был ruby/setup-ruby, который использовал кэш.

Однако, если ваш стек технологий не очень зрелый и/или в нем есть экзотические шаги, то можно сделать все самому с помощью actions/cache. По сути, вас должны волновать две вещи: какую папку кэшируем и что будет ключом в кэше.

Однако есть и нюанс. Не получится закэшировать системные папки из-за проблемы с правами. Поэтому всякие установленные инструменты надо будет класть в “рабочую папку”. При этом для менеджера пакетов APT есть действие, которое помогает обойти это ограничение.

Разумеется, если у вас очень стабильное окружение для сборки, можно и докер-образ собрать. Но это уже более продвинутый уровень. Аналогично можно поиграться и с GitHub Releases.

Ну и ключи для кэша надо подбирать, хотя бы немного подумав.

В итоге у меня получилось вот такой workflow, который при горячих кэшах собирает сайт за те же 30 секунд что и раньше (опять оптимизация в 5 раз, кек), несмотря на добавленную функциональность.