| #!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| set +x
|
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| source "${SCRIPT_DIR}/builds_common.sh"
|
| cd "$SCRIPT_DIR/../../../.."
|
| MODEL_ROOT="$(pwd)"
|
|
|
| export PYTHONPATH="$PYTHONPATH:${MODEL_ROOT}"
|
|
|
|
|
| do_pylint() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ERROR_ALLOWLIST=""
|
|
|
| echo "ERROR_ALLOWLIST=\"${ERROR_ALLOWLIST}\""
|
|
|
| PYLINT_BIN="python3 -m pylint"
|
|
|
| PYTHON_SRC_FILES=$(get_py_files_to_check $1)
|
| if [[ -z ${PYTHON_SRC_FILES} ]]; then
|
| echo "do_pylint found no Python files to check. Returning."
|
| return 0
|
| fi
|
|
|
| PYLINTRC_FILE="official/utils/testing/pylint.rcfile"
|
|
|
| if [[ ! -f "${PYLINTRC_FILE}" ]]; then
|
| die "ERROR: Cannot find pylint rc file at ${PYLINTRC_FILE}"
|
| fi
|
|
|
| NUM_SRC_FILES=$(echo ${PYTHON_SRC_FILES} | wc -w)
|
| NUM_CPUS=$(num_cpus)
|
|
|
| echo "Running pylint on ${NUM_SRC_FILES} files with ${NUM_CPUS} "\
|
| "parallel jobs..."
|
| echo ""
|
|
|
| PYLINT_START_TIME=$(date +'%s')
|
| OUTPUT_FILE="$(mktemp)_pylint_output.log"
|
| ERRORS_FILE="$(mktemp)_pylint_errors.log"
|
| NONWL_ERRORS_FILE="$(mktemp)_pylint_nonwl_errors.log"
|
|
|
| rm -rf ${OUTPUT_FILE}
|
| rm -rf ${ERRORS_FILE}
|
| rm -rf ${NONWL_ERRORS_FILE}
|
| touch ${NONWL_ERRORS_FILE}
|
|
|
| ${PYLINT_BIN} --rcfile="${PYLINTRC_FILE}" --output-format=parseable \
|
| --jobs=${NUM_CPUS} ${PYTHON_SRC_FILES} > ${OUTPUT_FILE} 2>&1
|
| PYLINT_END_TIME=$(date +'%s')
|
|
|
| echo ""
|
| echo "pylint took $((PYLINT_END_TIME - PYLINT_START_TIME)) s"
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| grep -E '(\[E|\[W0311|\[W0312|\[C0330|\[C0301|\[C0326|\[W0611|\[W0622)' ${OUTPUT_FILE} > ${ERRORS_FILE}
|
|
|
| N_ERRORS=0
|
| while read -r LINE; do
|
| IS_ALLOWLISTED=0
|
| for WL_REGEX in ${ERROR_ALLOWLIST}; do
|
| if echo ${LINE} | grep -q "${WL_REGEX}"; then
|
| echo "Found a ALLOWLISTed error:"
|
| echo " ${LINE}"
|
| IS_ALLOWLISTED=1
|
| fi
|
| done
|
|
|
| if [[ ${IS_ALLOWLISTED} == "0" ]]; then
|
| echo "${LINE}" >> ${NONWL_ERRORS_FILE}
|
| echo "" >> ${NONWL_ERRORS_FILE}
|
| ((N_ERRORS++))
|
| fi
|
| done <${ERRORS_FILE}
|
|
|
| echo "Raw lint output file: ${OUTPUT_FILE}"
|
|
|
| echo ""
|
| if [[ ${N_ERRORS} != 0 ]]; then
|
| echo "FAIL: Found ${N_ERRORS} non-whitelited pylint errors:"
|
| cat "${NONWL_ERRORS_FILE}"
|
| return 1
|
| else
|
| echo "PASS: No non-ALLOWLISTed pylint errors were found."
|
| return 0
|
| fi
|
| }
|
|
|
| test_result=0
|
|
|
| TESTS="$@"
|
|
|
| for t in "${TESTS}"; do
|
| ${t} || test_result=$?
|
| done
|
|
|
| exit "${test_result}"
|
|
|