TL;DR Мы связались с сутью примера `circle.yml`, описанного в этом посте из Crystal wiki.
Одно из первых действий, которое мы делаем при запуске проекта в Манасе, — это настройка сервера непрерывной интеграции. Поскольку в основном мы используем GitHub, для проектов с открытым исходным кодом Трэвис — не проблема. Однако мы также работаем над рядом частных репозиториев, на которые у Трэвиса есть сильная конкуренция: CircleCI.

CircleCI предлагает единый контейнер CI для неограниченного количества частных репозиториев в рамках бесплатного тарифного плана. Это здорово, если вы играете с десятками небольших проектов, которые не совсем готовы к прайм-тайму, но вы все еще хотите придерживаться лучших практик без резкого увеличения затрат.
В наши дни мы находимся именно в такой ситуации, экспериментируя с нашим любимым Crystal в различных приложениях.
Можно подумать, что использование CircleCI для создания приложений, использующих новые языки программирования, такие как Crystal, должно заставить вас ненавидеть свою жизнь. На самом деле, это оказывается довольно приятным опытом! Просто добавьте файл circle.yml в корневой каталог вашего проекта с содержимым, указанным ниже.
Пара замечаний:
- Crystal не поставляется с основными дистрибутивами Linux (пока), а также не поддерживается CircleCI (пока). Вот почему нам нужно установить его вручную, как вы можете видеть на
dependencies: pre:. - CircleCI использует Ubuntu, поэтому вам может быть интересно, почему мы не используем официальный APT-репозиторий Crystal вместо автономного пакета tar.gz. Причина в том, что в настоящее время кеш CircleCI плохо работает с APT (см. следующий пункт).
- Мы используем функцию кеша CircleCI, которая значительно сокращает время сборки, если ваши зависимости не меняются часто. Мы достигаем этого, указав целевой каталог Crystal в
dependencies: cached_directories:, а затем условно выполнив команды установки вdependencies: pre:. - Опять же, поскольку CircleCI в настоящее время не предоставляет поддержку Crystal «из коробки», нам нужно адаптировать способ запуска тестов. Мы просто устанавливаем осколки перед запуском (
test: pre:), а затем запускаем стандартную командуcrystal specизtest: override.
Вот и все! Теперь у вас нет оправданий для того, чтобы писать красивый, производительный код в Crystal, надежно опираясь на надежную среду непрерывной интеграции, которая защитит вас в случае регрессии :).
Первоначально опубликовано на manas.tech 13 июня 2016 г.