test-windows.ps1 6.41 KB
Newer Older
1
function Check-Output {
2
3
4
  param( [bool]$success )
  if (!$success) {
    $host.SetShouldExit(-1)
5
    exit 1
6
7
8
  }
}

9
$env:CONDA_ENV = "test-env"
10
$env:LGB_VER = (Get-Content $env:BUILD_SOURCESDIRECTORY\VERSION.txt).trim()
11
12
13
14
15
16
17
# Use custom temp directory to avoid
# > warning MSB8029: The Intermediate directory or Output directory cannot reside under the Temporary directory
# > as it could lead to issues with incremental build.
# And make sure this directory is always clean
$env:TMPDIR = "$env:USERPROFILE\tmp"
Remove-Item $env:TMPDIR -Force -Recurse -ErrorAction Ignore
[Void][System.IO.Directory]::CreateDirectory($env:TMPDIR)
18

19
if ($env:TASK -eq "r-package") {
20
  & .\.ci\test-r-package-windows.ps1 ; Check-Output $?
21
22
23
  Exit 0
}

24
if ($env:TASK -eq "cpp-tests") {
25
26
27
  cmake -B build -S . -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON -A x64
  cmake --build build --target testlightgbm --config Debug ; Check-Output $?
  .\Debug\testlightgbm.exe ; Check-Output $?
28
29
30
  Exit 0
}

31
if ($env:TASK -eq "swig") {
32
  $env:JAVA_HOME = $env:JAVA_HOME_8_X64  # there is pre-installed Eclipse Temurin 8 somewhere
33
  $ProgressPreference = "SilentlyContinue"  # progress bar bug extremely slows down download speed
34
  Invoke-WebRequest -Uri "https://sourceforge.net/projects/swig/files/latest/download" -OutFile $env:BUILD_SOURCESDIRECTORY/swig/swigwin.zip -UserAgent "curl"
35
  Add-Type -AssemblyName System.IO.Compression.FileSystem
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:BUILD_SOURCESDIRECTORY/swig/swigwin.zip", "$env:BUILD_SOURCESDIRECTORY/swig") ; Check-Output $?
  $SwigFolder = Get-ChildItem -Directory -Name -Path "$env:BUILD_SOURCESDIRECTORY/swig"
  $env:PATH = "$env:BUILD_SOURCESDIRECTORY/swig/$SwigFolder;" + $env:PATH
  $BuildLogFileName = "$env:BUILD_SOURCESDIRECTORY\cmake_build.log"
  cmake -B build -S . -A x64 -DUSE_SWIG=ON *> "$BuildLogFileName" ; $build_succeeded = $?
  Write-Output "CMake build logs:"
  Get-Content -Path "$BuildLogFileName"
  Check-Output $build_succeeded
  $checks = Select-String -Path "${BuildLogFileName}" -Pattern "-- Found SWIG.*${SwigFolder}/swig.exe"
  $checks_cnt = $checks.Matches.length
  if ($checks_cnt -eq 0) {
    Write-Output "Wrong SWIG version was found (expected '${SwigFolder}'). Check the build logs."
    Check-Output $False
  }
50
  cmake --build build --target ALL_BUILD --config Release ; Check-Output $?
51
  if ($env:AZURE -eq "true") {
52
    cp ./build/lightgbmlib.jar $env:BUILD_ARTIFACTSTAGINGDIRECTORY/lightgbmlib_win.jar ; Check-Output $?
53
54
55
56
  }
  Exit 0
}

57
58
59
60
# setup for Python
conda init powershell
conda activate
conda config --set always_yes yes --set changeps1 no
61
conda update -q -y conda "python=$env:PYTHON_VERSION[build=*cpython]"
62
63
64

if ($env:PYTHON_VERSION -eq "3.7") {
  $env:CONDA_REQUIREMENT_FILE = "$env:BUILD_SOURCESDIRECTORY/.ci/conda-envs/ci-core-py37.txt"
65
66
} elseif ($env:PYTHON_VERSION -eq "3.8") {
  $env:CONDA_REQUIREMENT_FILE = "$env:BUILD_SOURCESDIRECTORY/.ci/conda-envs/ci-core-py38.txt"
67
68
69
70
71
72
73
74
75
} else {
  $env:CONDA_REQUIREMENT_FILE = "$env:BUILD_SOURCESDIRECTORY/.ci/conda-envs/ci-core.txt"
}

conda create `
  -y `
  -n $env:CONDA_ENV `
  --file $env:CONDA_REQUIREMENT_FILE `
  "python=$env:PYTHON_VERSION[build=*cpython]" ; Check-Output $?
76
77
78
79

if ($env:TASK -ne "bdist") {
  conda activate $env:CONDA_ENV
}
80

81
cd $env:BUILD_SOURCESDIRECTORY
82
if ($env:TASK -eq "regular") {
83
84
  cmake -B build -S . -A x64 ; Check-Output $?
  cmake --build build --target ALL_BUILD --config Release ; Check-Output $?
85
86
87
  sh ./build-python.sh install --precompile ; Check-Output $?
  cp ./Release/lib_lightgbm.dll $env:BUILD_ARTIFACTSTAGINGDIRECTORY
  cp ./Release/lightgbm.exe $env:BUILD_ARTIFACTSTAGINGDIRECTORY
88
89
}
elseif ($env:TASK -eq "sdist") {
90
  sh ./build-python.sh sdist ; Check-Output $?
91
  sh ./.ci/check-python-dists.sh ./dist ; Check-Output $?
92
  cd dist; pip install @(Get-ChildItem *.gz) -v ; Check-Output $?
93
94
}
elseif ($env:TASK -eq "bdist") {
95
  # Import the Chocolatey profile module so that the RefreshEnv command
Andrew Ziem's avatar
Andrew Ziem committed
96
  # invoked below properly updates the current PowerShell session environment.
97
98
  $module = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
  Import-Module "$module" ; Check-Output $?
99
  RefreshEnv
100

101
102
103
104
  Write-Output "Current OpenCL drivers:"
  Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors

  conda activate $env:CONDA_ENV
105
  sh "build-python.sh" bdist_wheel --integrated-opencl ; Check-Output $?
106
  sh ./.ci/check-python-dists.sh ./dist ; Check-Output $?
107
  cd dist; pip install @(Get-ChildItem *py3-none-win_amd64.whl) ; Check-Output $?
108
  cp @(Get-ChildItem *py3-none-win_amd64.whl) $env:BUILD_ARTIFACTSTAGINGDIRECTORY
109
110
} elseif (($env:APPVEYOR -eq "true") -and ($env:TASK -eq "python")) {
  if ($env:COMPILER -eq "MINGW") {
111
    sh ./build-python.sh install --mingw ; Check-Output $?
112
  } else {
113
    sh ./build-python.sh install; Check-Output $?
114
  }
115
116
}

117
if (($env:TASK -eq "sdist") -or (($env:APPVEYOR -eq "true") -and ($env:TASK -eq "python"))) {
118
  # cannot test C API with "sdist" task
119
  $tests = $env:BUILD_SOURCESDIRECTORY + "/tests/python_package_test"
120
} else {
121
  $tests = $env:BUILD_SOURCESDIRECTORY + "/tests"
122
123
}
if ($env:TASK -eq "bdist") {
124
125
  # Make sure we can do both CPU and GPU; see tests/python_package_test/test_dual.py
  $env:LIGHTGBM_TEST_DUAL_CPU_GPU = "1"
126
}
127

128
pytest $tests ; Check-Output $?
129

130
if (($env:TASK -eq "regular") -or (($env:APPVEYOR -eq "true") -and ($env:TASK -eq "python"))) {
131
132
  cd $env:BUILD_SOURCESDIRECTORY/examples/python-guide
  @("import matplotlib", "matplotlib.use('Agg')") + (Get-Content "plot_example.py") | Set-Content "plot_example.py"
133
  (Get-Content "plot_example.py").replace('graph.render(view=True)', 'graph.render(view=False)') | Set-Content "plot_example.py"  # prevent interactive window mode
134
  conda install -y -n $env:CONDA_ENV "h5py>=3.10" "ipywidgets>=8.1.2" "notebook>=7.1.2"
135
  foreach ($file in @(Get-ChildItem *.py)) {
136
137
    @("import sys, warnings", "warnings.showwarning = lambda message, category, filename, lineno, file=None, line=None: sys.stdout.write(warnings.formatwarning(message, category, filename, lineno, line))") + (Get-Content $file) | Set-Content $file
    python $file ; Check-Output $?
138
  }  # run all examples
139
  cd $env:BUILD_SOURCESDIRECTORY/examples/python-guide/notebooks
140
  (Get-Content "interactive_plot_example.ipynb").replace('INTERACTIVE = False', 'assert False, \"Interactive mode disabled\"') | Set-Content "interactive_plot_example.ipynb"
141
  jupyter nbconvert --ExecutePreprocessor.timeout=180 --to notebook --execute --inplace *.ipynb ; Check-Output $?  # run all notebooks
142
}