diff --git a/Dockerfile b/Dockerfile index fd5a3614..507d9544 100644 --- a/Dockerfile +++ b/Dockerfile @@ -58,7 +58,18 @@ RUN wget -qO- "https://storage.googleapis.com/shellcheck/shellcheck-stable.linux ########################################### ENV GITHUB_SHA=${GITHUB_SHA} \ GITHUB_EVENT_PATH=${GITHUB_EVENT_PATH} \ - GITHUB_WORKSPACE=${GITHUB_WORKSPACE} + GITHUB_WORKSPACE=${GITHUB_WORKSPACE} \ + VALIDATE_ALL_CODEBASE=${VALIDATE_ALL_CODEBASE} \ + VALIDATE_YAML=${VALIDATE_YAML} \ + VALIDATE_JSON=${VALIDATE_JSON} \ + VALIDATE_XML=${VALIDATE_XML} \ + VALIDATE_MD=${VALIDATE_MD} \ + VALIDATE_BASH=${VALIDATE_BASH} \ + VALIDATE_PERL=${VALIDATE_PERL} \ + VALIDATE_PYTHON=${VALIDATE_PYTHON} \ + VALIDATE_RUBY=${VALIDATE_RUBY} \ + VALIDATE_COFFEE=${VALIDATE_COFFEE} \ + VALIDATE_ANSIBLE=${VALIDATE_ANSIBLE} ############################# # Copy scripts to container # @@ -73,6 +84,6 @@ COPY TEMPLATES /action/lib/.automation ###################### # Set the entrypoint # ###################### -ENTRYPOINT ["/action/lib/entrypoint.sh"] +ENTRYPOINT ["/action/lib/linter.sh"] #CMD tail -f /dev/null diff --git a/README.md b/README.md index b96a467e..557ee15a 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,47 @@ jobs: ################################ - name: Lint Code Base uses: docker://admiralawkbar/super-linter:latest + env: + VALIDATE_ALL_CODEBASE: false + VALIDATE_ANSIBLE: false ... ``` +## Env Vars +The super-linter allows you to pass the following `ENV` variables to be able to trigger different functionality: +- **VALIDATE_ALL_CODEBASE** + - Default: `true` + - Will parse the entire repository and find all files to validate across all types + - **NOTE:** When set to `false`, only **new** or **edited** files will be parsed for validation +- **VALIDATE_YAML** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_JSON** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_XML** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_MD** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_BASH** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_PERL** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_PYTHON** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_RUBY** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_COFFEE** + - Default: `true` + - Flag to enable or disable the linting process of the language +- **VALIDATE_ANSIBLE** + - Default: `true` + - Flag to enable or disable the linting process of the language ## Docker Hub diff --git a/lib/entrypoint.sh b/lib/linter.sh similarity index 61% rename from lib/entrypoint.sh rename to lib/linter.sh index abda330f..d144c8dc 100755 --- a/lib/entrypoint.sh +++ b/lib/linter.sh @@ -31,9 +31,39 @@ ANSIBLE_LINTER_RULES="$DEFAULT_RULES_LOCATION/$ANSIBLE_FILE_NAME" # Path to th ################### # GitHub ENV Vars # ################### -GITHUB_SHA="${GITHUB_SHA}" # GitHub sha from the commit -GITHUB_EVENT_PATH="${GITHUB_EVENT_PATH}" # Github Event Path -GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # Github Workspace +GITHUB_SHA="${GITHUB_SHA}" # GitHub sha from the commit +GITHUB_EVENT_PATH="${GITHUB_EVENT_PATH}" # Github Event Path +GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # Github Workspace +VALIDATE_ALL_CODEBASE="${VALIDATE_ALL_CODEBASE}" # Boolean to validate all files +VALIDATE_YAML="${VALIDATE_YAML}" # Boolean to validate language +VALIDATE_JSON="${VALIDATE_JSON}" # Boolean to validate language +VALIDATE_XML="${VALIDATE_XML}" # Boolean to validate language +VALIDATE_MD="${VALIDATE_MD}" # Boolean to validate language +VALIDATE_BASH="${VALIDATE_BASH}" # Boolean to validate language +VALIDATE_PERL="${VALIDATE_PERL}" # Boolean to validate language +VALIDATE_PYTHON="${VALIDATE_PYTHON}" # Boolean to validate language +VALIDATE_RUBY="${VALIDATE_RUBY}" # Boolean to validate language +VALIDATE_COFFEE="${VALIDATE_COFFEE}" # Boolean to validate language +VALIDATE_ANSIBLE="${VALIDATE_ANSIBLE}" # Boolean to validate language + +################ +# Default Vars # +################ +DEFAULT_VALIDATE_ALL_CODEBASE='true' # Default value for validate all files +DEFAULT_VALIDATE_LANGUAGE='true' # Default to validate language + +########################## +# Array of changed files # +########################## +FILE_ARRAY_YML=() # Array of files to check +FILE_ARRAY_JSON=() # Array of files to check +FILE_ARRAY_XML=() # Array of files to check +FILE_ARRAY_MD=() # Array of files to check +FILE_ARRAY_BASH=() # Array of files to check +FILE_ARRAY_PERL=() # Array of files to check +FILE_ARRAY_RUBY=() # Array of files to check +FILE_ARRAY_PYTHON=() # Array of files to check +FILE_ARRAY_COFFEE=() # Array of files to check ############ # Counters # @@ -100,7 +130,7 @@ GetLinterRules() exit 1 fi else - echo "Using Default rules at:[$YAML_LINTER_RULES]" + echo "Codebase does not have file:[.github/linters/$YAML_FILE_NAME], using Default rules at:[$YAML_LINTER_RULES]" fi ##################################### @@ -128,7 +158,7 @@ GetLinterRules() exit 1 fi else - echo "Using Default rules at:[$MD_LINTER_RULES]" + echo "Codebase does not have file:[.github/linters/$MD_FILE_NAME], using Default rules at:[$MD_LINTER_RULES]" fi ##################################### @@ -156,7 +186,7 @@ GetLinterRules() exit 1 fi else - echo "Using Default rules at:[$PYTHON_LINTER_RULES]" + echo "Codebase does not have file:[.github/linters/$PYTHON_FILE_NAME], using Default rules at:[$PYTHON_LINTER_RULES]" fi ##################################### @@ -184,7 +214,7 @@ GetLinterRules() exit 1 fi else - echo "Using Default rules at:[$RUBY_LINTER_RULES]" + echo "Codebase does not have file:[.github/linters/$RUBY_FILE_NAME], using Default rules at:[$RUBY_LINTER_RULES]" fi ##################################### @@ -212,7 +242,7 @@ GetLinterRules() exit 1 fi else - echo "Using Default rules at:[$COFFEE_LINTER_RULES]" + echo "Codebase does not have file:[.github/linters/$COFFEE_FILE_NAME], using Default rules at:[$COFFEE_LINTER_RULES]" fi ##################################### @@ -240,7 +270,7 @@ GetLinterRules() exit 1 fi else - echo "Using Default rules at:[$ANSIBLE_LINTER_RULES]" + echo "Codebase does not have file:[.github/linters/$ANSIBLE_FILE_NAME], using Default rules at:[$ANSIBLE_LINTER_RULES]" fi } ################################################################################ @@ -286,11 +316,27 @@ LintJsonFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.json" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_JSON[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[JSON]" + elif [ ${#FILE_ARRAY_JSON[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_JSON[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.json" 2>&1)) + fi ################## # Lint the files # @@ -388,11 +434,27 @@ LintYmlFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f \( -name "*.yml" -or -name "*.yaml" \) 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_YML[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[YML]" + elif [ ${#FILE_ARRAY_YML[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_YML[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f \( -name "*.yml" -or -name "*.yaml" \) 2>&1)) + fi ################## # Lint the files # @@ -490,11 +552,27 @@ LintXmlFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.xml" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_XML[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[XML]" + elif [ ${#FILE_ARRAY_XML[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_XML[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.xml" 2>&1)) + fi ################## # Lint the files # @@ -592,11 +670,27 @@ LintMdFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.md" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_MD[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[MARKDOWN]" + elif [ ${#FILE_ARRAY_MD[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_MD[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.md" 2>&1)) + fi ################## # Lint the files # @@ -694,11 +788,27 @@ LintBashFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.sh" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_BASH[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[BASH]" + elif [ ${#FILE_ARRAY_BASH[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_BASH[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.sh" 2>&1)) + fi ################## # Lint the files # @@ -797,11 +907,27 @@ LintPythonFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.py" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_PYTHON[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[PYTHON]" + elif [ ${#FILE_ARRAY_PYTHON[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_PYTHON[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.py" 2>&1)) + fi ################## # Lint the files # @@ -900,11 +1026,27 @@ LintPerlFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.pl" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_PERL[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[PERL]" + elif [ ${#FILE_ARRAY_PERL[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_PERL[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.pl" 2>&1)) + fi ################## # Lint the files # @@ -1003,11 +1145,27 @@ LintRubyFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.rb" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_RUBY[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[RUBY]" + elif [ ${#FILE_ARRAY_RUBY[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_RUBY[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.rb" 2>&1)) + fi ################## # Lint the files # @@ -1106,11 +1264,27 @@ LintCoffeeFiles() echo "Location:[$VALIDATE_INSTALL_CMD]" fi - ################################# - # Get list of all files to lint # - ################################# - # shellcheck disable=SC2207 - LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.coffee" 2>&1)) + ########################## + # Initialize empty Array # + ########################## + LIST_FILES=() + + ############################################################ + # Check to see if we need to go through array or all files # + ############################################################ + if [ ${#FILE_ARRAY_COFFEE[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + # No files found in commit and user has asked to not validate code base + echo " - No files found in chageset to lint for language:[COFFEE]" + elif [ ${#FILE_ARRAY_COFFEE[@]} -ne 0 ]; then + # We have files added to array of files to check + LIST_FILES=("${FILE_ARRAY_COFFEE[@]}") # Copy the array into list + else + ################################# + # Get list of all files to lint # + ################################# + # shellcheck disable=SC2207 + LIST_FILES=($(cd "$GITHUB_WORKSPACE" || exit; find . -type f -name "*.coffee" 2>&1)) + fi ################## # Lint the files # @@ -1167,87 +1341,6 @@ LintCoffeeFiles() done } ################################################################################ -#### Function GetGitHubVars #################################################### -GetGitHubVars() -{ - ########## - # Prints # - ########## - echo "--------------------------------------------" - echo "Gathering GitHub information..." - - ############################ - # Validate we have a value # - ############################ - if [ -z "$GITHUB_SHA" ]; then - echo "ERROR! Failed to get [GITHUB_SHA]!" - echo "ERROR:[$GITHUB_SHA]" - exit 1 - else - echo "Successfully found:[GITHUB_SHA]" - fi - - ############################ - # Validate we have a value # - ############################ - if [ -z "$GITHUB_WORKSPACE" ]; then - echo "ERROR! Failed to get [GITHUB_WORKSPACE]!" - echo "ERROR:[$GITHUB_WORKSPACE]" - exit 1 - else - echo "Successfully found:[GITHUB_WORKSPACE]" - fi - - ############################ - # Validate we have a value # - ############################ - if [ -z "$GITHUB_EVENT_PATH" ]; then - echo "ERROR! Failed to get [GITHUB_EVENT_PATH]!" - echo "ERROR:[$GITHUB_EVENT_PATH]" - exit 1 - else - echo "Successfully found:[GITHUB_EVENT_PATH]" - fi - - ################################################## - # Need to pull the GitHub Vars from the env file # - ################################################## - - ###################### - # Get the GitHub Org # - ###################### - # shellcheck disable=SC2002 - GITHUB_ORG=$(cat "$GITHUB_EVENT_PATH" | jq -r '.repository.owner.login' ) - - ############################ - # Validate we have a value # - ############################ - if [ -z "$GITHUB_ORG" ]; then - echo "ERROR! Failed to get [GITHUB_ORG]!" - echo "ERROR:[$GITHUB_ORG]" - exit 1 - else - echo "Successfully found:[GITHUB_ORG]" - fi - - ####################### - # Get the GitHub Repo # - ####################### - # shellcheck disable=SC2002 - GITHUB_REPO=$(cat "$GITHUB_EVENT_PATH"| jq -r '.repository.name' ) - - ############################ - # Validate we have a value # - ############################ - if [ -z "$GITHUB_REPO" ]; then - echo "ERROR! Failed to get [GITHUB_REPO]!" - echo "ERROR:[$GITHUB_REPO]" - exit 1 - else - echo "Successfully found:[GITHUB_REPO]" - fi -} -################################################################################ #### Function LintAnsibleFiles ################################################# LintAnsibleFiles() { @@ -1364,6 +1457,447 @@ LintAnsibleFiles() fi } ################################################################################ +#### Function GetGitHubVars #################################################### +GetGitHubVars() +{ + ########## + # Prints # + ########## + echo "--------------------------------------------" + echo "Gathering GitHub information..." + + ############################ + # Validate we have a value # + ############################ + if [ -z "$GITHUB_SHA" ]; then + echo "ERROR! Failed to get [GITHUB_SHA]!" + echo "ERROR:[$GITHUB_SHA]" + exit 1 + else + echo "Successfully found:[GITHUB_SHA], value:[$GITHUB_SHA]" + fi + + ############################ + # Validate we have a value # + ############################ + if [ -z "$GITHUB_WORKSPACE" ]; then + echo "ERROR! Failed to get [GITHUB_WORKSPACE]!" + echo "ERROR:[$GITHUB_WORKSPACE]" + exit 1 + else + echo "Successfully found:[GITHUB_WORKSPACE], value:[$GITHUB_WORKSPACE]" + fi + + ############################ + # Validate we have a value # + ############################ + if [ -z "$GITHUB_EVENT_PATH" ]; then + echo "ERROR! Failed to get [GITHUB_EVENT_PATH]!" + echo "ERROR:[$GITHUB_EVENT_PATH]" + exit 1 + else + echo "Successfully found:[GITHUB_EVENT_PATH], value:[$GITHUB_EVENT_PATH]" + fi + + ################################################## + # Need to pull the GitHub Vars from the env file # + ################################################## + + ###################### + # Get the GitHub Org # + ###################### + # shellcheck disable=SC2002 + GITHUB_ORG=$(cat "$GITHUB_EVENT_PATH" | jq -r '.repository.owner.login' ) + + ############################ + # Validate we have a value # + ############################ + if [ -z "$GITHUB_ORG" ]; then + echo "ERROR! Failed to get [GITHUB_ORG]!" + echo "ERROR:[$GITHUB_ORG]" + exit 1 + else + echo "Successfully found:[GITHUB_ORG], value:[$GITHUB_ORG]" + fi + + ####################### + # Get the GitHub Repo # + ####################### + # shellcheck disable=SC2002 + GITHUB_REPO=$(cat "$GITHUB_EVENT_PATH"| jq -r '.repository.name' ) + + ############################ + # Validate we have a value # + ############################ + if [ -z "$GITHUB_REPO" ]; then + echo "ERROR! Failed to get [GITHUB_REPO]!" + echo "ERROR:[$GITHUB_REPO]" + exit 1 + else + echo "Successfully found:[GITHUB_REPO], value:[$GITHUB_REPO]" + fi + + ############################################ + # Print headers for user provided env vars # + ############################################ + echo "" + echo "--------------------------------------------" + echo "Gathering User provided information..." + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_ALL_CODEBASE=$(echo "$VALIDATE_ALL_CODEBASE" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_ALL_CODEBASE" != "false" ]]; then + # Set to true + VALIDATE_ALL_CODEBASE="$DEFAULT_VALIDATE_ALL_CODEBASE" + echo "- Validating ALL files in code base..." + else + # Its false + echo "- Only validating [new], or [edited] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_YAML=$(echo "$VALIDATE_YAML" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_YAML" != "false" ]]; then + # Set to true + VALIDATE_YAML="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [YML] files in code base..." + else + # Its false + echo "- Excluding [YML] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_JSON=$(echo "$VALIDATE_JSON" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_JSON" != "false" ]]; then + # Set to true + VALIDATE_JSON="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [JSON] files in code base..." + else + # Its false + echo "- Excluding [JSON] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_XML=$(echo "$VALIDATE_XML" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_XML" != "false" ]]; then + # Set to true + VALIDATE_XML="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [XML] files in code base..." + else + # Its false + echo "- Excluding [XML] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_MD=$(echo "$VALIDATE_MD" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_MD" != "false" ]]; then + # Set to true + VALIDATE_MD="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [MARKDOWN] files in code base..." + else + # Its false + echo "- Excluding [MARKDOWN] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_BASH=$(echo "$VALIDATE_BASH" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_BASH" != "false" ]]; then + # Set to true + VALIDATE_BASH="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [BASH] files in code base..." + else + # Its false + echo "- Excluding [BASH] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_PERL=$(echo "$VALIDATE_PERL" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_PERL" != "false" ]]; then + # Set to true + VALIDATE_PERL="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [PERL] files in code base..." + else + # Its false + echo "- Excluding [PERL] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_PYTHON=$(echo "$VALIDATE_PYTHON" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_PYTHON" != "false" ]]; then + # Set to true + VALIDATE_PYTHON="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [PYTHON] files in code base..." + else + # Its false + echo "- Excluding [PYTHON] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_RUBY=$(echo "$VALIDATE_RUBY" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_RUBY" != "false" ]]; then + # Set to true + VALIDATE_RUBY="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [RUBY] files in code base..." + else + # Its false + echo "- Excluding [RUBY] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_COFFEE=$(echo "$VALIDATE_COFFEE" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_COFFEE" != "false" ]]; then + # Set to true + VALIDATE_COFFEE="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [COFFEE] files in code base..." + else + # Its false + echo "- Excluding [COFFEE] files in code base..." + fi + + ############################### + # Convert string to lowercase # + ############################### + VALIDATE_ANSIBLE=$(echo "$VALIDATE_ANSIBLE" | awk '{print tolower($0)}') + ###################################### + # Validate we should check all files # + ###################################### + if [[ "$VALIDATE_ANSIBLE" != "false" ]]; then + # Set to true + VALIDATE_ANSIBLE="$DEFAULT_VALIDATE_LANGUAGE" + echo "- Validating [ANSIBLE] files in code base..." + else + # Its false + echo "- Excluding [ANSIBLE] files in code base..." + fi +} +################################################################################ +#### Function BuildFileList #################################################### +BuildFileList() +{ + # Need to build a list of all files changed + # This can be pulled from the GITHUB_EVENT_PATH payload + + ################ + # print header # + ################ + echo "" + echo "----------------------------------------------" + echo "Gathering list of files edited, or added in the commit..." + + ##################################################################### + # Switch codebase back to master to get a list of all files changed # + ##################################################################### + SWITCH_CMD=$(cd "$GITHUB_WORKSPACE" || exit; git checkout master 2>&1) + + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? + + ############################## + # Check the shell for errors # + ############################## + if [ $ERROR_CODE -ne 0 ]; then + # Error + echo "Failed to switch to master branch to get files changed!" + echo "ERROR:[$SWITCH_CMD]" + exit 1 + fi + + ################################################ + # Get the Array of files changed in the comits # + ################################################ + # shellcheck disable=SC2207 + RAW_FILE_ARRAY=($(cd "$GITHUB_WORKSPACE" || exit; git diff --name-only "master..$GITHUB_SHA" 2>&1)) + + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? + + ############################## + # Check the shell for errors # + ############################## + if [ $ERROR_CODE -ne 0 ]; then + # Error + echo "ERROR! Failed to gain a list of all files changed!" + echo "ERROR:[${RAW_FILE_ARRAY[*]}]" + exit 1 + fi + + ################################################# + # Itterate through the array of all files found # + ################################################# + for FILE in "${RAW_FILE_ARRAY[@]}" + do + ########################### + # Get the files extension # + ########################### + # Extract just the file and extension, reverse it, cut off extension, + # reverse it back, substitute to lowercase + FILE_TYPE=$(basename "$FILE" | rev | cut -f1 -d'.' | rev | awk '{print tolower($0)}') + + ######### + # DEBUG # + ######### + #echo "FILE_TYPE:[$FILE_TYPE]" + + ##################### + # Get the YML files # + ##################### + if [ "$FILE_TYPE" == "yml" ] || [ "$FILE_TYPE" == "yaml" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_YML+=("$FILE") + ###################### + # Get the JSON files # + ###################### + elif [ "$FILE_TYPE" == "json" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_JSON+=("$FILE") + ##################### + # Get the XML files # + ##################### + elif [ "$FILE_TYPE" == "xml" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_XML+=("$FILE") + ########################## + # Get the MARKDOWN files # + ########################## + elif [ "$FILE_TYPE" == "md" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_MD+=("$FILE") + ###################### + # Get the BASH files # + ###################### + elif [ "$FILE_TYPE" == "sh" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_BASH+=("$FILE") + ###################### + # Get the PERL files # + ###################### + elif [ "$FILE_TYPE" == "pl" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_PERL+=("$FILE") + ###################### + # Get the RUBY files # + ###################### + elif [ "$FILE_TYPE" == "rb" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_RUBY+=("$FILE") + ######################## + # Get the PYTHON files # + ######################## + elif [ "$FILE_TYPE" == "py" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_PYTHON+=("$FILE") + ######################## + # Get the COFFEE files # + ######################## + elif [ "$FILE_TYPE" == "coffee" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_COFFEE+=("$FILE") + else + ############################ + # Extension was not found! # + ############################ + echo "WARN! Failed to get file type for:[$FILE]!" + fi + done + + ######################################### + # Need to switch back to branch of code # + ######################################### + SWITCH2_CMD=$(cd "$GITHUB_WORKSPACE" || exit; git checkout --progress --force "$GITHUB_SHA" 2>&1) + + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? + + ############################## + # Check the shell for errors # + ############################## + if [ $ERROR_CODE -ne 0 ]; then + # Error + echo "Failed to switch back to branch!" + echo "ERROR:[$SWITCH2_CMD]" + exit 1 + fi + + ################ + # Footer print # + ################ + echo "Successfully gathered list of files..." +} +################################################################################ #### Function Footer ########################################################### Footer() { @@ -1378,6 +1912,7 @@ Footer() 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 COFFEE:[$ERRORS_FOUND_COFFEE]" echo "ERRORS FOUND in RUBY:[$ERRORS_FOUND_RUBY]" echo "ERRORS FOUND in ANSIBLE:[$ERRORS_FOUND_ANSIBLE]" @@ -1393,6 +1928,7 @@ Footer() [ $ERRORS_FOUND_BASH -ne 0 ] || \ [ $ERRORS_FOUND_PERL -ne 0 ] || \ [ $ERRORS_FOUND_PYTHON -ne 0 ] || \ + [ $ERRORS_FOUND_COFFEE -ne 0 ] || \ [ $ERRORS_FOUND_ANSIBLE -ne 0 ] || \ [ $ERRORS_FOUND_RUBY -ne 0 ]; then # Failed exit @@ -1424,59 +1960,82 @@ GetGitHubVars ######################## GetLinterRules -###################### -# Validate workspace # -###################### +######################################## +# Get list of files changed if env set # +######################################## +if [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then + BuildFileList +fi ###################### # Lint the Yml Files # ###################### -LintYmlFiles +if [ "$VALIDATE_YAML" == "true" ]; then + LintYmlFiles +fi ####################### # Lint the json files # ####################### -LintJsonFiles +if [ "$VALIDATE_JSON" == "true" ]; then + LintJsonFiles +fi ###################### # Lint the XML Files # ###################### -LintXmlFiles +if [ "$VALIDATE_XML" == "true" ]; then + LintXmlFiles +fi ########################### # Lint the Markdown Files # ########################### -LintMdFiles +if [ "$VALIDATE_MD" == "true" ]; then + LintMdFiles +fi ####################### # Lint the bash files # ####################### -LintBashFiles +if [ "$VALIDATE_BASH" == "true" ]; then + LintBashFiles +fi ######################### # Lint the python files # ######################### -LintPythonFiles +if [ "$VALIDATE_PYTHON" == "true" ]; then + LintPythonFiles +fi ####################### # Lint the perl files # ####################### -LintPerlFiles +if [ "$VALIDATE_PERL" == "true" ]; then + LintPerlFiles +fi ####################### # Lint the ruby files # ####################### -LintRubyFiles +if [ "$VALIDATE_RUBY" == "true" ]; then + LintRubyFiles +fi ######################### # Lint the coffee files # ######################### -LintCoffeeFiles +if [ "$VALIDATE_COFFEE" == "true" ]; then + LintCoffeeFiles +fi ########################## # Lint the Ansible files # ########################## -LintAnsibleFiles +if [ "$VALIDATE_ANSIBLE" == "true" ]; then + LintAnsibleFiles +fi ########## # Footer #