#!/bin/bash ################################################################################ ################## Scripting Language Linter @admiralawkbar #################### ################################################################################ ########### # GLOBALS # ########### PYTHON_LINTER_FILE=".automation/pylintrc" # Name of the Linter file RUBY_LINTER_FILE=".automation/.rubocop.yml" # Name of the Linter file ############ # Counters # ############ ERRORS_FOUND_BASH=0 # Count of errors found ERRORS_FOUND_PERL=0 # Count of errors found ERRORS_FOUND_RUBY=0 # Count of errors found ERRORS_FOUND_PYTHON=0 # Count of errors found ################################################################################ ########################## FUNCTIONS BELOW ##################################### ################################################################################ ################################################################################ #### Function Header ########################################################### Header() { echo "" echo "-----------------------------------" echo "---- Scripting Language Linter ----" echo "-----------------------------------" echo "" } ################################################################################ #### Function LintBashFiles #################################################### LintBashFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting Bash files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="shellcheck" ######################################### # Validate we have shellcheck installed # ######################################### # shellcheck disable=SC2230 VALIDATE_INSTALL_CMD=$(which "$LINTER_NAME" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then # Failed echo "ERROR! Failed to find $LINTER_NAME in system!" echo "ERROR:[$VALIDATE_INSTALL_CMD]" exit 1 else # Success echo "Successfully found binary in system" echo "Location:[$VALIDATE_INSTALL_CMD]" fi ################################# # Get list of all files to lint # ################################# # shellcheck disable=SC2207 LIST_FILES=($(find . -type f -name "*.sh" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi #################### # Get the filename # #################### FILE_NAME=$(basename "$FILE" 2>&1) ############## # File print # ############## echo "---------------------------" echo "File:[$FILE]" ################################ # Lint the file with the rules # ################################ LINT_CMD=$("$LINTER_NAME" "$FILE" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then ######### # Error # ######### echo "ERROR! Found errors in [$LINTER_NAME] linter!" echo "ERROR:[$LINT_CMD]" # Increment error count ((ERRORS_FOUND_BASH++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function LintPythonFiles ################################################## LintPythonFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting Python files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="pylint" ##################################### # Validate we have pylint installed # ##################################### # shellcheck disable=SC2230 VALIDATE_INSTALL_CMD=$(which "$LINTER_NAME" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then # Failed echo "ERROR! Failed to find $LINTER_NAME in system!" echo "ERROR:[$VALIDATE_INSTALL_CMD]" exit 1 else # Success echo "Successfully found binary in system" echo "Location:[$VALIDATE_INSTALL_CMD]" fi ################################# # Get list of all files to lint # ################################# # shellcheck disable=SC2207 LIST_FILES=($(find . -type f -name "*.py" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi #################### # Get the filename # #################### FILE_NAME=$(basename "$FILE" 2>&1) ############## # File print # ############## echo "---------------------------" echo "File:[$FILE]" ################################ # Lint the file with the rules # ################################ LINT_CMD=$("$LINTER_NAME" --rcfile "$PYTHON_LINTER_FILE" -E "$FILE" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then ######### # Error # ######### echo "ERROR! Found errors in [$LINTER_NAME] linter!" echo "ERROR:[$LINT_CMD]" # Increment error count ((ERRORS_FOUND_PYTHON++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function LintPerlFiles #################################################### LintPerlFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting Perl files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="perl" ################################### # Validate we have perl installed # ################################### # shellcheck disable=SC2230 VALIDATE_INSTALL_CMD=$(which "$LINTER_NAME" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then # Failed echo "ERROR! Failed to find $LINTER_NAME in system!" echo "ERROR:[$VALIDATE_INSTALL_CMD]" exit 1 else # Success echo "Successfully found binary in system" echo "Location:[$VALIDATE_INSTALL_CMD]" fi ################################# # Get list of all files to lint # ################################# # shellcheck disable=SC2207 LIST_FILES=($(find . -type f -name "*.pl" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi #################### # Get the filename # #################### FILE_NAME=$(basename "$FILE" 2>&1) ############## # File print # ############## echo "---------------------------" echo "File:[$FILE]" ################################ # Lint the file with the rules # ################################ LINT_CMD=$("$LINTER_NAME" -Mstrict -cw "$FILE" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then ######### # Error # ######### echo "ERROR! Found errors in [$LINTER_NAME] linter!" echo "ERROR:[$LINT_CMD]" # Increment error count ((ERRORS_FOUND_PERL++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function LintRubyFiles #################################################### LintRubyFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting Ruby files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="rubocop" ################################### # Validate we have perl installed # ################################### # shellcheck disable=SC2230 VALIDATE_INSTALL_CMD=$(which "$LINTER_NAME" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then # Failed echo "ERROR! Failed to find $LINTER_NAME in system!" echo "ERROR:[$VALIDATE_INSTALL_CMD]" exit 1 else # Success echo "Successfully found binary in system" echo "Location:[$VALIDATE_INSTALL_CMD]" fi ################################# # Get list of all files to lint # ################################# # shellcheck disable=SC2207 LIST_FILES=($(find . -type f -name "*.rb" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi #################### # Get the filename # #################### FILE_NAME=$(basename "$FILE" 2>&1) ############## # File print # ############## echo "---------------------------" echo "File:[$FILE]" ################################ # Lint the file with the rules # ################################ LINT_CMD=$("$LINTER_NAME" -c "$RUBY_LINTER_FILE" "$FILE" 2>&1) ####################### # Load the error code # ####################### ERROR_CODE=$? ############################## # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then ######### # Error # ######### echo "ERROR! Found errors in [$LINTER_NAME] linter!" echo "ERROR:[$LINT_CMD]" # Increment error count ((ERRORS_FOUND_RUBY++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function Footer ########################################################### Footer() { echo "" echo "---------------------------" echo "The script has completed" echo "---------------------------" echo "ERRORS FOUND in BASH:[$ERRORS_FOUND_BASH]" echo "ERRORS FOUND in PERL:[$ERRORS_FOUND_PERL]" echo "ERRORS FOUND in PYTHON:[$ERRORS_FOUND_PYTHON]" echo "ERRORS FOUND in RUBY:[$ERRORS_FOUND_RUBY]" echo "" ############################### # Exit with 1 if errors found # ############################### if [ $ERRORS_FOUND_BASH -ne 0 ] || [ $ERRORS_FOUND_PERL -ne 0 ] || [ $ERRORS_FOUND_PYTHON -ne 0 ] || [ $ERRORS_FOUND_RUBY -ne 0 ]; then # Failed exit echo "Exiting with errors found!" exit 1 else # Successful exit exit 0 fi } ################################################################################ ############################### MAIN ########################################### ################################################################################ ########## # Header # ########## Header ####################### # Lint the bash files # ####################### LintBashFiles ######################### # Lint the python files # ######################### LintPythonFiles ####################### # Lint the perl files # ####################### LintPerlFiles ####################### # Lint the ruby files # ####################### LintRubyFiles ########## # Footer # ########## Footer