lint/lib/functions/buildFileList.sh

622 lines
22 KiB
Bash
Raw Normal View History

2020-06-29 10:55:59 -04:00
#!/usr/bin/env bash
################################################################################
################################################################################
########### Super-Linter Build File List Functions @admiralawkbar ##############
################################################################################
################################################################################
########################## FUNCTION CALLS BELOW ################################
################################################################################
################################################################################
#### Function BuildFileList ####################################################
2020-07-01 17:40:40 -04:00
function BuildFileList() {
debug "Building file list..."
2020-06-29 10:55:59 -04:00
################
# Pull in vars #
2020-06-29 10:55:59 -04:00
################
VALIDATE_ALL_CODEBASE="${1}"
debug "Validate all code base: ${VALIDATE_ALL_CODEBASE}..."
TEST_CASE_RUN="${2}"
debug "TEST_CASE_RUN: ${TEST_CASE_RUN}..."
if [ "${VALIDATE_ALL_CODEBASE}" == "false" ] && [ "${TEST_CASE_RUN}" != "true" ]; then
# Need to build a list of all files changed
# This can be pulled from the GITHUB_EVENT_PATH payload
################
# print header #
################
debug "----------------------------------------------"
debug "Pulling in code history and branches..."
#################################################################################
# Switch codebase back to the default branch to get a list of all files changed #
#################################################################################
SWITCH_CMD=$(
git -C "${GITHUB_WORKSPACE}" pull --quiet
git -C "${GITHUB_WORKSPACE}" checkout "${DEFAULT_BRANCH}" 2>&1
)
2020-06-29 10:55:59 -04:00
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ ${ERROR_CODE} -ne 0 ]; then
# Error
info "Failed to switch to ${DEFAULT_BRANCH} branch to get files changed!"
fatal "[${SWITCH_CMD}]"
fi
2020-06-29 10:55:59 -04:00
2020-10-23 12:16:14 -04:00
if [ "${GITHUB_EVENT_NAME}" == "push" ]; then
################
# push event #
################
################
# print header #
################
debug "----------------------------------------------"
debug "Generating Diff with:[git diff-tree --no-commit-id --name-only -r \"${GITHUB_SHA}]\""
2020-10-23 12:16:14 -04:00
#################################################
# Get the Array of files changed in the commits #
#################################################
mapfile -t RAW_FILE_ARRAY < <(git diff-tree --no-commit-id --name-only -r "${GITHUB_SHA}" 2>&1)
2020-10-23 12:16:14 -04:00
else
################
# PR event #
################
################
# print header #
################
debug "----------------------------------------------"
debug "Generating Diff with:[git diff --name-only '${DEFAULT_BRANCH}...${GITHUB_SHA}' --diff-filter=d]"
2020-06-29 10:55:59 -04:00
2020-10-23 12:16:14 -04:00
#################################################
# Get the Array of files changed in the commits #
#################################################
mapfile -t RAW_FILE_ARRAY < <(git -C "${GITHUB_WORKSPACE}" diff --name-only "${DEFAULT_BRANCH}...${GITHUB_SHA}" --diff-filter=d 2>&1)
fi
else
WORKSPACE_PATH="${GITHUB_WORKSPACE}"
if [ "${TEST_CASE_RUN}" == "true" ]; then
2020-11-06 17:10:09 -05:00
WORKSPACE_PATH="${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}"
fi
################
# print header #
################
debug "----------------------------------------------"
debug "Populating the file list with all the files in the ${WORKSPACE_PATH} workspace"
mapfile -t RAW_FILE_ARRAY < <(find "${WORKSPACE_PATH}" \
2020-11-06 17:10:09 -05:00
-not \( -path '*/\.git' -prune \) \
-not \( -path '*/\.pytest_cache' -prune \) \
2020-11-06 17:10:09 -05:00
-not \( -path '*/\.rbenv' -prune \) \
-not \( -path '*/\.terragrunt-cache' -prune \) \
-not \( -path '*/\.venv' -prune \) \
-not \( -path '*/\__pycache__' -prune \) \
2020-11-06 17:10:09 -05:00
-type f \
2>&1 | sort)
2020-11-05 10:10:49 -05:00
debug "RAW_FILE_ARRAY contents: ${RAW_FILE_ARRAY[*]}"
2020-06-29 10:55:59 -04:00
fi
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
2020-07-21 13:09:07 -04:00
if [ ${ERROR_CODE} -ne 0 ]; then
2020-11-05 10:10:49 -05:00
fatal "Failed to gain a list of all files changed! Error code: ${ERROR_CODE}"
2020-06-29 10:55:59 -04:00
fi
2020-10-14 11:31:55 -04:00
##########################################################################
# Check to make sure the raw file array is not empty or throw a warning! #
##########################################################################
if [ ${#RAW_FILE_ARRAY[@]} -eq 0 ]; then
###############################
# No files were found to lint #
###############################
warn "No files were found in the GITHUB_WORKSPACE:[${GITHUB_WORKSPACE}] to lint!"
fi
2020-06-29 10:55:59 -04:00
################################################
# Iterate through the array of all files found #
################################################
info "---------------------------------"
info "------ File list to check: ------"
info "---------------------------------"
2020-07-01 17:40:40 -04:00
for FILE in "${RAW_FILE_ARRAY[@]}"; do
2020-07-22 13:27:45 -04:00
# Extract just the file extension
2020-08-31 17:44:35 -04:00
FILE_TYPE="$(GetFileExtension "$FILE")"
# get the baseFile for additonal logic, lowercase
2020-08-13 13:40:21 -04:00
BASE_FILE=$(basename "${FILE,,}")
2020-06-29 10:55:59 -04:00
2020-07-06 09:29:36 -04:00
##############
# Print file #
##############
debug "File:[${FILE}], File_type:[${FILE_TYPE}], Base_file:[${BASE_FILE}]"
2020-06-29 10:55:59 -04:00
2020-11-10 11:02:03 -05:00
##########################################################
# Check if the file exists on the filesystem, or skip it #
##########################################################
if [ ! -f "${FILE}" ]; then
# File not found in workspace
debug "File:{$FILE} existed in commit data, but not found on file system, skipping..."
continue
fi
########################################################
# Don't include test cases if not running in test mode #
########################################################
if [[ ${FILE} == *"${TEST_CASE_FOLDER}"* ]] && [ "${TEST_CASE_RUN}" != "true" ]; then
debug "TEST_CASE_RUN (${TEST_CASE_RUN}) is not true. Skipping ${FILE}..."
continue
##################################################
# Include test cases if not running in test mode #
##################################################
elif [[ ${FILE} != *"${TEST_CASE_FOLDER}"* ]] && [ "${TEST_CASE_RUN}" == "true" ]; then
debug "TEST_CASE_RUN (${TEST_CASE_RUN}) is true. Skipping ${FILE}..."
fi
2020-10-02 18:33:01 -04:00
# Editorconfig-checker should check every file
FILE_ARRAY_EDITORCONFIG+=("${FILE}")
2020-11-10 11:02:03 -05:00
#######################
2020-08-31 17:44:35 -04:00
# Get the shell files #
2020-11-10 11:02:03 -05:00
#######################
2020-08-31 17:44:35 -04:00
if IsValidShellScript "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_BASH+=("${FILE}")
FILE_ARRAY_BASH_EXEC+=("${FILE}")
FILE_ARRAY_SHELL_SHFMT+=("${FILE}")
2020-08-31 12:51:03 -04:00
#########################
# Get the CLOJURE files #
#########################
elif [ "${FILE_TYPE}" == "clj" ] || [ "${FILE_TYPE}" == "cljs" ] ||
[ "${FILE_TYPE}" == "cljc" ] || [ "${FILE_TYPE}" == "edn" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_CLOJURE+=("${FILE}")
########################
# Get the COFFEE files #
########################
elif [ "${FILE_TYPE}" == "coffee" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_COFFEESCRIPT+=("${FILE}")
########################
# Get the CSHARP files #
########################
elif [ "${FILE_TYPE}" == "cs" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_CSHARP+=("${FILE}")
#####################
# Get the CSS files #
#####################
elif [ "${FILE_TYPE}" == "css" ] || [ "${FILE_TYPE}" == "scss" ] ||
[ "${FILE_TYPE}" == "sass" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_CSS+=("${FILE}")
2020-07-05 22:21:13 -04:00
######################
2020-08-31 12:51:03 -04:00
# Get the DART files #
2020-07-05 22:21:13 -04:00
######################
2020-08-31 12:51:03 -04:00
elif [ "${FILE_TYPE}" == "dart" ]; then
2020-07-05 22:21:13 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_DART+=("${FILE}")
########################
# Get the DOCKER files #
########################
# Use BASE_FILE here because FILE_TYPE is not reliable when there is no file extension
elif [[ "${FILE_TYPE}" != "dockerfilelintrc" ]] && [[ "${BASE_FILE}" == *"dockerfile"* ]]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
FILE_ARRAY_DOCKERFILE+=("${FILE}")
FILE_ARRAY_DOCKERFILE_HADOLINT+=("${FILE}")
2020-08-31 12:51:03 -04:00
#####################
# Get the ENV files #
#####################
elif [ "${FILE_TYPE}" == "env" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_ENV+=("${FILE}")
2020-06-29 10:55:59 -04:00
########################
2020-08-31 12:51:03 -04:00
# Get the Golang files #
2020-06-29 10:55:59 -04:00
########################
2020-08-31 12:51:03 -04:00
elif [ "${FILE_TYPE}" == "go" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_GO+=("${FILE}")
2020-06-29 10:55:59 -04:00
########################
2020-08-31 12:51:03 -04:00
# Get the GROOVY files #
2020-06-29 10:55:59 -04:00
########################
2020-08-31 12:51:03 -04:00
elif [ "$FILE_TYPE" == "groovy" ] || [ "$FILE_TYPE" == "jenkinsfile" ] ||
[ "$FILE_TYPE" == "gradle" ] || [ "$FILE_TYPE" == "nf" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_GROOVY+=("$FILE")
######################
# Get the HTML files #
######################
elif [ "${FILE_TYPE}" == "html" ]; then
################################
# Append the file to the array #
##############################p##
FILE_ARRAY_HTML+=("${FILE}")
2020-08-05 14:35:14 -04:00
######################
# Get the Java files #
######################
elif [ "${FILE_TYPE}" == "java" ]; then
################################
# Append the file to the array #
################################
FILE_ARRAY_JAVA+=("${FILE}")
2020-08-31 12:51:03 -04:00
2020-06-29 10:55:59 -04:00
############################
# Get the JavaScript files #
############################
2020-07-21 13:09:07 -04:00
elif [ "${FILE_TYPE}" == "js" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-07-21 13:09:07 -04:00
FILE_ARRAY_JAVASCRIPT_ES+=("${FILE}")
FILE_ARRAY_JAVASCRIPT_STANDARD+=("${FILE}")
2020-09-25 15:25:00 -04:00
2020-08-31 12:51:03 -04:00
#####################
2020-07-07 11:02:56 -04:00
# Get the JSX files #
2020-08-31 12:51:03 -04:00
#####################
######################
# Get the JSON files #
######################
elif [ "${FILE_TYPE}" == "json" ]; then
2020-07-07 11:02:56 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_JSON+=("${FILE}")
############################
# Check if file is OpenAPI #
############################
if DetectOpenAPIFile "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_OPENAPI+=("${FILE}")
fi
############################
# Check if file is ARM #
############################
if DetectARMFile "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_ARM+=("${FILE}")
fi
#####################################
# Check if the file is CFN template #
#####################################
if DetectCloudFormationFile "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_CLOUDFORMATION+=("${FILE}")
fi
############################################
# Check if the file is AWS States Language #
############################################
if DetectAWSStatesFIle "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_STATES+=("${FILE}")
fi
elif [ "${FILE_TYPE}" == "jsx" ]; then
2020-07-07 11:02:56 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_JSX+=("${FILE}")
########################
# Get the KOTLIN files #
########################
elif [ "${FILE_TYPE}" == "kt" ] || [ "${FILE_TYPE}" == "kts" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_KOTLIN+=("${FILE}")
#####################
# Get the LUA files #
#####################
elif [ "$FILE_TYPE" == "lua" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_LUA+=("$FILE")
2020-08-18 18:54:32 -04:00
#######################
# Get the LaTeX files #
#######################
elif [ "${FILE_TYPE}" == "tex" ]; then
################################
# Append the file to the array #
################################
FILE_ARRAY_LATEX+=("${FILE}")
2020-08-31 12:51:03 -04:00
##########################
# Get the MARKDOWN files #
##########################
elif [ "${FILE_TYPE}" == "md" ]; then
2020-08-15 18:53:08 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_MARKDOWN+=("${FILE}")
######################
# Get the PHP files #
######################
elif [ "${FILE_TYPE}" == "php" ]; then
################################
# Append the file to the array #
################################
FILE_ARRAY_PHP_BUILTIN+=("${FILE}")
FILE_ARRAY_PHP_PHPCS+=("${FILE}")
FILE_ARRAY_PHP_PHPSTAN+=("${FILE}")
FILE_ARRAY_PHP_PSALM+=("${FILE}")
######################
# Get the PERL files #
######################
elif [ "${FILE_TYPE}" == "pl" ] || [ "${FILE_TYPE}" == "pm" ] ||
[ "${FILE_TYPE}" == "t" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_PERL+=("${FILE}")
############################
2020-06-29 10:55:59 -04:00
# Get the Powershell files #
2020-08-31 12:51:03 -04:00
############################
elif [ "${FILE_TYPE}" == "ps1" ] ||
2020-11-06 17:10:09 -05:00
[ "${FILE_TYPE}" == "psm1" ] ||
[ "${FILE_TYPE}" == "psd1" ] ||
[ "${FILE_TYPE}" == "ps1xml" ] ||
[ "${FILE_TYPE}" == "pssc" ] ||
[ "${FILE_TYPE}" == "psrc" ] ||
[ "${FILE_TYPE}" == "cdxml" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-07-21 13:09:07 -04:00
FILE_ARRAY_POWERSHELL+=("${FILE}")
2020-08-31 12:51:03 -04:00
#################################
# Get the PROTOCOL BUFFER files #
#################################
elif [ "${FILE_TYPE}" == "proto" ]; then
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_PROTOBUF+=("${FILE}")
########################
# Get the PYTHON files #
########################
elif [ "${FILE_TYPE}" == "py" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
FILE_ARRAY_PYTHON_BLACK+=("${FILE}")
2020-08-31 12:51:03 -04:00
FILE_ARRAY_PYTHON_PYLINT+=("${FILE}")
FILE_ARRAY_PYTHON_FLAKE8+=("${FILE}")
2020-10-28 11:22:55 -04:00
FILE_ARRAY_PYTHON_ISORT+=("${FILE}")
2020-08-31 12:51:03 -04:00
######################
# Get the RAKU files #
######################
elif [ "${FILE_TYPE}" == "raku" ] || [ "${FILE_TYPE}" == "rakumod" ] ||
[ "${FILE_TYPE}" == "rakutest" ] || [ "${FILE_TYPE}" == "pm6" ] ||
[ "${FILE_TYPE}" == "pl6" ] || [ "${FILE_TYPE}" == "p6" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_RAKU+=("${FILE}")
####################
# Get the R files #
####################
elif [ "${FILE_TYPE}" == "r" ] || [ "${FILE_TYPE}" == "rmd" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_R+=("${FILE}")
######################
# Get the RUBY files #
######################
elif [ "${FILE_TYPE}" == "rb" ]; then
2020-07-30 16:39:05 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_RUBY+=("${FILE}")
2020-09-07 10:49:07 -04:00
###########################
# Get the SNAKEMAKE files #
###########################
elif [ "${FILE_TYPE}" == "smk" ] || [ "${BASE_FILE}" == "snakefile" ]; then
2020-09-07 10:49:07 -04:00
################################
# Append the file to the array #
################################
FILE_ARRAY_SNAKEMAKE_LINT+=("${FILE}")
FILE_ARRAY_SNAKEMAKE_SNAKEFMT+=("${FILE}")
2020-09-07 10:49:07 -04:00
2020-08-31 12:51:03 -04:00
#####################
# Get the SQL files #
#####################
elif [ "${FILE_TYPE}" == "sql" ]; then
2020-07-06 04:17:20 -04:00
################################
# Append the file to the array #
2020-08-31 12:51:03 -04:00
##############################p##
FILE_ARRAY_SQL+=("${FILE}")
###########################
# Get the Terraform files #
###########################
elif [ "${FILE_TYPE}" == "tf" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_TERRAFORM+=("${FILE}")
FILE_ARRAY_TERRAFORM_TERRASCAN+=("${FILE}")
2020-10-08 09:18:08 -04:00
############################
# Get the Terragrunt files #
############################
elif [ "${FILE_TYPE}" == "hcl" ] && [[ ${FILE} != *".tflint.hcl"* ]]; then
2020-10-08 09:18:08 -04:00
################################
# Append the file to the array #
################################
FILE_ARRAY_TERRAGRUNT+=("${FILE}")
2020-08-31 12:51:03 -04:00
############################
# Get the TypeScript files #
############################
elif [ "${FILE_TYPE}" == "ts" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_TYPESCRIPT_ES+=("${FILE}")
FILE_ARRAY_TYPESCRIPT_STANDARD+=("${FILE}")
#####################
# Get the TSX files #
#####################
elif [ "${FILE_TYPE}" == "tsx" ]; then
2020-06-29 10:55:59 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_TSX+=("${FILE}")
#####################
# Get the XML files #
#####################
elif [ "${FILE_TYPE}" == "xml" ]; then
2020-07-04 18:14:27 -04:00
################################
# Append the file to the array #
2020-08-06 13:01:36 -04:00
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_XML+=("${FILE}")
################################
# Get the CLOUDFORMATION files #
################################
elif [ "${FILE_TYPE}" == "yml" ] || [ "${FILE_TYPE}" == "yaml" ]; then
2020-07-14 10:28:58 -04:00
################################
# Append the file to the array #
################################
2020-08-31 12:51:03 -04:00
FILE_ARRAY_YAML+=("${FILE}")
#####################################
# Check if the file is CFN template #
#####################################
if DetectCloudFormationFile "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_CLOUDFORMATION+=("${FILE}")
fi
2020-10-13 11:21:23 -04:00
########################################
# Check if the file is Tekton template #
########################################
if DetectTektonFile "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_TEKTON+=("${FILE}")
fi
2020-09-21 18:53:30 -04:00
############################################
# Check if the file is Kubernetes template #
############################################
if DetectKubernetesFile "${FILE}"; then
################################
# Append the file to the array #
################################
FILE_ARRAY_KUBERNETES_KUBEVAL+=("${FILE}")
2020-09-21 18:53:30 -04:00
fi
2020-08-31 12:51:03 -04:00
########################################################################
# We have something that we need to try to check file type another way #
########################################################################
2020-06-29 10:55:59 -04:00
else
##############################################
# Use file to see if we can parse what it is #
##############################################
2020-08-24 12:11:10 -04:00
CheckFileType "${FILE}"
2020-08-24 12:16:22 -04:00
fi
2020-10-19 21:46:14 -04:00
##########################################
# Print line break after each file debug #
##########################################
debug ""
2020-06-29 10:55:59 -04:00
done
if [ "${VALIDATE_ALL_CODEBASE}" == "false" ]; then
#########################################
# Need to switch back to branch of code #
#########################################
SWITCH2_CMD=$(git -C "${GITHUB_WORKSPACE}" checkout --progress --force "${GITHUB_SHA}" 2>&1)
2020-06-29 10:55:59 -04:00
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ ${ERROR_CODE} -ne 0 ]; then
# Error
error "Failed to switch back to branch!"
fatal "[${SWITCH2_CMD}]"
fi
2020-06-29 10:55:59 -04:00
fi
################
# Footer print #
################
2020-07-30 16:39:05 -04:00
info "----------------------------------------------"
info "Successfully gathered list of files..."
2020-06-29 10:55:59 -04:00
}