# contains non-functional tests, like checks on docs
# and code style
name: Static Analysis

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master
    - release/*

# automatically cancel in-progress builds if another commit is pushed
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  COMPILER: 'gcc'
  CONDA_ENV: test-env
  GITHUB_ACTIONS: 'true'
  OS_NAME: 'linux'
  PYTHON_VERSION: '3.11'

jobs:
  test:
    name: ${{ matrix.task }}
    runs-on: ubuntu-22.04
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        include:
          - task: lint
          - task: check-docs
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 5
          submodules: false
      - name: Setup and run tests
        shell: bash
        run: |
          export TASK="${{ matrix.task }}"
          export BUILD_DIRECTORY="$GITHUB_WORKSPACE"
          export CONDA=${HOME}/miniforge
          export PATH=${CONDA}/bin:$HOME/.local/bin:${PATH}
          $GITHUB_WORKSPACE/.ci/setup.sh || exit 1
          $GITHUB_WORKSPACE/.ci/test.sh || exit 1
  r-check-docs:
    name: r-package-check-docs
    timeout-minutes: 60
    runs-on: ubuntu-latest
    container: rocker/verse
    steps:
      - name: Trust git cloning LightGBM
        run: |
          git config --global --add safe.directory "${GITHUB_WORKSPACE}"
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 5
          submodules: true
      - name: Install packages
        shell: bash
        run: |
          Rscript -e "install.packages(c('R6', 'data.table', 'jsonlite', 'knitr', 'markdown', 'Matrix', 'RhpcBLASctl', 'roxygen2', 'testthat'), repos = 'https://cran.rstudio.com', Ncpus = parallel::detectCores())"
          sh build-cran-package.sh || exit 1
          R CMD INSTALL --with-keep.source lightgbm_*.tar.gz || exit 1
      - name: Test documentation
        shell: bash --noprofile --norc {0}
        run: |
          Rscript --vanilla -e "roxygen2::roxygenize('R-package/', load = 'installed')" || exit 1
          num_doc_files_changed=$(
              git diff --name-only | grep --count -E "\.Rd|NAMESPACE"
          )
          if [[ ${num_doc_files_changed} -gt 0 ]]; then
              echo "Some R documentation files have changed. Please re-generate them and commit those changes."
              echo ""
              echo "    sh build-cran-package.sh"
              echo "    R CMD INSTALL --with-keep.source lightgbm_*.tar.gz"
              echo "    Rscript -e \"roxygen2::roxygenize('R-package/', load = 'installed')\""
              echo ""
              exit 1
          fi
  all-static-analysis-jobs-successful:
    if: always()
    runs-on: ubuntu-latest
    needs: [test, r-check-docs]
    steps:
    - name: Note that all tests succeeded
      uses: re-actors/alls-green@v1.2.2
      with:
        jobs: ${{ toJSON(needs) }}
