name: CI

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

permissions:
  contents: read

jobs:
  lint:
    runs-on: ubuntu-20.04
    timeout-minutes: 20
    name: Lint
    steps:
    - uses: actions/checkout@v3
      with:
        ref: ${{ github.event.pull_request.head.sha }}
    - name: Set up Ruby 2.5
      uses: ruby/setup-ruby@master
      with:
        ruby-version: '2.5'
        bundler-cache: true
    - name: Install dependencies
      run: bundle install --path=vendor/bundle --jobs 4 --retry 3
    - name: RuboCop Problem Matchers
      uses: r7kamura/rubocop-problem-matchers-action@v1
    - name: Run tests
      run: bundle exec rubocop

  test-ruby:
    runs-on: ubuntu-20.04
    timeout-minutes: 20
    strategy:
      matrix:
        ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1']
        imagemagick-version:
          - { full: 7.1.0-39, major-minor: '7.0' }
    name: Ruby ${{ matrix.ruby-version }}
    steps:
    - uses: actions/checkout@v3
    - name: Cache ImageMagick
      uses: actions/cache@v3
      with:
        path: ./build-ImageMagick
        key: v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
        restore-keys: |
          v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
    - name: Install ImageMagick ${{ matrix.imagemagick-version.full }}
      run: |
        export IMAGEMAGICK_VERSION=${{ matrix.imagemagick-version.full }}
        ./before_install_linux.sh
    - name: Set up Ruby
      uses: ruby/setup-ruby@master
      with:
        ruby-version: ${{ matrix.ruby-version }}
        bundler-cache: false
    - name: Install dependencies
      run: bundle install --path=vendor/bundle --jobs 4 --retry 3
    - name: Run tests
      run: bundle exec rake

  test-jruby:
    runs-on: ubuntu-20.04
    timeout-minutes: 20
    strategy:
      matrix:
        ruby-version: ['9.2.20.1', '9.3.4.0']
    name: JRuby ${{ matrix.ruby-version }}
    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby
      uses: ruby/setup-ruby@master
      with:
        ruby-version: jruby-${{ matrix.ruby-version }}
        bundler-cache: true
    - name: Install dependencies
      run: bundle install --path=vendor/bundle --jobs 4 --retry 3
    - name: Run tests
      run: bundle exec rake