name: CI

on:
  push:
    branches:
      - main
  pull_request:
  workflow_dispatch:

permissions:
  contents: read

jobs:
  lint:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby 2.3
      uses: ruby/setup-ruby@master
      with:
        ruby-version: '2.3'
    - name: Build and test with Rake
      run: |
        bundle install --path=vendor/bundle --jobs 4 --retry 3
        STYLE_CHECKS=true bundle exec rubocop

  test-linux:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    strategy:
      matrix:
        ruby-version: ['2.3', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1']
        imagemagick-version:
          - { full: 6.7.7-10, major-minor: '6.7' }
          - { full: 6.8.9-10, major-minor: '6.8' }
          - { full: 6.9.12-59, major-minor: '6.9' }
          - { full: 7.1.0-44, major-minor: '7.0' }

    name: Linux, Ruby ${{ matrix.ruby-version }}, IM ${{ matrix.imagemagick-version.major-minor }}
    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby ${{ matrix.ruby-version }}
      uses: ruby/setup-ruby@master
      with:
        ruby-version: ${{ matrix.ruby-version }}
    - name: Update/Install packages
      run: |
        export IMAGEMAGICK_VERSION=${{ matrix.imagemagick-version.full }}
        ./before_install_linux.sh
    - name: Build and test with Rake
      run: |
        bundle install --path=vendor/bundle --jobs 4 --retry 3
        bundle exec rake

  test-macos:
    runs-on: macos-latest
    timeout-minutes: 20
    strategy:
      matrix:
        ruby-version: ['2.6', '2.7', '3.0', '3.1']
        imagemagick-version:
          - { full: 6.9.12-59, major-minor: '6.9' }
          - { full: 7.1.0-44, major-minor: '7.0' }

    name: macOS, Ruby ${{ matrix.ruby-version }}, IM ${{ matrix.imagemagick-version.major-minor }}
    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby ${{ matrix.ruby-version }}
      uses: ruby/setup-ruby@master
      with:
        ruby-version: ${{ matrix.ruby-version }}
    - name: Update/Install packages
      run: |
        IMAGEMAGICK_VERSION=${{ matrix.imagemagick-version.full }} ./before_install_osx.sh
    - name: Build and test with Rake
      run: |
        bundle install --path=vendor/bundle --jobs 4 --retry 3
        bundle exec rake