gitlab-CI для проекта на стеке Haskell: как кэшировать встроенные библиотеки? - PullRequest
2 голосов
/ 19 сентября 2019

Я использую следующий файл .gitlab-ci.yml для настройки gitlab-CI для проекта стека Haskell, созданного с помощью stack new actividad3 --resolver=lts-14.6.

image: haskell:8.6.5

cache:
  paths:
    - .stack
    - .stack-work
    - target

test:
  stage: test
  script:
    - ghc --version
    - stack --system-ghc build
    - stack test

Сборка и тестирование проекта длится почти 5 минут.Большую часть времени тратится на создание библиотеки hspec.Есть ли способ кэширования используемых библиотек между конвейерными запусками?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 сентября 2019

Наиболее важным для правильного кэширования стекового проекта является сохранение всех задействованных папок:

  • Рабочий каталог проекта (или много каталогов, если это настройка из нескольких пакетов), обычно .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, вероятно, будет достаточным, но в случае необходимости это вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...