Рабочий процесс Rails CI на GitHub Actions в 5 строк

Несколько лет назад Мэтт Свонсон написал отличный пост о настройке 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 в своем приложении и дайте мне знать, как это работает для вас. Вопросы и запросы на исправление приветствуются!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *