|
#!/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_WHITELIST="" |
|
|
|
echo "ERROR_WHITELIST=\"${ERROR_WHITELIST}\"" |
|
|
|
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_WHITELISTED=0 |
|
for WL_REGEX in ${ERROR_WHITELIST}; do |
|
if echo ${LINE} | grep -q "${WL_REGEX}"; then |
|
echo "Found a whitelisted error:" |
|
echo " ${LINE}" |
|
IS_WHITELISTED=1 |
|
fi |
|
done |
|
|
|
if [[ ${IS_WHITELISTED} == "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-whitelisted pylint errors were found." |
|
return 0 |
|
fi |
|
} |
|
|
|
test_result=0 |
|
|
|
TESTS="$@" |
|
|
|
for t in "${TESTS}"; do |
|
${t} || test_result=$? |
|
done |
|
|
|
exit "${test_result}" |
|
|