name: CUDA Version

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
  # Run manually by clicking a button in the UI
  workflow_dispatch:

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

jobs:
  test:
    # yamllint disable-line rule:line-length
    name: ${{ matrix.task }} ${{ matrix.cuda_version }} ${{ matrix.method }} (${{ matrix.linux_version }}, ${{ matrix.compiler }}, Python ${{ matrix.python_version }})
    # yamllint disable-line rule:line-length
    # ref: https://docs.github.com/en/actions/concepts/runners/about-larger-runners#specifications-for-gpu-larger-runners
    runs-on: LightGBM-GPU
    container:
      image: nvcr.io/nvidia/cuda:${{ matrix.cuda_version }}-devel-${{ matrix.linux_version }}
      env:
        CMAKE_BUILD_PARALLEL_LEVEL: 4
        COMPILER: ${{ matrix.compiler }}
        CONDA: /tmp/miniforge
        DEBIAN_FRONTEND: noninteractive
        METHOD: ${{ matrix.method }}
        OS_NAME: linux
        PYTHON_VERSION: ${{ matrix.python_version }}
        TASK: ${{ matrix.task }}
        SKBUILD_STRICT_CONFIG: true
      options: --gpus all
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        include:
          - method: wheel
            compiler: gcc
            python_version: "3.11"
            cuda_version: "12.8.0"
            linux_version: "ubuntu22.04"
            task: cuda
          - method: source
            compiler: gcc
            python_version: "3.13"
            cuda_version: "12.2.2"
            linux_version: "ubuntu22.04"
            task: cuda
          - method: pip
            compiler: clang
            python_version: "3.12"
            cuda_version: "11.8.0"
            linux_version: "ubuntu20.04"
            task: cuda
    steps:
      - name: Install latest git and sudo
        run: |
          apt-get update
          apt-get install --no-install-recommends -y \
              ca-certificates \
              software-properties-common
          add-apt-repository ppa:git-core/ppa -y
          apt-get update
          apt-get install --no-install-recommends -y \
              git \
              sudo
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 5
          submodules: true
      - name: Setup and run tests
        run: |
          export BUILD_DIRECTORY="$GITHUB_WORKSPACE"
          export PATH=$CONDA/bin:$PATH

          # check GPU usage
          nvidia-smi

          # build and test
          $GITHUB_WORKSPACE/.ci/setup.sh
          $GITHUB_WORKSPACE/.ci/test.sh
  all-cuda-jobs-successful:
    if: always()
    runs-on: ubuntu-latest
    needs: [test]
    steps:
      - name: Note that all tests succeeded
        uses: re-actors/alls-green@v1.2.2
        with:
          jobs: ${{ toJSON(needs) }}
