name: Canary

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  test:
    name: Test (Ruby ${{ matrix.ruby }}, Gemfile ${{ matrix.gemfile }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        ruby: ['3.2', '3.3', 'head', 'jruby-9.4', 'jruby-head']
        gemfile:
          - gemfiles/postgresql/master.gemfile
          - gemfiles/mysql2/master.gemfile
          - gemfiles/sqlite3/master.gemfile
          - gemfiles/trilogy/master.gemfile
        exclude:
          - ruby: 'jruby-9.4'
            gemfile: gemfiles/trilogy/master.gemfile
          - ruby: 'jruby-head'
            gemfile: gemfiles/trilogy/master.gemfile
        include:
          # jruby with rails 7.1 and 7.2 is still under development with jruby
          - ruby: jruby-9.4
            gemfile: gemfiles/mysql2/7-1.gemfile
          - ruby: jruby-9.4
            gemfile: gemfiles/postgresql/7-1.gemfile
          - ruby: jruby-9.4
            gemfile: gemfiles/sqlite3/7-1.gemfile
          - ruby: jruby-9.4
            gemfile: gemfiles/mysql2/7-2.gemfile
          - ruby: jruby-9.4
            gemfile: gemfiles/postgresql/7-2.gemfile
          - ruby: jruby-9.4
            gemfile: gemfiles/sqlite3/7-2.gemfile
    continue-on-error: true
    services:
      postgres:
        image: postgres
        # Provide the password for postgres
        env:
          POSTGRES_DB: delayed_job_test
          POSTGRES_PASSWORD: postgres
        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          # Maps tcp port 5432 on service container to the host
          - 5432:5432
      mysql:
        image: mysql
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: delayed_job_test
        ports:
            - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
    - uses: actions/checkout@v4
    - uses: ruby/setup-ruby@v1
      env:
        BUNDLE_GEMFILE: ${{ matrix.gemfile }}
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler-cache: true # runs 'bundle install' and caches installed gems automatically
    - name: Run tests
      env:
        BUNDLE_GEMFILE: ${{ matrix.gemfile }}
      run: bundle exec rspec
    - name: Coveralls Parallel
      uses: coverallsapp/github-action@main
      with:
        github-token: ${{ secrets.github_token }}
        flag-name: run-${{ matrix.ruby }}-${{ matrix.gemfile }}
        parallel: true

  finish:
    needs: test
    runs-on: ubuntu-latest
    steps:
    - name: Coveralls Finished
      uses: coverallsapp/github-action@main
      with:
        github-token: ${{ secrets.github_token }}
        parallel-finished: true
