name: XGBoost-R-Tests

on: [push, pull_request]

env:
  R_PACKAGES: c('XML', 'data.table', 'ggplot2', 'DiagrammeR', 'Ckmeans.1d.dp', 'vcd', 'testthat', 'lintr', 'knitr', 'rmarkdown', 'e1071', 'cplm', 'devtools', 'float', 'titanic')
  GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}

jobs:
  lintr:
    runs-on: ${{ matrix.config.os }}
    name: Run R linters on OS ${{ matrix.config.os }}, R ${{ matrix.config.r }}, Compiler ${{ matrix.config.compiler }}, Build ${{ matrix.config.build }}
    strategy:
      matrix:
        config:
          - {os: windows-latest, r: 'release', compiler: 'mingw', build: 'autotools'}
    env:
      R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
      RSPM: ${{ matrix.config.rspm }}

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: 'true'

    - uses: r-lib/actions/setup-r@master
      with:
        r-version: ${{ matrix.config.r }}

    - name: Cache R packages
      uses: actions/cache@v2
      with:
        path: ${{ env.R_LIBS_USER }}
        key: ${{ runner.os }}-r-${{ matrix.config.r }}-2-${{ hashFiles('R-package/DESCRIPTION') }}
        restore-keys: ${{ runner.os }}-r-${{ matrix.config.r }}-2-${{ hashFiles('R-package/DESCRIPTION') }}

    - name: Install dependencies
      shell: Rscript {0}
      run: |
        install.packages(${{ env.R_PACKAGES }},
                         repos = 'http://cloud.r-project.org',
                         dependencies = c('Depends', 'Imports', 'LinkingTo'))
    - name: Install igraph on Windows
      shell: Rscript {0}
      if: matrix.config.os == 'windows-latest'
      run: |
        install.packages('igraph', type='binary')

    - name: Run lintr
      run: |
        cd R-package
        R.exe CMD INSTALL .
        Rscript.exe tests/helper_scripts/run_lint.R

  test-with-R:
    runs-on: ${{ matrix.config.os }}
    name: Test R on OS ${{ matrix.config.os }}, R ${{ matrix.config.r }}, Compiler ${{ matrix.config.compiler }}, Build ${{ matrix.config.build }}
    strategy:
      fail-fast: false
      matrix:
        config:
          - {os: windows-2016, r: 'release', compiler: 'mingw', build: 'autotools'}
          - {os: windows-2016, r: 'release', compiler: 'msvc', build: 'cmake'}
          - {os: windows-2016, r: 'release', compiler: 'mingw', build: 'cmake'}
    env:
      R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
      RSPM: ${{ matrix.config.rspm }}

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: 'true'

    - uses: r-lib/actions/setup-r@master
      with:
        r-version: ${{ matrix.config.r }}

    - name: Cache R packages
      uses: actions/cache@v2
      with:
        path: ${{ env.R_LIBS_USER }}
        key: ${{ runner.os }}-r-${{ matrix.config.r }}-2-${{ hashFiles('R-package/DESCRIPTION') }}
        restore-keys: ${{ runner.os }}-r-${{ matrix.config.r }}-2-${{ hashFiles('R-package/DESCRIPTION') }}

    - name: Install dependencies
      shell: Rscript {0}
      run: |
        install.packages(${{ env.R_PACKAGES }},
                         repos = 'http://cloud.r-project.org',
                         dependencies = c('Depends', 'Imports', 'LinkingTo'))
    - name: Install igraph on Windows
      shell: Rscript {0}
      if: matrix.config.os == 'windows-2016'
      run: |
        install.packages('igraph', type='binary', dependencies = c('Depends', 'Imports', 'LinkingTo'))

    - uses: actions/setup-python@v2
      with:
        python-version: '3.7'
        architecture: 'x64'

    - name: Test R
      run: |
        python tests/ci_build/test_r_package.py --compiler='${{ matrix.config.compiler }}' --build-tool='${{ matrix.config.build }}'

  test-R-CRAN:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        config:
          - {r: 'release'}

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: 'true'

    - uses: r-lib/actions/setup-r@master
      with:
        r-version: ${{ matrix.config.r }}

    - uses: r-lib/actions/setup-tinytex@master

    - name: Install system packages
      run: |
        sudo apt-get update && sudo apt-get install libcurl4-openssl-dev libssl-dev libssh2-1-dev libgit2-dev pandoc pandoc-citeproc libglpk-dev

    - name: Cache R packages
      uses: actions/cache@v2
      with:
        path: ${{ env.R_LIBS_USER }}
        key: ${{ runner.os }}-r-${{ matrix.config.r }}-2-${{ hashFiles('R-package/DESCRIPTION') }}
        restore-keys: ${{ runner.os }}-r-${{ matrix.config.r }}-2-${{ hashFiles('R-package/DESCRIPTION') }}

    - name: Install dependencies
      shell: Rscript {0}
      run: |
        install.packages(${{ env.R_PACKAGES }},
                         repos = 'http://cloud.r-project.org',
                         dependencies = c('Depends', 'Imports', 'LinkingTo'))
        install.packages('igraph', repos = 'http://cloud.r-project.org', dependencies = c('Depends', 'Imports', 'LinkingTo'))

    - name: Check R Package
      run: |
        # Print stacktrace upon success of failure
        make Rcheck || tests/ci_build/print_r_stacktrace.sh fail
        tests/ci_build/print_r_stacktrace.sh success
