trigger: branches: include: - master tags: include: - v* pr: - master variables: AZURE: 'true' CMAKE_BUILD_PARALLEL_LEVEL: 4 PYTHON_VERSION: '3.12' runCodesignValidationInjection: false skipComponentGovernanceDetection: true Codeql.Enabled: false Codeql.SkipTaskAutoInjection: true DOTNET_CLI_TELEMETRY_OPTOUT: true DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true SKBUILD_STRICT_CONFIG: true resources: # The __work/ directory, where Azure DevOps writes the source files, needs to be read-write because # LightGBM's CI jobs write files in the source directory. # # For all the containers included here, all other directories that Azure mounts in are mounted as read-only # to minimize the risk of side effects from one run affecting future runs. # ref: https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/resources-containers-container containers: - container: linux-artifact-builder image: lightgbm/vsts-agent:manylinux_2_28_x86_64 mountReadOnly: work: false externals: true tools: true tasks: true - container: ubuntu-latest image: 'ubuntu:22.04' options: "--name ci-container -v /usr/bin/docker:/tmp/docker:ro" mountReadOnly: work: false externals: true tools: true tasks: true - container: rbase image: wch1/r-debug mountReadOnly: work: false externals: true tools: true tasks: true jobs: ########################################### - job: Maintenance ########################################### pool: mariner-20240410-0 container: ubuntu-latest # routine maintenance (like periodically deleting old files), # to be run on 1 random CI runner in the self-hosted pool each runner steps: - script: | print-diagnostics(){ echo "---- df -h -m ----" df -h -m echo "---- docker system df ----" /tmp/docker system df echo "---- docker images ----" /tmp/docker images } # check disk usage print-diagnostics # remove old containers, container images, volumes # ref: https://stackoverflow.com/a/32723127/3986677) echo "---- running 'docker system prune' ----" /tmp/docker system prune \ --all \ --force \ --filter until=720h # check disk usage again print-diagnostics displayName: clean ########################################### - job: Linux ########################################### variables: COMPILER: gcc SETUP_CONDA: 'false' OS_NAME: 'linux' PRODUCES_ARTIFACTS: 'true' pool: mariner-20240410-0 container: linux-artifact-builder strategy: matrix: regular: TASK: regular PYTHON_VERSION: '3.10' sdist: TASK: sdist PYTHON_VERSION: '3.8' bdist: TASK: bdist PYTHON_VERSION: '3.9' inference: TASK: if-else mpi_source: TASK: mpi METHOD: source PYTHON_VERSION: '3.9' gpu_source: TASK: gpu METHOD: source swig: TASK: swig steps: - script: | echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY" echo "##vso[task.prependpath]/usr/lib64/openmpi/bin" echo "##vso[task.prependpath]$CONDA/bin" displayName: 'Set variables' - script: | git clean -d -f -x displayName: 'Clean source directory' - script: | echo '$(Build.SourceVersion)' > '$(Build.ArtifactStagingDirectory)/commit.txt' displayName: 'Add commit hash to artifacts archive' - task: Bash@3 displayName: Setup inputs: filePath: $(Build.SourcesDirectory)/.ci/setup.sh targetType: filePath - task: Bash@3 displayName: Test inputs: filePath: $(Build.SourcesDirectory)/.ci/test.sh targetType: filePath - task: PublishBuildArtifacts@1 condition: and(succeeded(), in(variables['TASK'], 'regular', 'sdist', 'bdist', 'swig'), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/'))) inputs: pathtoPublish: '$(Build.ArtifactStagingDirectory)' artifactName: PackageAssets artifactType: container ########################################### - job: Linux_latest ########################################### variables: COMPILER: clang-17 DEBIAN_FRONTEND: 'noninteractive' IN_UBUNTU_BASE_CONTAINER: 'true' OS_NAME: 'linux' SETUP_CONDA: 'true' pool: mariner-20240410-0 container: ubuntu-latest strategy: matrix: regular: TASK: regular sdist: TASK: sdist bdist: TASK: bdist PYTHON_VERSION: '3.10' inference: TASK: if-else mpi_source: TASK: mpi METHOD: source mpi_pip: TASK: mpi METHOD: pip PYTHON_VERSION: '3.11' mpi_wheel: TASK: mpi METHOD: wheel PYTHON_VERSION: '3.9' gpu_source: TASK: gpu METHOD: source PYTHON_VERSION: '3.11' gpu_pip: TASK: gpu METHOD: pip PYTHON_VERSION: '3.10' gpu_wheel: TASK: gpu METHOD: wheel PYTHON_VERSION: '3.9' cpp_tests: TASK: cpp-tests METHOD: with-sanitizers steps: - script: | echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY" CONDA=$HOME/miniforge echo "##vso[task.setvariable variable=CONDA]$CONDA" echo "##vso[task.prependpath]$CONDA/bin" displayName: 'Set variables' # https://github.com/microsoft/azure-pipelines-agent/issues/2043#issuecomment-687983301 - script: | /tmp/docker exec -t -u 0 ci-container \ sh -c "apt-get update && apt-get -o Dpkg::Options::="--force-confold" -y install sudo" displayName: 'Install sudo' - script: | sudo apt-get update sudo apt-get install -y --no-install-recommends git git clean -d -f -x displayName: 'Clean source directory' - task: Bash@3 displayName: Setup inputs: filePath: $(Build.SourcesDirectory)/.ci/setup.sh targetType: 'filePath' - task: Bash@3 displayName: Test inputs: filePath: $(Build.SourcesDirectory)/.ci/test.sh targetType: 'filePath' ########################################### - job: QEMU_multiarch ########################################### variables: BUILD_DIRECTORY: /LightGBM COMPILER: gcc PRODUCES_ARTIFACTS: 'true' pool: vmImage: ubuntu-22.04 timeoutInMinutes: 180 strategy: matrix: bdist: TASK: bdist ARCH: aarch64 steps: - script: | sudo apt-get update sudo apt-get install --no-install-recommends -y \ binfmt-support \ qemu \ qemu-user \ qemu-user-static displayName: 'Install QEMU' - script: | docker run --rm --privileged multiarch/qemu-user-static --reset -p yes displayName: 'Enable Docker multi-architecture support' - script: | git clean -d -f -x displayName: 'Clean source directory' - script: | cat > docker-script.sh <