Использование Travis для сборки Hakyll сайта

27 February 2017 #haskell#hakyll#travis

Чуть ранее я рассматривал различные генераторы статичных сайтов. И затрагивал использование Hakyll.

На тот момент у меня возникли проблемы с его установкой, что пришлось решать и тратить на это время. И сама сборка заняла порядка часа времени. Стало интересно, каким образом можно использовать Hakyll для сборки сайта на CI-серверах? Неужели каждый раз придется тратить так много времени на подготовку окружения?

На мое удивление, установка Haskell и подготовка окружения на локальной машине прошли в этот раз успешно. Единственно, использовал для установки Stack, и только его. Последовательность команд для подготовки окружения:

$ brew install haskell-stack
$ stack setup
$ stack install hakyll
$ export $PATH=$PATH:~/.local/bin
$ hakyll-init blog

Таким образом была создана основа для нового блога, в которой предсталены несколько статей и несколько статичных страниц. Для тестирования создал новый репозиторий travis-hakyll, связал его с Travis и в течение нескольких комитов провел настройку генерации.

Первый успешный билд: 205553372, в течение которого была проведена подготовка всего окружения и был установлен Hakyll. На сборку потрачено 21 минута 28 секунд. Очень много, если учитывать, что мы генерируем статичный сайт.

Ключевым в настройке Travis оказывается параметр cache:

cache:
  directories:
  - $HOME/.stack

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

Повторный запуск сборки с данным параметром прошел куда быстрее: 205561470, на весь билд ушла 1 минута 21 секунда. Из которых порядка минуты было затрачено только на то, чтобы распаковать архив с кешем.

Время сборки сайта на Hakyll вполне сопоставимо со временем сборки моего сайта на Jekyll. Можно было бы значительно ускорить его, если была бы возможность использовать готовый бинарник Hakyll. Но проблема в том, что при изменении конфигурации сайта требуется пересобирать бинарник. Как вариант, можно попробовать организовать два разных проекта: один для подготовки бинарного файла Hakyll и заливки его на внешний сервер, и второй непосредственно для генерации сайта, в котором только лишь проводиться загрузка готового бинарника и его запуск.