Несколько лет назад Мэтт Свонсон написал отличный пост о настройке Rails CI на GitHub Actions. Он быстро стал моим основным руководством по настройке CI для новых приложений.
Со временем я сделал несколько обновлений и корректировок, поэтому всякий раз, когда я начинал новый проект, я копировал конфигурацию из одного из моих старых проектов. Но это означало, что каждый проект постепенно становился непоследовательным, и некоторые обновлялись чаще, чем другие.
Я хотел иметь единый базовый рабочий процесс для всех моих приложений, чтобы, если я вношу изменения, все приложения могли легко ими воспользоваться.
Многократно используемые рабочие процессы
В ноябре 2021 года GitHub объявил о том, что многоразовые рабочие процессы стали общедоступными.
Хотя GitHub Actions уже давно поддерживает составные действия, Reusable Workflows позволяет создать гораздо более лаконичную конфигурацию и ссылаться на весь рабочий процесс из другого репозитория, а не создавать каждый шаг по отдельности.
Подробнее об этом читайте в блоге GitHub.
Представляем setup-rails
Я опубликовал setup-rails как рабочий процесс многократного использования для быстрого и простого включения CI для приложений Rails.
Создав в своем репозитории один файл, например .github/workflows/verify.yml
, с приведенным ниже содержимым, вы получите рабочий процесс CI, который конфигурирует базу данных и запускает тесты вашего приложения:
name: Verify
on: [push]
jobs:
verify:
uses: andyw8/setup-rails/.github/workflows/verify.yml@v1
Вы можете взглянуть на этот пример приложения, чтобы увидеть его в действии.
При первом запуске рабочий процесс может быть медленным, но последующие запуски должны быть намного быстрее после кэширования зависимостей.
Я также поделился Railsbyte, чтобы вы могли настроить его одной командой:
rails app:template LOCATION="https://railsbytes.com/script/VMys8A"
Принципы и конфигурация
Я разработал setup-rails
так, чтобы он работал на базовом уровне без необходимости настройки для большинства приложений.
Есть несколько опций, которые вы можете включить в зависимости от вашего приложения, например RuboCop, Bundler Audit и RSpec — подробности смотрите в README.
В настоящее время поддерживается только Postgres, но я хотел бы расширить его, чтобы охватить хотя бы MySQL.
Усовершенствования
Опираясь на отличную отправную точку Мэтта, я сделал несколько обновлений:
- Использует последние версии
setup-node
иsetup-ruby
. - Добавлена поддержка
rails test
(например, Minitest), а также RSpec - Включен Dependabot для обновления действий, от которых зависит
setup-rails
. - Использует кэширование JavaScript в
setup-node
, а не собственный подход - Пропускает
development
гемы при запуске Bundler, чтобы избежать ненужной работы.
Вовлечение
Я уже использую это в большинстве своих приложений, но мне бы хотелось получить более широкий отклик.
Пожалуйста, попробуйте setup-rails в своем приложении и дайте мне знать, как это работает для вас. Вопросы и запросы на исправление приветствуются!