name: CI

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  lint:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby 2.3
      uses: ruby/setup-ruby@master
      with:
        ruby-version: 2.3
    - name: Cache Ruby dependencies
      uses: actions/cache@v1
      with:
        path: ./vendor/bundle
        key: v1-linux-2.3-${{ hashFiles('rmagick.gemspec') }}
        restore-keys: |
          v1-linux-2.3-${{ hashFiles('rmagick.gemspec') }}
    - 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: 10
    strategy:
      matrix:
        ruby-version: [2.3, 2.4, 2.5, 2.6, 2.7]
        imagemagick-version:
          - { full: 6.7.7-10, major-minor: '6.7' }
          - { full: 6.8.9-10, major-minor: '6.8' }
          - { full: 6.9.11-2, major-minor: '6.9' }
          - { full: 7.0.10-2, major-minor: '7.0' }

    name: Linux, Ruby ${{ matrix.ruby-version }}, IM ${{ matrix.imagemagick-version.major-minor }}
    steps:
    - uses: actions/checkout@v2
    - name: Cache ImageMagick
      uses: actions/cache@v1
      with:
        path: ./build-ImageMagick
        key: v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
        restore-keys: |
          v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
    - 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: Cache Ruby dependencies
      uses: actions/cache@v1
      with:
        path: ./vendor/bundle
        key: v1-linux-${{ matrix.ruby-version }}-${{ hashFiles('rmagick.gemspec') }}
        restore-keys: |
          v1-linux-${{ matrix.ruby-version }}-${{ hashFiles('rmagick.gemspec') }}
    - 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
    strategy:
      matrix:
        ruby-version: [2.6, 2.7]
        imagemagick-version:
          - { full: 6.9.11-2, major-minor: '6.9' }
          - { full: 7.0.10-2, major-minor: '7.0' }

    name: macOS, Ruby ${{ matrix.ruby-version }}, IM ${{ matrix.imagemagick-version.major-minor }}
    steps:
    - uses: actions/checkout@v2
    - name: Cache ImageMagick
      uses: actions/cache@v1
      with:
        path: ./build-ImageMagick
        key: v1-macos-imagemagick-${{ matrix.imagemagick-version.full }}
        restore-keys: |
          v1-macos-imagemagick-${{ matrix.imagemagick-version.full }}
    - 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: Cache Ruby dependencies
      uses: actions/cache@v1
      with:
        path: ./vendor/bundle
        key: v1-macos-${{ matrix.ruby-version }}-${{ hashFiles('rmagick.gemspec') }}
        restore-keys: |
          v1-macos-${{ matrix.ruby-version }}-${{ hashFiles('rmagick.gemspec') }}
    - name: Build and test with Rake
      run: |
        bundle install --path=vendor/bundle --jobs 4 --retry 3
        bundle exec rake

  test-windows:
    runs-on: windows-latest
    timeout-minutes: 10
    strategy:
      matrix:
        ruby-version: [2.3, 2.4, 2.5, 2.6, 2.7]
        imagemagick-version:
          - { full: 6.8.9-10, major-minor: '6.8' }
          - { full: 6.9.11-2, major-minor: '6.9' }
          - { full: 7.0.10-2, major-minor: '7.0' }
    name: MSWin, Ruby ${{ matrix.ruby-version }}, IM ${{ matrix.imagemagick-version.major-minor }}
    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby ${{ matrix.ruby-version }}
      uses: ruby/setup-ruby@master
      with:
        ruby-version: ${{ matrix.ruby-version }}
    - name: Install ImageMagick
      run: |
        $imagemagick_version = "${{ matrix.imagemagick-version.full }}"
        $imagemagick_version_without_patch = $imagemagick_version.split("-")[0]
        $installer_name = "ImageMagick-$($imagemagick_version)-Q16-x64-dll.exe"
        $url = "https://ftp.icm.edu.pl/pub/graphics/ImageMagick/binaries/$($installer_name)"
        wget $url --progress=dot
        cmd.exe /D /S /C "$($installer_name) /DIR=D:\ImageMagick /VERYSILENT /TASKS=install_Devel"
        cmd.exe /D /S /C "choco install ghostscript"
    - name: Cache Ruby dependencies
      uses: actions/cache@v1
      with:
        path: ./vendor/bundle
        key: v1-windows-${{ matrix.ruby-version }}-${{ hashFiles('rmagick.gemspec') }}
        restore-keys: |
          v1-windows-${{ matrix.ruby-version }}-${{ hashFiles('rmagick.gemspec') }}
    - name: Build and test with Rake
      run: |
        cmd.exe /D /S /C "SET MAKE=make & SET PATH=D:\ImageMagick;%PATH% & bundle install --path=vendor/bundle --retry 3 & bundle exec rake"