Наиболее важным для правильного кэширования стекового проекта является сохранение всех задействованных папок:
- Рабочий каталог проекта (или много каталогов, если это настройка из нескольких пакетов), обычно
.stack-work
- Каталог глобального стека, обычно
~/.stack
- Возможно, отдельная папка с двоичными файлами (ghc, ghc-pkg, ...)
Они могут варьироваться междуоперационные системы и настраиваются с помощью переменных среды, но могут быть легко обнаружены с помощью запроса stack
.Запустите stack path
внутри стекового проекта, и вы увидите все пути, которые могут понадобиться для стека.Это те, которые вам необходимо кэшировать и восстанавливать на CI, чтобы предотвратить перекомпиляцию:
stack path --stack-root
.stack-work
каталогов во всех пакетах в проекте(пути от packages
в stack.yaml
) - в Windows
stack path --programs
На всякий случай, если вы хотите увидеть, как этот материал может быть программно получен из самого HaskellВы можете найти его здесь
Некоторое время назад я написал этот инструмент под названием cache-s3
, который позволяет использовать корзину AWS S3 в качестве кэша для вашего CI ион имеет отдельный режим, который будет сохранять и восстанавливать все связанные со стеком каталоги.Это, вероятно, избыточное решение для простого проекта, поэтому механизм кеширования gitlab, вероятно, будет достаточным, но в случае необходимости это вариант.