microsoft / LightGBM

A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.
https://lightgbm.readthedocs.io/en/latest/
MIT License
16.32k stars 3.8k forks source link

[ci] enforce 'shellcheck' checks #6498

Open jameslamb opened 1 week ago

jameslamb commented 1 week ago

Summary

This project has several shell scripts. Those should be tested with shellcheck.

Motivation

Shell scripts are used in this project for 2 primary purposes:

Checking those scripts with static analyzers would help to reduce the risk of mistakes being silently missed. It'd also give us a chance of catching issues in code paths that aren't covered by CI.

Description

This should be done with pre-commit, using the latest version of https://pypi.org/project/shellcheck-py/.

It is not necessary to fix all of the problems in a single pull request.

To work on this, add the shellcheck-py config linked in the docs above, then run this:

pre-commit run --all-files

That'll generate a list of errors. Put up a pull request that fixes some of them, and explain in the PR description exactly which errors it fixes.

As of this writing, that check returned the following:

full list of errors (click me) ```text In .ci/check_python_dists.sh line 3: set -e -E -u ^-- SC3041 (warning): In POSIX sh, set flag -E is undefined. In .ci/check_python_dists.sh line 19: twine check --strict ${DIST_DIR}/* || exit 1 ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: twine check --strict "${DIST_DIR}"/* || exit 1 In .ci/check_python_dists.sh line 23: check-wheel-contents ${DIST_DIR}/*.whl || exit 1 ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: check-wheel-contents "${DIST_DIR}"/*.whl || exit 1 In .ci/check_python_dists.sh line 27: if [ $PY_MINOR_VER -gt 7 ]; then ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: if [ "$PY_MINOR_VER" -gt 7 ]; then In .ci/check_python_dists.sh line 37: ${DIST_DIR}/* || exit 1 ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${DIST_DIR}"/* || exit 1 In .ci/check_python_dists.sh line 38: elif { test $(uname -m) = "aarch64"; }; then ^---------^ SC2046 (warning): Quote this to prevent word splitting. In .ci/check_python_dists.sh line 45: ${DIST_DIR}/* || exit 1 ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${DIST_DIR}"/* || exit 1 In .ci/check_python_dists.sh line 52: ${DIST_DIR}/* || exit 1 ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${DIST_DIR}"/* || exit 1 In .ci/install-clang-devel.sh line 35: clang-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: clang-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 36: clangd-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: clangd-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 37: clang-format-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: clang-format-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 38: clang-tidy-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: clang-tidy-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 39: clang-tools-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: clang-tools-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 40: lldb-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: lldb-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 41: lld-${CLANG_VERSION} \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: lld-"${CLANG_VERSION}" \ In .ci/install-clang-devel.sh line 42: llvm-${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: llvm-"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 43: llvm-${CLANG_VERSION}-tools \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: llvm-"${CLANG_VERSION}"-tools \ In .ci/install-clang-devel.sh line 44: libomp-${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libomp-"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 45: libc++-${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libc++-"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 46: libc++abi-${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libc++abi-"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 47: libclang-common-${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libclang-common-"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 48: libclang-${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libclang-"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 49: libclang-cpp${CLANG_VERSION}-dev \ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libclang-cpp"${CLANG_VERSION}"-dev \ In .ci/install-clang-devel.sh line 50: libunwind-${CLANG_VERSION}-dev ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: libunwind-"${CLANG_VERSION}"-dev In .ci/install-clang-devel.sh line 54: cp --remove-destination /usr/lib/llvm-${CLANG_VERSION}/bin/* /usr/bin/ ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp --remove-destination /usr/lib/llvm-"${CLANG_VERSION}"/bin/* /usr/bin/ In .ci/lint-cpp.sh line 20: ${cmake_files} \ ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${cmake_files}" \ In .ci/rerun_workflow.sh line 38: runs=$(echo $runs | jq --arg pr_number "$pr_number" --arg pr_branch "$pr_branch" 'map(select(.event == "pull_request" and ((.pull_requests | length) != 0 and (.pull_requests[0].number | tostring) == $pr_number or .head_branch == $pr_branch)))') ^---^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: runs=$(echo "$runs" | jq --arg pr_number "$pr_number" --arg pr_branch "$pr_branch" 'map(select(.event == "pull_request" and ((.pull_requests | length) != 0 and (.pull_requests[0].number | tostring) == $pr_number or .head_branch == $pr_branch)))') In .ci/rerun_workflow.sh line 39: runs=$(echo $runs | jq 'sort_by(.run_number) | reverse') ^---^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: runs=$(echo "$runs" | jq 'sort_by(.run_number) | reverse') In .ci/rerun_workflow.sh line 41: if [[ $(echo $runs | jq 'length') -gt 0 ]]; then ^---^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: if [[ $(echo "$runs" | jq 'length') -gt 0 ]]; then In .ci/rerun_workflow.sh line 46: "${GITHUB_API_URL}/repos/microsoft/LightGBM/actions/runs/$(echo $runs | jq '.[0].id')/rerun" ^---^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${GITHUB_API_URL}/repos/microsoft/LightGBM/actions/runs/$(echo "$runs" | jq '.[0].id')/rerun" In .ci/set_commit_status.sh line 42: --arg state $status \ ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: --arg state "$status" \ In .ci/setup.sh line 143: https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-${ARCH}.sh ^------^ SC2046 (warning): Quote this to prevent word splitting. ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-"${ARCH}".sh In .ci/setup.sh line 144: sh miniforge.sh -b -p $CONDA ^----^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: sh miniforge.sh -b -p "$CONDA" In .ci/test.sh line 59: cmake -B build -S . -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON $extra_cmake_opts ^---------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cmake -B build -S . -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON "$extra_cmake_opts" In .ci/test.sh line 66: CONDA_PYTHON_REQUIREMENT="python=$PYTHON_VERSION[build=*cpython]" ^-- SC1087 (error): Use braces when expanding arrays, e.g. ${array[idx]} (or ${var}[.. to quiet). In .ci/test.sh line 69: mamba create -q -y -n $CONDA_ENV ${CONDA_PYTHON_REQUIREMENT} numpy ^-------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: mamba create -q -y -n $CONDA_ENV "${CONDA_PYTHON_REQUIREMENT}" numpy In .ci/test.sh line 70: source activate $CONDA_ENV ^------^ SC1091 (info): Not following: activate was not specified as input (see shellcheck -x). In .ci/test.sh line 92: cp ./build/lightgbmlib.jar $BUILD_ARTIFACTSTAGINGDIRECTORY/lightgbmlib_$OS_NAME.jar ^-----------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp ./build/lightgbmlib.jar "$BUILD_ARTIFACTSTAGINGDIRECTORY"/lightgbmlib_"$OS_NAME".jar In .ci/test.sh line 99: ${CONDA_PYTHON_REQUIREMENT} \ ^-------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${CONDA_PYTHON_REQUIREMENT}" \ In .ci/test.sh line 107: source activate $CONDA_ENV ^------^ SC1091 (info): Not following: activate was not specified as input (see shellcheck -x). In .ci/test.sh line 128: source activate $CONDA_ENV ^------^ SC1091 (info): Not following: activate was not specified as input (see shellcheck -x). In .ci/test.sh line 131: rstcheck --report-level warning $(find . -type f -name "*.rst") || exit 1 ^-----------------------------^ SC2046 (warning): Quote this to prevent word splitting. In .ci/test.sh line 133: rstcheck --report-level warning --ignore-directives=autoclass,autofunction,autosummary,doxygenfile $(find . -type f -name "*.rst") || exit 1 ^-----------------------------^ SC2046 (warning): Quote this to prevent word splitting. In .ci/test.sh line 163: ${CONDA_REQUIREMENT_FILES} \ ^------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${CONDA_REQUIREMENT_FILES}" \ In .ci/test.sh line 164: ${CONDA_PYTHON_REQUIREMENT} \ ^-------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${CONDA_PYTHON_REQUIREMENT}" \ In .ci/test.sh line 167: source activate $CONDA_ENV ^------^ SC1091 (info): Not following: activate was not specified as input (see shellcheck -x). In .ci/test.sh line 173: for LIBOMP_ALIAS in libgomp.dylib libiomp5.dylib libomp.dylib; do sudo ln -sf "$(brew --cellar libomp)"/*/lib/libomp.dylib $CONDA_PREFIX/lib/$LIBOMP_ALIAS || exit 1; done ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: for LIBOMP_ALIAS in libgomp.dylib libiomp5.dylib libomp.dylib; do sudo ln -sf "$(brew --cellar libomp)"/*/lib/libomp.dylib "$CONDA_PREFIX"/lib/$LIBOMP_ALIAS || exit 1; done In .ci/test.sh line 179: pip install ./dist/lightgbm-$LGB_VER.tar.gz -v || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: pip install ./dist/lightgbm-"$LGB_VER".tar.gz -v || exit 1 In .ci/test.sh line 181: cp ./dist/lightgbm-$LGB_VER.tar.gz $BUILD_ARTIFACTSTAGINGDIRECTORY || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^-----------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp ./dist/lightgbm-"$LGB_VER".tar.gz "$BUILD_ARTIFACTSTAGINGDIRECTORY" || exit 1 In .ci/test.sh line 190: cp dist/lightgbm-$LGB_VER-py3-none-macosx*.whl $BUILD_ARTIFACTSTAGINGDIRECTORY || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^-----------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp dist/lightgbm-"$LGB_VER"-py3-none-macosx*.whl "$BUILD_ARTIFACTSTAGINGDIRECTORY" || exit 1 In .ci/test.sh line 204: ./dist/lightgbm-$LGB_VER-py3-none-$PLATFORM.whl || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^-------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: ./dist/lightgbm-"$LGB_VER"-py3-none-"$PLATFORM".whl || exit 1 In .ci/test.sh line 207: cp dist/lightgbm-$LGB_VER-py3-none-$PLATFORM.whl $BUILD_ARTIFACTSTAGINGDIRECTORY || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^-------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^-----------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp dist/lightgbm-"$LGB_VER"-py3-none-"$PLATFORM".whl "$BUILD_ARTIFACTSTAGINGDIRECTORY" || exit 1 In .ci/test.sh line 226: ./dist/lightgbm-$LGB_VER.tar.gz \ ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: ./dist/lightgbm-"$LGB_VER".tar.gz \ In .ci/test.sh line 233: pip install ./dist/lightgbm-$LGB_VER*.whl -v || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: pip install ./dist/lightgbm-"$LGB_VER"*.whl -v || exit 1 In .ci/test.sh line 251: ./dist/lightgbm-$LGB_VER.tar.gz \ ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: ./dist/lightgbm-"$LGB_VER".tar.gz \ In .ci/test.sh line 258: pip install ./dist/lightgbm-$LGB_VER*.whl -v || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: pip install ./dist/lightgbm-"$LGB_VER"*.whl -v || exit 1 In .ci/test.sh line 271: ./dist/lightgbm-$LGB_VER.tar.gz \ ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: ./dist/lightgbm-"$LGB_VER".tar.gz \ In .ci/test.sh line 278: pip install ./dist/lightgbm-$LGB_VER*.whl -v || exit 1 ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: pip install ./dist/lightgbm-"$LGB_VER"*.whl -v || exit 1 In .ci/test.sh line 296: cp ./lib_lightgbm.dylib $BUILD_ARTIFACTSTAGINGDIRECTORY/lib_lightgbm.dylib ^-----------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp ./lib_lightgbm.dylib "$BUILD_ARTIFACTSTAGINGDIRECTORY"/lib_lightgbm.dylib In .ci/test.sh line 302: cp ./lib_lightgbm.so $BUILD_ARTIFACTSTAGINGDIRECTORY/lib_lightgbm.so ^-----------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp ./lib_lightgbm.so "$BUILD_ARTIFACTSTAGINGDIRECTORY"/lib_lightgbm.so In .ci/test.sh line 316: for f in *.py **/*.py; do python $f || exit 1; done # run all examples ^-- SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: for f in *.py **/*.py; do python "$f" || exit 1; done # run all examples In .ci/test.sh line 319: jupyter nbconvert --ExecutePreprocessor.timeout=180 --to notebook --execute --inplace *.ipynb || exit 1 # run all notebooks ^-- SC2035 (info): Use ./*glob* or -- *glob* so names with dashes won't become options. In .ci/test_r_package.sh line 23: R_MAJOR_VERSION=( ${R_VERSION//./ } ) ^---------------^ SC2206 (warning): Quote to prevent word splitting/globbing, or split robustly with mapfile or read -a. In .ci/test_r_package.sh line 24: if [[ "${R_MAJOR_VERSION}" == "3" ]]; then ^----------------^ SC2128 (warning): Expanding an array without an index only gives the first element. In .ci/test_r_package.sh line 29: elif [[ "${R_MAJOR_VERSION}" == "4" ]]; then ^----------------^ SC2128 (warning): Expanding an array without an index only gives the first element. In .ci/test_r_package.sh line 73: autoconf=$(cat R-package/AUTOCONF_UBUNTU_VERSION) \ ^-- SC2046 (warning): Quote this to prevent word splitting. In .ci/test_r_package.sh line 79: https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-${ARCH}.sh \ ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-"${ARCH}".sh \ In .ci/test_r_package.sh line 83: sudo sh cmake-3.25.1-linux-${ARCH}.sh --skip-license --prefix=/opt/cmake || exit 1 ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: sudo sh cmake-3.25.1-linux-"${ARCH}".sh --skip-license --prefix=/opt/cmake || exit 1 In .ci/test_r_package.sh line 103: curl -sL ${R_MAC_PKG_URL} -o R.pkg || exit 1 ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: curl -sL "${R_MAC_PKG_URL}" -o R.pkg || exit 1 In .ci/test_r_package.sh line 105: -pkg $(pwd)/R.pkg \ ^----^ SC2046 (warning): Quote this to prevent word splitting. In .ci/test_r_package.sh line 111: if [[ "${R_MAJOR_VERSION}" == "3" ]]; then ^----------------^ SC2128 (warning): Expanding an array without an index only gives the first element. In .ci/test_r_package.sh line 170: cp ${PKG_TARBALL} packages ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp "${PKG_TARBALL}" packages In .ci/test_r_package.sh line 173: -v $(pwd)/packages:/rchk/packages \ ^----^ SC2046 (warning): Quote this to prevent word splitting. In .ci/test_r_package.sh line 176: 2>&1 > ${RCHK_LOG_FILE} \ ^--^ SC2069 (warning): To redirect stdout+stderr, 2>&1 must be last (or use '{ cmd > file; } 2>&1' to clarify). In .ci/test_r_package.sh line 182: exit $( ^-- SC2046 (warning): Quote this to prevent word splitting. In .ci/test_r_package.sh line 195: mkdir -p ${R_CMD_CHECK_DIR} ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: mkdir -p "${R_CMD_CHECK_DIR}" In .ci/test_r_package.sh line 196: mv ${PKG_TARBALL} ${R_CMD_CHECK_DIR} ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting. ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: mv "${PKG_TARBALL}" "${R_CMD_CHECK_DIR}" In .ci/test_r_package.sh line 197: cd ${R_CMD_CHECK_DIR} ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cd "${R_CMD_CHECK_DIR}" In .ci/test_r_package.sh line 204: R CMD check ${PKG_TARBALL} \ ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: R CMD check "${PKG_TARBALL}" \ In .ci/test_r_package.sh line 207: || check_succeeded="no" ^-------------^ SC2030 (info): Modification of check_succeeded is local (to subshell caused by (..) group). In .ci/test_r_package.sh line 224: if [[ $check_succeeded == "no" ]]; then ^--------------^ SC2031 (info): check_succeeded was modified in a subshell. That change might be lost. In .ci/test_r_package.sh line 241: passed_correct_r_version_to_cmake=$( ^-- SC2034 (warning): passed_correct_r_version_to_cmake appears unused. Verify use (or export if used externally). In .ci/trigger_dispatch_run.sh line 40: --arg pr_number "$(echo $pr | jq '.number')" \ ^-^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: --arg pr_number "$(echo "$pr" | jq '.number')" \ In .ci/trigger_dispatch_run.sh line 41: --arg pr_sha "$(echo $pr | jq '.head.sha')" \ ^-^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: --arg pr_sha "$(echo "$pr" | jq '.head.sha')" \ In .ci/trigger_dispatch_run.sh line 42: --arg pr_branch "$(echo $pr | jq '.head.ref')" \ ^-^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: --arg pr_branch "$(echo "$pr" | jq '.head.ref')" \ In R-package/recreate-configure.sh line 11: LGB_VERSION=$(cat VERSION.txt | sed "s/rc/-/g") ^---------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead. In R-package/recreate-configure.sh line 23: autoconf=${AUTOCONF_VERSION} ^-----------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: autoconf="${AUTOCONF_VERSION}" In build-cran-package.sh line 30: set -e -E -u ^-- SC3041 (warning): In POSIX sh, set flag -E is undefined. In build-cran-package.sh line 66: LGB_VERSION=$(cat VERSION.txt | sed "s/rc/-/g") ^---------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead. In build-cran-package.sh line 94: cp external_libs/eigen/Eigen/${eigen_module} "${EIGEN_R_DIR}/${eigen_module}" ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp external_libs/eigen/Eigen/"${eigen_module}" "${EIGEN_R_DIR}/${eigen_module}" In build-cran-package.sh line 95: if [ ${eigen_module} != "Dense" ]; then ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: if [ "${eigen_module}" != "Dense" ]; then In build-cran-package.sh line 97: cp -R external_libs/eigen/Eigen/src/${eigen_module}/* "${EIGEN_R_DIR}/src/${eigen_module}/" ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: cp -R external_libs/eigen/Eigen/src/"${eigen_module}"/* "${EIGEN_R_DIR}/src/${eigen_module}/" In build-cran-package.sh line 133: Rscript -e 'cat(.Platform$OS.type == "windows" && R.version[["major"]] < 4)' ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that. In build-cran-package.sh line 145: for file in $(find . -name '*.h' -o -name '*.hpp' -o -name '*.cpp'); do ^-- SC2044 (warning): For loops over find output are fragile. Use find -exec or a while read loop. In build-cran-package.sh line 156: find . -name '*.h.bak' -o -name '*.hpp.bak' -o -name '*.cpp.bak' -exec rm {} \; ^---^ SC2146 (warning): This action ignores everything before the -o. Use \( \) to group. In build-cran-package.sh line 167: rm *.bak ^-- SC2035 (info): Use ./*glob* or -- *glob* so names with dashes won't become options. In build-python.sh line 65: set -e -E -u ^-- SC3041 (warning): In POSIX sh, set flag -E is undefined. In build-python.sh line 96: if [[ "$1" != *=* ]]; ^---------------^ SC3010 (warning): In POSIX sh, [[ ]] is undefined. In build-python.sh line 103: if [[ "$1" != *=* ]]; ^---------------^ SC3010 (warning): In POSIX sh, [[ ]] is undefined. In build-python.sh line 110: if [[ "$1" != *=* ]]; ^---------------^ SC3010 (warning): In POSIX sh, [[ ]] is undefined. In build-python.sh line 117: if [[ "$1" != *=* ]]; ^---------------^ SC3010 (warning): In POSIX sh, [[ ]] is undefined. In build-python.sh line 124: if [[ "$1" != *=* ]]; ^---------------^ SC3010 (warning): In POSIX sh, [[ ]] is undefined. In build-python.sh line 131: if [[ "$1" != *=* ]]; ^---------------^ SC3010 (warning): In POSIX sh, [[ ]] is undefined. In build-python.sh line 262: external_libs/eigen/Eigen/${eigen_module} \ ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: external_libs/eigen/Eigen/"${eigen_module}" \ In build-python.sh line 263: ./lightgbm-python/external_libs/eigen/Eigen/${eigen_module} ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: ./lightgbm-python/external_libs/eigen/Eigen/"${eigen_module}" In build-python.sh line 264: if [ ${eigen_module} != "Dense" ]; then ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: if [ "${eigen_module}" != "Dense" ]; then In build-python.sh line 265: mkdir -p ./lightgbm-python/external_libs/eigen/Eigen/src/${eigen_module}/ ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: mkdir -p ./lightgbm-python/external_libs/eigen/Eigen/src/"${eigen_module}"/ In build-python.sh line 268: external_libs/eigen/Eigen/src/${eigen_module}/* \ ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: external_libs/eigen/Eigen/src/"${eigen_module}"/* \ In build-python.sh line 269: ./lightgbm-python/external_libs/eigen/Eigen/src/${eigen_module}/ ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: ./lightgbm-python/external_libs/eigen/Eigen/src/"${eigen_module}"/ In build-python.sh line 316: echo '[build-system]' >> ./pyproject.toml ^-- SC2129 (style): Consider using { cmd1; cmd2; } >> file instead of individual redirects. In build-python.sh line 350: ${BUILD_ARGS} \ ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${BUILD_ARGS}" \ In build-python.sh line 360: ${BUILD_ARGS} \ ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${BUILD_ARGS}" \ In build-python.sh line 372: ${PIP_INSTALL_ARGS} \ ^-----------------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: "${PIP_INSTALL_ARGS}" \ In docs/build-docs.sh line 11: -o ${HOME}/miniforge.sh \ ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: -o "${HOME}"/miniforge.sh \ In docs/build-docs.sh line 14: /bin/bash ${HOME}/miniforge.sh -b -p ${CONDA} ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting. ^------^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: /bin/bash "${HOME}"/miniforge.sh -b -p "${CONDA}" In docs/build-docs.sh line 23: source activate docs-env ^------^ SC1091 (info): Not following: activate was not specified as input (see shellcheck -x). For more information: https://www.shellcheck.net/wiki/SC1087 -- Use braces when expanding arrays,... https://www.shellcheck.net/wiki/SC2034 -- passed_correct_r_version_to_cmake... https://www.shellcheck.net/wiki/SC2044 -- For loops over find output are fr.. ```

References