name: GitHub Actions

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

jobs:
  test:
    name: ${{ matrix.task }} (${{ matrix.os }}, ${{ matrix.compiler }}, R ${{ matrix.r_version }}, ${{ matrix.build_type }})
    runs-on: ${{ matrix.os }}
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        include:
          ################
          # CMake builds #
          ################
          - os: ubuntu-latest
            task: r-package
            compiler: gcc
            r_version: 3.6
            build_type: cmake
          - os: ubuntu-latest
            task: r-package
            compiler: gcc
            r_version: 4.0
            build_type: cmake
          - os: ubuntu-latest
            task: r-package
            compiler: clang
            r_version: 3.6
            build_type: cmake
          - os: ubuntu-latest
            task: r-package
            compiler: clang
            r_version: 4.0
            build_type: cmake
          - os: ubuntu-latest
            task: r-package-check-docs
            compiler: gcc
            r_version: 4.0
            build_type: cmake
          - os: macOS-latest
            task: r-package
            compiler: gcc
            r_version: 3.6
            build_type: cmake
          - os: macOS-latest
            task: r-package
            compiler: gcc
            r_version: 4.0
            build_type: cmake
          - os: macOS-latest
            task: r-package
            compiler: clang
            r_version: 3.6
            build_type: cmake
          - os: macOS-latest
            task: r-package
            compiler: clang
            r_version: 4.0
            build_type: cmake
          - os: windows-latest
            task: r-package
            compiler: MINGW
            toolchain: MINGW
            r_version: 3.6
            build_type: cmake
          - os: windows-latest
            task: r-package
            compiler: MINGW
            toolchain: MSYS
            r_version: 4.0
            build_type: cmake
          # Visual Studio 2017
          - os: windows-2016
            task: r-package
            compiler: MSVC
            toolchain: MSVC
            r_version: 3.6
            build_type: cmake
          # Visual Studio 2019
          - os: windows-2019
            task: r-package
            compiler: MSVC
            toolchain: MSVC
            r_version: 4.0
            build_type: cmake
          ###############
          # CRAN builds #
          ###############
          - os: windows-latest
            task: r-package
            compiler: MINGW
            toolchain: MSYS
            r_version: 4.0
            build_type: cran
          - os: ubuntu-latest
            task: r-package
            compiler: gcc
            r_version: 4.0
            build_type: cran
          - os: macOS-latest
            task: r-package
            compiler: clang
            r_version: 4.0
            build_type: cran
    steps:
      - name: Prevent conversion of line endings on Windows
        if: startsWith(matrix.os, 'windows')
        shell: pwsh
        run: git config --global core.autocrlf false
      - name: Checkout repository
        uses: actions/checkout@v1
        with:
          fetch-depth: 5
          submodules: true
      - name: Setup and run tests on Linux and macOS
        if: matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest'
        shell: bash
        run: |
          export TASK="${{ matrix.task }}"
          export COMPILER="${{ matrix.compiler }}"
          export GITHUB_ACTIONS="true"
          if [[ "${{ matrix.os }}" == "macOS-latest" ]]; then
              export OS_NAME="macos"
              export R_MAC_VERSION=3.6.3
          elif [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then
              export OS_NAME="linux"
              export R_LINUX_VERSION=3.6.3-1bionic
          fi
          export BUILD_DIRECTORY="$GITHUB_WORKSPACE"
          export CONDA="$HOME/miniconda"
          export PATH="$CONDA/bin:${HOME}/.local/bin:$PATH"
          export R_VERSION="${{ matrix.r_version }}"
          export R_BUILD_TYPE="${{ matrix.build_type }}"
          $GITHUB_WORKSPACE/.ci/setup.sh
          $GITHUB_WORKSPACE/.ci/test.sh
      - name: Use conda on Windows
        if: startsWith(matrix.os, 'windows')
        uses: goanpeca/setup-miniconda@v1
        with:
          auto-update-conda: false
      - name: Setup and run tests on Windows
        if: startsWith(matrix.os, 'windows')
        shell: pwsh -command ". {0}"
        run: |
          $env:BUILD_SOURCESDIRECTORY = $env:GITHUB_WORKSPACE
          $env:TOOLCHAIN = "${{ matrix.toolchain }}"
          $env:R_VERSION = "${{ matrix.r_version }}"
          $env:R_BUILD_TYPE = "${{ matrix.build_type }}"
          $env:COMPILER = "${{ matrix.compiler }}"
          $env:GITHUB_ACTIONS = "true"
          $env:TASK = "${{ matrix.task }}"
          conda init powershell
          & "$env:GITHUB_WORKSPACE/.ci/test_windows.ps1"
  all-successful:
    # https://github.community/t/is-it-possible-to-require-all-github-actions-tasks-to-pass-without-enumerating-them/117957/4?u=graingert
    runs-on: ubuntu-latest
    needs: [test]
    steps:
    - name: Note that all tests succeeded
      run: echo "🎉"
