@@ -48,26 +48,30 @@ if [[ "${TASK}" == "r-package" ]] || [[ "${TASK}" == "r-rchk" ]]; then
48
48
fi
49
49
50
50
if [[ " $TASK " == " cpp-tests" ]]; then
51
+ cmake_args=(
52
+ -DBUILD_CPP_TEST=ON
53
+ -DUSE_OPENMP=OFF
54
+ -DUSE_DEBUG=ON
55
+ )
51
56
if [[ $METHOD == " with-sanitizers" ]]; then
52
- extra_cmake_opts= " -DUSE_SANITIZER=ON"
57
+ cmake_args+=( " -DUSE_SANITIZER=ON" )
53
58
if [[ -n $SANITIZERS ]]; then
54
- extra_cmake_opts= " $extra_cmake_opts -DENABLED_SANITIZERS=$SANITIZERS "
59
+ cmake_args+=( " -DENABLED_SANITIZERS=$SANITIZERS " )
55
60
fi
56
- else
57
- extra_cmake_opts=" "
58
61
fi
59
- cmake -B build -S . -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON $extra_cmake_opts
62
+ cmake -B build -S . " ${cmake_args[@]} "
60
63
cmake --build build --target testlightgbm -j4 || exit 1
61
64
./testlightgbm || exit 1
62
65
exit 0
63
66
fi
64
67
65
68
# including python=version[build=*cpython] to ensure that conda doesn't fall back to pypy
66
- CONDA_PYTHON_REQUIREMENT=" python=$PYTHON_VERSION [build=*cpython]"
69
+ CONDA_PYTHON_REQUIREMENT=" python=${ PYTHON_VERSION} [build=*cpython]"
67
70
68
71
if [[ $TASK == " if-else" ]]; then
69
- conda create -q -y -n $CONDA_ENV ${CONDA_PYTHON_REQUIREMENT} numpy
70
- source activate $CONDA_ENV
72
+ conda create -q -y -n " ${CONDA_ENV} " " ${CONDA_PYTHON_REQUIREMENT} " numpy
73
+ # shellcheck disable=SC1091
74
+ source activate " ${CONDA_ENV} "
71
75
cmake -B build -S . || exit 1
72
76
cmake --build build --target lightgbm -j4 || exit 1
73
77
cd " $BUILD_DIRECTORY /tests/cpp_tests"
@@ -89,14 +93,14 @@ if [[ $TASK == "swig" ]]; then
89
93
python ./.ci/check-dynamic-dependencies.py ./objdump.log || exit 1
90
94
fi
91
95
if [[ $PRODUCES_ARTIFACTS == " true" ]]; then
92
- cp ./build/lightgbmlib.jar $ BUILD_ARTIFACTSTAGINGDIRECTORY /lightgbmlib_$OS_NAME .jar
96
+ cp ./build/lightgbmlib.jar " ${ BUILD_ARTIFACTSTAGINGDIRECTORY} /lightgbmlib_${ OS_NAME} .jar"
93
97
fi
94
98
exit 0
95
99
fi
96
100
97
101
if [[ $TASK == " lint" ]]; then
98
- conda create -q -y -n $ CONDA_ENV \
99
- ${CONDA_PYTHON_REQUIREMENT} \
102
+ conda create -q -y -n " ${ CONDA_ENV} " \
103
+ " ${CONDA_PYTHON_REQUIREMENT} " \
100
104
' cmakelint>=1.4.3' \
101
105
' cpplint>=1.6.0' \
102
106
' matplotlib-base>=3.9.1' \
@@ -105,7 +109,8 @@ if [[ $TASK == "lint" ]]; then
105
109
' pyarrow-core>=17.0' \
106
110
' scikit-learn>=1.5.2' \
107
111
' r-lintr>=3.1.2'
108
- source activate $CONDA_ENV
112
+ # shellcheck disable=SC1091
113
+ source activate " ${CONDA_ENV} "
109
114
echo " Linting Python code"
110
115
bash ./.ci/lint-python.sh || exit 1
111
116
echo " Linting R code"
@@ -116,32 +121,31 @@ if [[ $TASK == "lint" ]]; then
116
121
fi
117
122
118
123
if [[ $TASK == " check-docs" ]] || [[ $TASK == " check-links" ]]; then
119
- cd " ${BUILD_DIRECTORY} /docs"
120
124
conda env create \
121
- -n $ CONDA_ENV \
122
- --file ./env.yml || exit 1
125
+ -n " ${ CONDA_ENV} " \
126
+ --file ./docs/ env.yml || exit 1
123
127
conda install \
124
128
-q \
125
129
-y \
126
- -n $ CONDA_ENV \
130
+ -n " ${ CONDA_ENV} " \
127
131
' doxygen>=1.10.0' \
128
132
' rstcheck>=6.2.4' || exit 1
129
- source activate $CONDA_ENV
133
+ # shellcheck disable=SC1091
134
+ source activate " ${CONDA_ENV} "
130
135
# check reStructuredText formatting
131
- cd " ${BUILD_DIRECTORY} /python-package"
132
- rstcheck --report-level warning $( find . -type f -name " *.rst " ) || exit 1
133
- cd " ${BUILD_DIRECTORY} /docs"
134
- rstcheck --report-level warning --ignore-directives=autoclass,autofunction,autosummary,doxygenfile $( find . -type f -name " *.rst " ) || exit 1
136
+ find " ${BUILD_DIRECTORY} /python-package" -type f -name " *.rst " \
137
+ -exec rstcheck --report-level warning {} \+ || exit 1
138
+ find " ${BUILD_DIRECTORY} /docs" -type f -name " *.rst " \
139
+ -exec rstcheck --report-level warning --ignore-directives=autoclass,autofunction,autosummary,doxygenfile {} \+ || exit 1
135
140
# build docs
136
- make html || exit 1
141
+ make -C docs html || exit 1
137
142
if [[ $TASK == " check-links" ]]; then
138
143
# check docs for broken links
139
144
pip install linkchecker
140
- linkchecker --config=.linkcheckerrc ./_build/html/* .html || exit 1
145
+ linkchecker --config=.linkcheckerrc ./docs/ _build/html/* .html || exit 1
141
146
exit 0
142
147
fi
143
148
# check the consistency of parameters' descriptions and other stuff
144
- cd " ${BUILD_DIRECTORY} "
145
149
cp ./docs/Parameters.rst ./docs/Parameters-backup.rst
146
150
cp ./src/io/config_auto.cpp ./src/io/config_auto-backup.cpp
147
151
python ./.ci/parameter-generator.py || exit 1
@@ -151,30 +155,31 @@ if [[ $TASK == "check-docs" ]] || [[ $TASK == "check-links" ]]; then
151
155
fi
152
156
153
157
if [[ $PYTHON_VERSION == " 3.7" ]]; then
154
- CONDA_REQUIREMENT_FILES= " --file ${BUILD_DIRECTORY} /.ci/conda-envs/ci-core-py37.txt"
158
+ CONDA_REQUIREMENT_FILE= " ${BUILD_DIRECTORY} /.ci/conda-envs/ci-core-py37.txt"
155
159
elif [[ $PYTHON_VERSION == " 3.8" ]]; then
156
- CONDA_REQUIREMENT_FILES= " --file ${BUILD_DIRECTORY} /.ci/conda-envs/ci-core-py38.txt"
160
+ CONDA_REQUIREMENT_FILE= " ${BUILD_DIRECTORY} /.ci/conda-envs/ci-core-py38.txt"
157
161
else
158
- CONDA_REQUIREMENT_FILES= " --file ${BUILD_DIRECTORY} /.ci/conda-envs/ci-core.txt"
162
+ CONDA_REQUIREMENT_FILE= " ${BUILD_DIRECTORY} /.ci/conda-envs/ci-core.txt"
159
163
fi
160
164
161
165
conda create \
162
166
-y \
163
- -n $ CONDA_ENV \
164
- ${CONDA_REQUIREMENT_FILES} \
165
- ${CONDA_PYTHON_REQUIREMENT} \
167
+ -n " ${ CONDA_ENV} " \
168
+ --file " ${CONDA_REQUIREMENT_FILE} " \
169
+ " ${CONDA_PYTHON_REQUIREMENT} " \
166
170
|| exit 1
167
171
172
+ # shellcheck disable=SC1091
168
173
source activate $CONDA_ENV
169
174
170
175
cd " ${BUILD_DIRECTORY} "
171
176
172
177
if [[ $TASK == " sdist" ]]; then
173
178
sh ./build-python.sh sdist || exit 1
174
179
sh .ci/check-python-dists.sh ./dist || exit 1
175
- pip install ./dist/lightgbm-$LGB_VER .tar.gz -v || exit 1
180
+ pip install " ./dist/lightgbm-${ LGB_VER} .tar.gz" -v || exit 1
176
181
if [[ $PRODUCES_ARTIFACTS == " true" ]]; then
177
- cp ./dist/lightgbm-$LGB_VER .tar.gz $ BUILD_ARTIFACTSTAGINGDIRECTORY || exit 1
182
+ cp " ./dist/lightgbm-${ LGB_VER} .tar.gz" " ${ BUILD_ARTIFACTSTAGINGDIRECTORY} " || exit 1
178
183
fi
179
184
pytest ./tests/python_package_test || exit 1
180
185
exit 0
@@ -183,7 +188,7 @@ elif [[ $TASK == "bdist" ]]; then
183
188
sh ./build-python.sh bdist_wheel || exit 1
184
189
sh .ci/check-python-dists.sh ./dist || exit 1
185
190
if [[ $PRODUCES_ARTIFACTS == " true" ]]; then
186
- cp dist/lightgbm-$LGB_VER -py3-none-macosx* .whl $ BUILD_ARTIFACTSTAGINGDIRECTORY || exit 1
191
+ cp " $( echo " dist/lightgbm-${ LGB_VER} -py3-none-macosx" * .whl) " " ${ BUILD_ARTIFACTSTAGINGDIRECTORY} " || exit 1
187
192
fi
188
193
else
189
194
if [[ $ARCH == " x86_64" ]]; then
@@ -199,10 +204,10 @@ elif [[ $TASK == "bdist" ]]; then
199
204
./dist/tmp.whl || exit 1
200
205
mv \
201
206
./dist/tmp.whl \
202
- ./dist/lightgbm-$LGB_VER -py3-none-$PLATFORM .whl || exit 1
207
+ " ./dist/lightgbm-${ LGB_VER} -py3-none-${ PLATFORM} .whl" || exit 1
203
208
sh .ci/check-python-dists.sh ./dist || exit 1
204
209
if [[ $PRODUCES_ARTIFACTS == " true" ]]; then
205
- cp dist/lightgbm-$LGB_VER -py3-none-$PLATFORM .whl $ BUILD_ARTIFACTSTAGINGDIRECTORY || exit 1
210
+ cp " dist/lightgbm-${ LGB_VER} -py3-none-${ PLATFORM} .whl" " ${ BUILD_ARTIFACTSTAGINGDIRECTORY} " || exit 1
206
211
fi
207
212
# Make sure we can do both CPU and GPU; see tests/python_package_test/test_dual.py
208
213
export LIGHTGBM_TEST_DUAL_CPU_GPU=1
@@ -221,14 +226,14 @@ if [[ $TASK == "gpu" ]]; then
221
226
pip install \
222
227
-v \
223
228
--config-settings=cmake.define.USE_GPU=ON \
224
- ./dist/lightgbm-$LGB_VER .tar.gz \
229
+ " ./dist/lightgbm-${ LGB_VER} .tar.gz" \
225
230
|| exit 1
226
231
pytest ./tests/python_package_test || exit 1
227
232
exit 0
228
233
elif [[ $METHOD == " wheel" ]]; then
229
234
sh ./build-python.sh bdist_wheel --gpu || exit 1
230
235
sh ./.ci/check-python-dists.sh ./dist || exit 1
231
- pip install ./dist/lightgbm-$LGB_VER * .whl -v || exit 1
236
+ pip install " $( echo " ./dist/lightgbm-${ LGB_VER} " * .whl) " -v || exit 1
232
237
pytest ./tests || exit 1
233
238
exit 0
234
239
elif [[ $METHOD == " source" ]]; then
@@ -246,14 +251,14 @@ elif [[ $TASK == "cuda" ]]; then
246
251
pip install \
247
252
-v \
248
253
--config-settings=cmake.define.USE_CUDA=ON \
249
- ./dist/lightgbm-$LGB_VER .tar.gz \
254
+ " ./dist/lightgbm-${ LGB_VER} .tar.gz" \
250
255
|| exit 1
251
256
pytest ./tests/python_package_test || exit 1
252
257
exit 0
253
258
elif [[ $METHOD == " wheel" ]]; then
254
259
sh ./build-python.sh bdist_wheel --cuda || exit 1
255
260
sh ./.ci/check-python-dists.sh ./dist || exit 1
256
- pip install ./dist/lightgbm-$LGB_VER * .whl -v || exit 1
261
+ pip install " $( echo " ./dist/lightgbm-${ LGB_VER} " * .whl) " -v || exit 1
257
262
pytest ./tests || exit 1
258
263
exit 0
259
264
elif [[ $METHOD == " source" ]]; then
@@ -266,14 +271,14 @@ elif [[ $TASK == "mpi" ]]; then
266
271
pip install \
267
272
-v \
268
273
--config-settings=cmake.define.USE_MPI=ON \
269
- ./dist/lightgbm-$LGB_VER .tar.gz \
274
+ " ./dist/lightgbm-${ LGB_VER} .tar.gz" \
270
275
|| exit 1
271
276
pytest ./tests/python_package_test || exit 1
272
277
exit 0
273
278
elif [[ $METHOD == " wheel" ]]; then
274
279
sh ./build-python.sh bdist_wheel --mpi || exit 1
275
280
sh ./.ci/check-python-dists.sh ./dist || exit 1
276
- pip install ./dist/lightgbm-$LGB_VER * .whl -v || exit 1
281
+ pip install " $( echo " ./dist/lightgbm-${ LGB_VER} " * .whl) " -v || exit 1
277
282
pytest ./tests || exit 1
278
283
exit 0
279
284
elif [[ $METHOD == " source" ]]; then
@@ -291,13 +296,13 @@ pytest ./tests || exit 1
291
296
if [[ $TASK == " regular" ]]; then
292
297
if [[ $PRODUCES_ARTIFACTS == " true" ]]; then
293
298
if [[ $OS_NAME == " macos" ]]; then
294
- cp ./lib_lightgbm.dylib $ BUILD_ARTIFACTSTAGINGDIRECTORY /lib_lightgbm.dylib
299
+ cp ./lib_lightgbm.dylib " ${ BUILD_ARTIFACTSTAGINGDIRECTORY} /lib_lightgbm.dylib"
295
300
else
296
301
if [[ $COMPILER == " gcc" ]]; then
297
302
objdump -T ./lib_lightgbm.so > ./objdump.log || exit 1
298
303
python ./.ci/check-dynamic-dependencies.py ./objdump.log || exit 1
299
304
fi
300
- cp ./lib_lightgbm.so $ BUILD_ARTIFACTSTAGINGDIRECTORY /lib_lightgbm.so
305
+ cp ./lib_lightgbm.so " ${ BUILD_ARTIFACTSTAGINGDIRECTORY} /lib_lightgbm.so"
301
306
fi
302
307
fi
303
308
cd " $BUILD_DIRECTORY /examples/python-guide"
@@ -311,10 +316,10 @@ matplotlib.use\(\"Agg\"\)\
311
316
' h5py>=3.10' \
312
317
' ipywidgets>=8.1.2' \
313
318
' notebook>=7.1.2'
314
- for f in * .py ** /* .py; do python $f || exit 1; done # run all examples
319
+ for f in * .py ** /* .py; do python " ${f} " || exit 1; done # run all examples
315
320
cd " $BUILD_DIRECTORY /examples/python-guide/notebooks"
316
321
sed -i' .bak' ' s/INTERACTIVE = False/assert False, \\"Interactive mode disabled\\"/' interactive_plot_example.ipynb
317
- jupyter nbconvert --ExecutePreprocessor.timeout=180 --to notebook --execute --inplace * .ipynb || exit 1 # run all notebooks
322
+ jupyter nbconvert --ExecutePreprocessor.timeout=180 --to notebook --execute --inplace ./ * .ipynb || exit 1 # run all notebooks
318
323
319
324
# importing the library should succeed even if all optional dependencies are not present
320
325
conda uninstall -n $CONDA_ENV --force --yes \
0 commit comments