env:
  RUBY_VERSION: 2.7.2
  DB_ADAPTER: postgresql
  DB_HOST: localhost
  DB_NAME: postgres
  DB_USERNAME: postgres
  DB_PASSWORD: postgres
  DB_PORT: 5432

name: CI
on:
  pull_request:
    branches: "*"

jobs:
  test:
    name: Rubocop + RSpec
    runs-on: ubuntu-18.04

    services:
      postgres:
        image: postgres:13.2-alpine
        env:
          POSTGRES_DB: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_USER: postgres
        ports:
          - 5432:5432
        # Health checks to wait until postgres is ready
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Ruby Setup
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ env.RUBY_VERSION }}

      - name: Bundle cache
        uses: actions/cache@v2
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gems-

      - name: Bundle install
        run: |
          bundle config path vendor/bundle
          bundle install --jobs 4 --retry 3

      - name: Setup database
        run:  |
          bundler exec rails db:create RAILS_ENV=test
          bundler exec rails db:migrate RAILS_ENV=test
      - name: Run Rubocop
        run: bundle exec rubocop --parallel --fail-level F

      - name: Run RSpec
        run: bundle exec rspec
