#!/bin/bash ################################################################################ ########### EntryPoint for Super-Linter @AdmiralAwkbar ######################### ################################################################################ ########### # GLOBALS # ########### YAML_LINTER_RULES='.automation/yaml-linter-rules.yml' # Path to the yaml lint rules MD_LINTER_RULES='.automation/md-linter-rules.yml' # Path to the markdown lint rules PYTHON_LINTER_FILE=".automation/pylintrc" # Name of the Linter file RUBY_LINTER_FILE=".automation/.rubocop.yml" # Name of the Linter file COFFEE_LINTER_FILE="Automation/coffeelint.json" # name of the Linter file ############ # Counters # ############ ERRORS_FOUND_YML=0 # Count of errors found ERRORS_FOUND_JSON=0 # Count of errors found ERRORS_FOUND_XML=0 # Count of errors found ERRORS_FOUND_MD=0 # Count of errors found 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 ERRORS_FOUND_COFFEE=0 # Count of errors found ################################################################################ ########################## FUNCTIONS BELOW ##################################### ################################################################################ ################################################################################ #### Function Header ########################################################### Header() { echo "" echo "---------------------------------------------" echo "---- Markup and Markdown Language Linter ----" echo "---------------------------------------------" echo "" } ################################################################################ #### Function GetLinterRules ################################################### GetLinterRules() { # Need to validate the rules files exist ##################################### # Validate we have the linter rules # ##################################### if [ ! -f "$YAML_LINTER_RULES" ]; then echo "ERROR! Failed to find:[$YAML_LINTER_RULES] in root of code base!" exit 1 fi ##################################### # Validate we have the linter rules # ##################################### if [ ! -f "$MD_LINTER_RULES" ]; then echo "ERROR! Failed to find:[$MD_LINTER_RULES] in root of code base!" exit 1 fi } ################################################################################ #### Function LintJsonFiles #################################################### LintJsonFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting JSON files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="jsonlint-php" ####################################### # Validate we have yamllint 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 "*.json" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ##################### # Get the file name # ##################### FILE_NAME=$(basename "$FILE" 2>&1) ####################################### # Make sure we dont lint node modules # ####################################### if [[ $FILE == *"node_modules"* ]]; then # This is a node modules file continue fi ############## # 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_JSON++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function LintYmlFiles ##################################################### LintYmlFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting YAML files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="yamllint" ####################################### # Validate we have yamllint 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 "*.yml" -or -name "*.yaml" \) 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ##################### # Get the file name # ##################### FILE_NAME=$(basename "$FILE" 2>&1) ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi ############## # File print # ############## echo "---------------------------" echo "File:[$FILE]" ################################ # Lint the file with the rules # ################################ LINT_CMD=$("$LINTER_NAME" "$YAML_LINTER_RULES" "$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_YML++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function LintXmlFiles ##################################################### LintXmlFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting XML files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="xmllint" ####################################### # Validate we have yamllint 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 "*.xml" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ##################### # Get the file name # ##################### FILE_NAME=$(basename "$FILE" 2>&1) ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi ############## # 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_XML++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### Function LintMdFiles ###################################################### LintMdFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting Markdown files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="markdownlint" ####################################### # Validate we have yamllint 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 "*.md" 2>&1)) ################## # Lint the files # ################## for FILE in "${LIST_FILES[@]}" do ##################### # Get the file name # ##################### FILE_NAME=$(basename "$FILE" 2>&1) ####################################### # Make sure we dont lint node modules # ####################################### # if [[ $FILE == *"node_modules"* ]]; then # # This is a node modules file # continue # fi ############## # File print # ############## echo "---------------------------" echo "File:[$FILE]" ################################ # Lint the file with the rules # ################################ LINT_CMD=$("$LINTER_NAME" -c "$MD_LINTER_RULES" "$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_MD++)) else ########### # Success # ########### echo " - File:[$FILE_NAME] was linted with [$LINTER_NAME] successfully" fi done } ################################################################################ #### 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 LintCoffeeFiles ################################################## LintCoffeeFiles() { ################ # print header # ################ echo "" echo "--------------------------------" echo "Linting Coffee files..." echo "--------------------------------" echo "" ###################### # Name of the linter # ###################### LINTER_NAME="coffeelint" ##################################### # 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 "*.coffee" 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" -f "$COFFEE_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_COFFEE++)) 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 YAML:[$ERRORS_FOUND_YML]" echo "ERRORS FOUND in JSON:[$ERRORS_FOUND_JSON]" echo "ERRORS FOUND in XML:[$ERRORS_FOUND_XML]" echo "ERRORS FOUND IN MD:[$ERRORS_FOUND_MD]" 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_YML -ne 0 ] || [ $ERRORS_FOUND_JSON -ne 0 ] || [ $ERRORS_FOUND_XML -ne 0 ] || [ $ERRORS_FOUND_MD -ne 0 ] || [ $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 ######################## # Get the linter rules # ######################## GetLinterRules ###################### # Lint the Yml Files # ###################### LintYmlFiles ####################### # Lint the json files # ####################### LintJsonFiles ###################### # Lint the XML Files # ###################### LintXmlFiles ########################### # Lint the Markdown Files # ########################### LintMdFiles ####################### # Lint the bash files # ####################### LintBashFiles ######################### # Lint the python files # ######################### LintPythonFiles ####################### # Lint the perl files # ####################### LintPerlFiles ####################### # Lint the ruby files # ####################### LintRubyFiles ######################### # Lint the coffee files # ######################### LintCoffeeFiles ########## # Footer # ########## Footer