Ruby on Rails GitHub Actions con MySQL

Guía básica para crear tu CI con GitHub Actions y MySQL

GitHub Actions te permite configurar un pipeline de integración continua (CI) directamente en tu repositorio. En esta guía te muestro cómo configurar GitHub Actions para un proyecto de Ruby on Rails 6 con MySQL.

Archivo de workflow: .github/workflows/ruby.yml

Crea el siguiente archivo en tu repositorio:

name: Ruby

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: test_db
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - uses: actions/checkout@v2

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7
          bundler-cache: true

      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: |
          gem install bundler
          bundle install --jobs 4 --retry 3
          yarn install

      - name: Setup database
        env:
          RAILS_ENV: test
          DB_HOST: 127.0.0.1
          DB_PORT: 3306
          DB_USER: root
          DB_PASSWORD: root
        run: |
          cp config/database.yml.ci config/database.yml
          bundle exec rails db:create
          bundle exec rails db:schema:load

      - name: Run tests
        env:
          RAILS_ENV: test
          DB_HOST: 127.0.0.1
          DB_PORT: 3306
          DB_USER: root
          DB_PASSWORD: root
        run: bundle exec rails test

Archivo de configuración: config/database.yml.ci

Crea este archivo para que GitHub Actions pueda conectarse a la base de datos de MySQL del servicio:

test:
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci
  database: test_db
  host: <%= ENV['DB_HOST'] %>
  port: <%= ENV['DB_PORT'] %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>

El archivo database.yml.ci es necesario porque la configuración de base de datos en GitHub Actions es diferente a la de tu entorno local. En el paso "Setup database" del workflow, copiamos este archivo como database.yml para que Rails lo use durante las pruebas. Las variables de entorno (DB_HOST, DB_PORT, etc.) se conectan al servicio de MySQL que definimos en la sección "services" del workflow.