diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cd81d6e23ee..3d346ce1b49 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -334,6 +334,7 @@ repos: ?^ci/scripts/python_sdist_test\.sh$| ?^ci/scripts/python_wheel_unix_test\.sh$| ?^ci/scripts/python_test_type_annotations\.sh$| + ?^ci/scripts/python_test\.sh$| ?^ci/scripts/r_build\.sh$| ?^ci/scripts/r_revdepcheck\.sh$| ?^ci/scripts/release_test\.sh$| diff --git a/ci/scripts/python_test.sh b/ci/scripts/python_test.sh index 962501d7b5e..43b871be6a4 100755 --- a/ci/scripts/python_test.sh +++ b/ci/scripts/python_test.sh @@ -19,19 +19,19 @@ set -ex -arrow_dir=${1} -test_dir=${1}/python/build/dist +arrow_dir="${1}" if [ -n "${ARROW_PYTHON_VENV:-}" ]; then + # shellcheck source=/dev/null . "${ARROW_PYTHON_VENV}/bin/activate" fi -export ARROW_SOURCE_DIR=${arrow_dir} -export ARROW_TEST_DATA=${arrow_dir}/testing/data -export PARQUET_TEST_DATA=${arrow_dir}/cpp/submodules/parquet-testing/data -export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH} -export DYLD_LIBRARY_PATH=${ARROW_HOME}/lib:${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} -export ARROW_GDB_SCRIPT=${arrow_dir}/cpp/gdb_arrow.py +export ARROW_SOURCE_DIR="${arrow_dir}" +export ARROW_TEST_DATA="${arrow_dir}/testing/data" +export PARQUET_TEST_DATA="${arrow_dir}/cpp/submodules/parquet-testing/data" +export LD_LIBRARY_PATH="${ARROW_HOME}/lib:${LD_LIBRARY_PATH}" +export DYLD_LIBRARY_PATH="${ARROW_HOME}/lib:${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}" +export ARROW_GDB_SCRIPT="${arrow_dir}/cpp/gdb_arrow.py" # Enable some checks inside Python itself export PYTHONDEVMODE=1 @@ -42,18 +42,18 @@ if [ -z "${ARROW_DEBUG_MEMORY_POOL}" ]; then fi # By default, force-test all optional components -: ${PYARROW_TEST_ACERO:=${ARROW_ACERO:-ON}} -: ${PYARROW_TEST_AZURE:=${ARROW_AZURE:-ON}} -: ${PYARROW_TEST_CUDA:=${ARROW_CUDA:-ON}} -: ${PYARROW_TEST_DATASET:=${ARROW_DATASET:-ON}} -: ${PYARROW_TEST_FLIGHT:=${ARROW_FLIGHT:-ON}} -: ${PYARROW_TEST_GANDIVA:=${ARROW_GANDIVA:-ON}} -: ${PYARROW_TEST_GCS:=${ARROW_GCS:-ON}} -: ${PYARROW_TEST_HDFS:=${ARROW_HDFS:-ON}} -: ${PYARROW_TEST_ORC:=${ARROW_ORC:-ON}} -: ${PYARROW_TEST_PARQUET:=${ARROW_PARQUET:-ON}} -: ${PYARROW_TEST_PARQUET_ENCRYPTION:=${PARQUET_REQUIRE_ENCRYPTION:-ON}} -: ${PYARROW_TEST_S3:=${ARROW_S3:-ON}} +: "${PYARROW_TEST_ACERO:=${ARROW_ACERO:-ON}}" +: "${PYARROW_TEST_AZURE:=${ARROW_AZURE:-ON}}" +: "${PYARROW_TEST_CUDA:=${ARROW_CUDA:-ON}}" +: "${PYARROW_TEST_DATASET:=${ARROW_DATASET:-ON}}" +: "${PYARROW_TEST_FLIGHT:=${ARROW_FLIGHT:-ON}}" +: "${PYARROW_TEST_GANDIVA:=${ARROW_GANDIVA:-ON}}" +: "${PYARROW_TEST_GCS:=${ARROW_GCS:-ON}}" +: "${PYARROW_TEST_HDFS:=${ARROW_HDFS:-ON}}" +: "${PYARROW_TEST_ORC:=${ARROW_ORC:-ON}}" +: "${PYARROW_TEST_PARQUET:=${ARROW_PARQUET:-ON}}" +: "${PYARROW_TEST_PARQUET_ENCRYPTION:=${PARQUET_REQUIRE_ENCRYPTION:-ON}}" +: "${PYARROW_TEST_S3:=${ARROW_S3:-ON}}" export PYARROW_TEST_ACERO export PYARROW_TEST_AZURE @@ -68,10 +68,17 @@ export PYARROW_TEST_PARQUET export PYARROW_TEST_PARQUET_ENCRYPTION export PYARROW_TEST_S3 +# Convert the space-separated options into a Bash array. +# This avoids ShellCheck SC2086 and preserves argument boundaries. +read -r -a PYTEST_ARGS_ARRAY <<< "$PYTEST_ARGS" + # Testing PyArrow -pytest -r s ${PYTEST_ARGS} --pyargs pyarrow +pytest -r s "${PYTEST_ARGS_ARRAY[@]}" --pyargs pyarrow # Testing RST documentation examples (if PYTEST_RST_ARGS is set) if [ -n "${PYTEST_RST_ARGS}" ]; then - pytest ${PYTEST_RST_ARGS} ${arrow_dir}/docs/source/python + # Convert the space-separated options into a Bash array. + # This avoids ShellCheck SC2086 and preserves argument boundaries. + read -r -a PYTEST_RST_ARGS_ARRAY <<< "$PYTEST_RST_ARGS" + pytest "${PYTEST_RST_ARGS_ARRAY[@]}" "${arrow_dir}/docs/source/python" fi