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

Andrew Ziem's avatar
Andrew Ziem committed
9
# unify environment variable for Azure DevOps and AppVeyor
10
11
12
13
if (Test-Path env:APPVEYOR) {
  $env:APPVEYOR = "true"
}

14
15
16
17
18
if ($env:TASK -eq "r-package") {
  & $env:BUILD_SOURCESDIRECTORY\.ci\test_r_package_windows.ps1 ; Check-Output $?
  Exit 0
}

19
20
if ($env:TASK -eq "cpp-tests") {
  mkdir $env:BUILD_SOURCESDIRECTORY/build; cd $env:BUILD_SOURCESDIRECTORY/build
21
  cmake -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON -A x64 ..
22
  cmake --build . --target testlightgbm --config Debug ; Check-Output $?
23
24
  cd ../Debug
  .\testlightgbm.exe ; Check-Output $?
25
26
27
  Exit 0
}

28
if ($env:TASK -eq "swig") {
29
  $env:JAVA_HOME = $env:JAVA_HOME_8_X64  # there is pre-installed Eclipse Temurin 8 somewhere
30
31
32
33
  $ProgressPreference = "SilentlyContinue"  # progress bar bug extremely slows down download speed
  Invoke-WebRequest -Uri "https://github.com/microsoft/LightGBM/releases/download/v2.0.12/swigwin-4.0.2.zip" -OutFile $env:BUILD_SOURCESDIRECTORY/swig/swigwin.zip -UserAgent "NativeHost"
  Add-Type -AssemblyName System.IO.Compression.FileSystem
  [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:BUILD_SOURCESDIRECTORY/swig/swigwin.zip", "$env:BUILD_SOURCESDIRECTORY/swig")
34
  $env:PATH = "$env:BUILD_SOURCESDIRECTORY/swig/swigwin-4.0.2;" + $env:PATH
35
36
37
  mkdir $env:BUILD_SOURCESDIRECTORY/build; cd $env:BUILD_SOURCESDIRECTORY/build
  cmake -A x64 -DUSE_SWIG=ON .. ; cmake --build . --target ALL_BUILD --config Release ; Check-Output $?
  if ($env:AZURE -eq "true") {
38
    cp $env:BUILD_SOURCESDIRECTORY/build/lightgbmlib.jar $env:BUILD_ARTIFACTSTAGINGDIRECTORY/lightgbmlib_win.jar ; Check-Output $?
39
40
41
42
  }
  Exit 0
}

43
44
45
46
# setup for Python
conda init powershell
conda activate
conda config --set always_yes yes --set changeps1 no
47
48
49
50
51
52

# ref:
# * https://stackoverflow.com/a/62897729/3986677
# * https://github.com/microsoft/LightGBM/issues/5899
conda install brotlipy

53
54
conda update -q -y conda
conda create -q -y -n $env:CONDA_ENV `
55
  cffi `
56
57
58
59
60
61
  cloudpickle `
  joblib `
  matplotlib `
  numpy `
  pandas `
  psutil `
62
  pyarrow `
63
64
65
66
67
68
69
70
71
  pytest `
  "python=$env:PYTHON_VERSION[build=*cpython]" `
  python-graphviz `
  scikit-learn `
  scipy ; Check-Output $?

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

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

94
95
96
97
  Write-Output "Current OpenCL drivers:"
  Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors

  conda activate $env:CONDA_ENV
98
99
100
  cd $env:BUILD_SOURCESDIRECTORY
  sh "build-python.sh" bdist_wheel --integrated-opencl ; Check-Output $?
  sh $env:BUILD_SOURCESDIRECTORY/.ci/check_python_dists.sh $env:BUILD_SOURCESDIRECTORY/dist ; Check-Output $?
101
102
  cd dist; pip install --user @(Get-ChildItem *py3-none-win_amd64.whl) ; Check-Output $?
  cp @(Get-ChildItem *py3-none-win_amd64.whl) $env:BUILD_ARTIFACTSTAGINGDIRECTORY
103
} elseif (($env:APPVEYOR -eq "true") -and ($env:TASK -eq "python")) {
104
  cd $env:BUILD_SOURCESDIRECTORY
105
  if ($env:COMPILER -eq "MINGW") {
106
    sh $env:BUILD_SOURCESDIRECTORY/build-python.sh install --user --mingw ; Check-Output $?
107
  } else {
108
    sh $env:BUILD_SOURCESDIRECTORY/build-python.sh install --user; Check-Output $?
109
  }
110
111
}

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

123
pytest $tests ; Check-Output $?
124

125
if (($env:TASK -eq "regular") -or (($env:APPVEYOR -eq "true") -and ($env:TASK -eq "python"))) {
126
127
  cd $env:BUILD_SOURCESDIRECTORY/examples/python-guide
  @("import matplotlib", "matplotlib.use('Agg')") + (Get-Content "plot_example.py") | Set-Content "plot_example.py"
128
  (Get-Content "plot_example.py").replace('graph.render(view=True)', 'graph.render(view=False)') | Set-Content "plot_example.py"  # prevent interactive window mode
129
  conda install -q -y -n $env:CONDA_ENV "h5py>3.0" ipywidgets notebook
130
  foreach ($file in @(Get-ChildItem *.py)) {
131
132
    @("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 $?
133
  }  # run all examples
134
  cd $env:BUILD_SOURCESDIRECTORY/examples/python-guide/notebooks
135
  (Get-Content "interactive_plot_example.ipynb").replace('INTERACTIVE = False', 'assert False, \"Interactive mode disabled\"') | Set-Content "interactive_plot_example.ipynb"
136
  jupyter nbconvert --ExecutePreprocessor.timeout=180 --to notebook --execute --inplace *.ipynb ; Check-Output $?  # run all notebooks
137
}