mirror of
https://github.com/super-linter/super-linter.git
synced 2024-11-25 10:10:56 -05:00
break out: (#990)
* break out: * fix it * fix source * add them exports * more path * more path
This commit is contained in:
parent
496ec0cb1d
commit
7943ce1f54
16 changed files with 746 additions and 704 deletions
|
@ -18,7 +18,7 @@ export LOG_TRACE LOG_DEBUG LOG_VERBOSE LOG_NOTICE LOG_WARN LOG_ERROR
|
||||||
# Source additonal scripts #
|
# Source additonal scripts #
|
||||||
############################
|
############################
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "${GITHUB_WORKSPACE}/lib/log.sh" # Source the function script(s)
|
source "${GITHUB_WORKSPACE}/lib/functions/log.sh" # Source the function script(s)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
############################ FUNCTIONS BELOW ###################################
|
############################ FUNCTIONS BELOW ###################################
|
||||||
|
|
|
@ -29,7 +29,7 @@ export LOG_TRACE LOG_DEBUG LOG_VERBOSE LOG_NOTICE LOG_WARN LOG_ERROR
|
||||||
# Source Function Files #
|
# Source Function Files #
|
||||||
#########################
|
#########################
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "${GITHUB_WORKSPACE}/lib/log.sh" # Source the function script(s)
|
source "${GITHUB_WORKSPACE}/lib/functions/log.sh" # Source the function script(s)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
############################ FUNCTIONS BELOW ###################################
|
############################ FUNCTIONS BELOW ###################################
|
||||||
|
|
|
@ -48,7 +48,7 @@ export LOG_TRACE LOG_DEBUG LOG_VERBOSE LOG_NOTICE LOG_WARN LOG_ERROR
|
||||||
# Source Function Files #
|
# Source Function Files #
|
||||||
#########################
|
#########################
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "${GITHUB_WORKSPACE}/lib/log.sh" # Source the function script(s)
|
source "${GITHUB_WORKSPACE}/lib/functions/log.sh" # Source the function script(s)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
############################ FUNCTIONS BELOW ###################################
|
############################ FUNCTIONS BELOW ###################################
|
||||||
|
|
|
@ -21,7 +21,7 @@ export LOG_TRACE LOG_DEBUG LOG_VERBOSE LOG_NOTICE LOG_WARN LOG_ERROR
|
||||||
# Source Function Files #
|
# Source Function Files #
|
||||||
#########################
|
#########################
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "${GITHUB_WORKSPACE}/lib/log.sh" # Source the function script(s)
|
source "${GITHUB_WORKSPACE}/lib/functions/log.sh" # Source the function script(s)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
############################ FUNCTIONS BELOW ###################################
|
############################ FUNCTIONS BELOW ###################################
|
||||||
|
|
|
@ -345,7 +345,7 @@ RUN ACTIONS_RUNNER_DEBUG=true WRITE_LINTER_VERSIONS_FILE=true /action/lib/linter
|
||||||
##################################4
|
##################################4
|
||||||
# Run validations of built image #
|
# Run validations of built image #
|
||||||
##################################
|
##################################
|
||||||
RUN /action/lib/validate-docker.sh
|
RUN /action/lib/functions/validateDocker.sh
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Set the entrypoint #
|
# Set the entrypoint #
|
||||||
|
|
|
@ -617,114 +617,3 @@ function BuildFileList() {
|
||||||
info "----------------------------------------------"
|
info "----------------------------------------------"
|
||||||
info "Successfully gathered list of files..."
|
info "Successfully gathered list of files..."
|
||||||
}
|
}
|
||||||
################################################################################
|
|
||||||
#### Function GetFileType ######################################################
|
|
||||||
function GetFileType() {
|
|
||||||
# Need to run the file through the 'file' exec to help determine
|
|
||||||
# The type of file being parsed
|
|
||||||
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="$1"
|
|
||||||
|
|
||||||
##################
|
|
||||||
# Check the file #
|
|
||||||
##################
|
|
||||||
GET_FILE_TYPE_CMD=$(file "${FILE}" 2>&1)
|
|
||||||
|
|
||||||
echo "${GET_FILE_TYPE_CMD}"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function CheckFileType ####################################################
|
|
||||||
function CheckFileType() {
|
|
||||||
# Need to run the file through the 'file' exec to help determine
|
|
||||||
# The type of file being parsed
|
|
||||||
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="$1"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# Get file type #
|
|
||||||
#################
|
|
||||||
GET_FILE_TYPE_CMD="$(GetFileType "$FILE")"
|
|
||||||
|
|
||||||
if [[ ${GET_FILE_TYPE_CMD} == *"Ruby script"* ]]; then
|
|
||||||
#######################
|
|
||||||
# It is a Ruby script #
|
|
||||||
#######################
|
|
||||||
warn "Found ruby script without extension:[.rb]"
|
|
||||||
info "Please update file with proper extensions."
|
|
||||||
################################
|
|
||||||
# Append the file to the array #
|
|
||||||
################################
|
|
||||||
FILE_ARRAY_RUBY+=("${FILE}")
|
|
||||||
else
|
|
||||||
############################
|
|
||||||
# Extension was not found! #
|
|
||||||
############################
|
|
||||||
warn "Failed to get filetype for:[${FILE}]!"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function GetFileExtension ###############################################
|
|
||||||
function GetFileExtension() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="$1"
|
|
||||||
|
|
||||||
###########################
|
|
||||||
# Get the files extension #
|
|
||||||
###########################
|
|
||||||
# Extract just the file extension
|
|
||||||
FILE_TYPE=${FILE##*.}
|
|
||||||
# To lowercase
|
|
||||||
FILE_TYPE=${FILE_TYPE,,}
|
|
||||||
|
|
||||||
echo "$FILE_TYPE"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function IsValidShellScript ###############################################
|
|
||||||
function IsValidShellScript() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="$1"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# Get file type #
|
|
||||||
#################
|
|
||||||
FILE_EXTENSION="$(GetFileExtension "$FILE")"
|
|
||||||
GET_FILE_TYPE_CMD="$(GetFileType "$FILE")"
|
|
||||||
|
|
||||||
trace "File:[${FILE}], File extension:[${FILE_EXTENSION}], File type: [${GET_FILE_TYPE_CMD}]"
|
|
||||||
|
|
||||||
if [[ "${FILE_EXTENSION}" == "zsh" ]] ||
|
|
||||||
[[ ${GET_FILE_TYPE_CMD} == *"zsh script"* ]]; then
|
|
||||||
warn "$FILE is a ZSH script. Skipping..."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${FILE_EXTENSION}" == "sh" ] ||
|
|
||||||
[ "${FILE_EXTENSION}" == "bash" ] ||
|
|
||||||
[ "${FILE_EXTENSION}" == "dash" ] ||
|
|
||||||
[ "${FILE_EXTENSION}" == "ksh" ]; then
|
|
||||||
debug "$FILE is a valid shell script (has a valid extension: ${FILE_EXTENSION})"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${GET_FILE_TYPE_CMD}" == *"POSIX shell script"* ]] ||
|
|
||||||
[[ ${GET_FILE_TYPE_CMD} == *"Bourne-Again shell script"* ]] ||
|
|
||||||
[[ ${GET_FILE_TYPE_CMD} == *"dash script"* ]] ||
|
|
||||||
[[ ${GET_FILE_TYPE_CMD} == *"ksh script"* ]] ||
|
|
||||||
[[ ${GET_FILE_TYPE_CMD} == *"/usr/bin/env sh script"* ]]; then
|
|
||||||
debug "$FILE is a valid shell script (has a valid file type: ${GET_FILE_TYPE_CMD})"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
trace "$FILE is NOT a supported shell script. Skipping"
|
|
||||||
return 1
|
|
||||||
}
|
|
319
lib/functions/detectFiles.sh
Executable file
319
lib/functions/detectFiles.sh
Executable file
|
@ -0,0 +1,319 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########### Super-Linter linting Functions @admiralawkbar ######################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########################## FUNCTION CALLS BELOW ################################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
#### Function DetectOpenAPIFile ################################################
|
||||||
|
DetectOpenAPIFile() {
|
||||||
|
################
|
||||||
|
# Pull in vars #
|
||||||
|
################
|
||||||
|
FILE="${1}"
|
||||||
|
debug "Checking if ${FILE} is an OpenAPI file..."
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Check the file for keywords #
|
||||||
|
###############################
|
||||||
|
grep -E '"openapi":|"swagger":|^openapi:|^swagger:' "${FILE}" >/dev/null
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Load the error code #
|
||||||
|
#######################
|
||||||
|
ERROR_CODE=$?
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# Check the shell for errors #
|
||||||
|
##############################
|
||||||
|
if [ ${ERROR_CODE} -eq 0 ]; then
|
||||||
|
########################
|
||||||
|
# Found string in file #
|
||||||
|
########################
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
###################
|
||||||
|
# No string match #
|
||||||
|
###################
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function DetectTektonFile #################################################
|
||||||
|
DetectTektonFile() {
|
||||||
|
################
|
||||||
|
# Pull in vars #
|
||||||
|
################
|
||||||
|
FILE="${1}"
|
||||||
|
debug "Checking if ${FILE} is a Tekton file..."
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Check the file for keywords #
|
||||||
|
###############################
|
||||||
|
grep -q -E 'apiVersion: tekton' "${FILE}" >/dev/null
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Load the error code #
|
||||||
|
#######################
|
||||||
|
ERROR_CODE=$?
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# Check the shell for errors #
|
||||||
|
##############################
|
||||||
|
if [ ${ERROR_CODE} -eq 0 ]; then
|
||||||
|
########################
|
||||||
|
# Found string in file #
|
||||||
|
########################
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
###################
|
||||||
|
# No string match #
|
||||||
|
###################
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function DetectARMFile ####################################################
|
||||||
|
DetectARMFile() {
|
||||||
|
################
|
||||||
|
# Pull in vars #
|
||||||
|
################
|
||||||
|
FILE="${1}" # Name of the file/path we are validating
|
||||||
|
debug "Checking if ${FILE} is an ARM file..."
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Check the file for keywords #
|
||||||
|
###############################
|
||||||
|
grep -E 'schema.management.azure.com' "${FILE}" >/dev/null
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Load the error code #
|
||||||
|
#######################
|
||||||
|
ERROR_CODE=$?
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# Check the shell for errors #
|
||||||
|
##############################
|
||||||
|
if [ ${ERROR_CODE} -eq 0 ]; then
|
||||||
|
########################
|
||||||
|
# Found string in file #
|
||||||
|
########################
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
###################
|
||||||
|
# No string match #
|
||||||
|
###################
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function DetectCloudFormationFile #########################################
|
||||||
|
DetectCloudFormationFile() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="${1}" # File that we need to validate
|
||||||
|
debug "Checking if ${FILE} is a Cloud Formation file..."
|
||||||
|
|
||||||
|
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-formats.html
|
||||||
|
# AWSTemplateFormatVersion is optional
|
||||||
|
#######################################
|
||||||
|
# Check if file has AWS Template info #
|
||||||
|
#######################################
|
||||||
|
if grep -q 'AWSTemplateFormatVersion' "${FILE}" >/dev/null; then
|
||||||
|
# Found it
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
# See if it contains AWS References #
|
||||||
|
#####################################
|
||||||
|
if grep -q -E '(AWS|Alexa|Custom)::' "${FILE}" >/dev/null; then
|
||||||
|
# Found it
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# No identifiers of a CLOUDFORMATION template found #
|
||||||
|
#####################################################
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function DetectKubernetesFile #########################################
|
||||||
|
DetectKubernetesFile() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="${1}" # File that we need to validate
|
||||||
|
debug "Checking if ${FILE} is a Kubernetes descriptor..."
|
||||||
|
|
||||||
|
if grep -v 'kustomize.config.k8s.io' "${FILE}" | grep -v tekton | grep -q -E '(apiVersion):'; then
|
||||||
|
debug "${FILE} is a Kubernetes descriptor"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
debug "${FILE} is NOT a Kubernetes descriptor"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function DetectAWSStatesFIle ##############################################
|
||||||
|
DetectAWSStatesFIle() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="${1}" # File that we need to validate
|
||||||
|
debug "Checking if ${FILE} is a AWS states descriptor..."
|
||||||
|
|
||||||
|
# https://states-language.net/spec.html#example
|
||||||
|
###############################
|
||||||
|
# check if file has resources #
|
||||||
|
###############################
|
||||||
|
if grep -q '"Resource": *"arn"*' "${FILE}"; then
|
||||||
|
# Found it
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# No identifiers of a AWS States Language found #
|
||||||
|
#################################################
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function CheckInArray #####################################################
|
||||||
|
CheckInArray() {
|
||||||
|
###############
|
||||||
|
# Pull in Var #
|
||||||
|
###############
|
||||||
|
NEEDLE="$1" # Language we need to match
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# Check if Language was in the array #
|
||||||
|
######################################
|
||||||
|
for LANG in "${UNIQUE_LINTED_ARRAY[@]}"; do
|
||||||
|
if [[ "${LANG}" == "${NEEDLE}" ]]; then
|
||||||
|
############
|
||||||
|
# Found it #
|
||||||
|
############
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Did not find it #
|
||||||
|
###################
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function GetFileType ######################################################
|
||||||
|
function GetFileType() {
|
||||||
|
# Need to run the file through the 'file' exec to help determine
|
||||||
|
# The type of file being parsed
|
||||||
|
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="$1"
|
||||||
|
|
||||||
|
##################
|
||||||
|
# Check the file #
|
||||||
|
##################
|
||||||
|
GET_FILE_TYPE_CMD=$(file "${FILE}" 2>&1)
|
||||||
|
|
||||||
|
echo "${GET_FILE_TYPE_CMD}"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function CheckFileType ####################################################
|
||||||
|
function CheckFileType() {
|
||||||
|
# Need to run the file through the 'file' exec to help determine
|
||||||
|
# The type of file being parsed
|
||||||
|
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="$1"
|
||||||
|
|
||||||
|
#################
|
||||||
|
# Get file type #
|
||||||
|
#################
|
||||||
|
GET_FILE_TYPE_CMD="$(GetFileType "$FILE")"
|
||||||
|
|
||||||
|
if [[ ${GET_FILE_TYPE_CMD} == *"Ruby script"* ]]; then
|
||||||
|
#######################
|
||||||
|
# It is a Ruby script #
|
||||||
|
#######################
|
||||||
|
warn "Found ruby script without extension:[.rb]"
|
||||||
|
info "Please update file with proper extensions."
|
||||||
|
################################
|
||||||
|
# Append the file to the array #
|
||||||
|
################################
|
||||||
|
FILE_ARRAY_RUBY+=("${FILE}")
|
||||||
|
else
|
||||||
|
############################
|
||||||
|
# Extension was not found! #
|
||||||
|
############################
|
||||||
|
warn "Failed to get filetype for:[${FILE}]!"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function GetFileExtension ###############################################
|
||||||
|
function GetFileExtension() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="$1"
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# Get the files extension #
|
||||||
|
###########################
|
||||||
|
# Extract just the file extension
|
||||||
|
FILE_TYPE=${FILE##*.}
|
||||||
|
# To lowercase
|
||||||
|
FILE_TYPE=${FILE_TYPE,,}
|
||||||
|
|
||||||
|
echo "$FILE_TYPE"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function IsValidShellScript ###############################################
|
||||||
|
function IsValidShellScript() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
FILE="$1"
|
||||||
|
|
||||||
|
#################
|
||||||
|
# Get file type #
|
||||||
|
#################
|
||||||
|
FILE_EXTENSION="$(GetFileExtension "$FILE")"
|
||||||
|
GET_FILE_TYPE_CMD="$(GetFileType "$FILE")"
|
||||||
|
|
||||||
|
trace "File:[${FILE}], File extension:[${FILE_EXTENSION}], File type: [${GET_FILE_TYPE_CMD}]"
|
||||||
|
|
||||||
|
if [[ "${FILE_EXTENSION}" == "zsh" ]] ||
|
||||||
|
[[ ${GET_FILE_TYPE_CMD} == *"zsh script"* ]]; then
|
||||||
|
warn "$FILE is a ZSH script. Skipping..."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${FILE_EXTENSION}" == "sh" ] ||
|
||||||
|
[ "${FILE_EXTENSION}" == "bash" ] ||
|
||||||
|
[ "${FILE_EXTENSION}" == "dash" ] ||
|
||||||
|
[ "${FILE_EXTENSION}" == "ksh" ]; then
|
||||||
|
debug "$FILE is a valid shell script (has a valid extension: ${FILE_EXTENSION})"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${GET_FILE_TYPE_CMD}" == *"POSIX shell script"* ]] ||
|
||||||
|
[[ ${GET_FILE_TYPE_CMD} == *"Bourne-Again shell script"* ]] ||
|
||||||
|
[[ ${GET_FILE_TYPE_CMD} == *"dash script"* ]] ||
|
||||||
|
[[ ${GET_FILE_TYPE_CMD} == *"ksh script"* ]] ||
|
||||||
|
[[ ${GET_FILE_TYPE_CMD} == *"/usr/bin/env sh script"* ]]; then
|
||||||
|
debug "$FILE is a valid shell script (has a valid file type: ${GET_FILE_TYPE_CMD})"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
trace "$FILE is NOT a supported shell script. Skipping"
|
||||||
|
return 1
|
||||||
|
}
|
229
lib/functions/linterRules.sh
Executable file
229
lib/functions/linterRules.sh
Executable file
|
@ -0,0 +1,229 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########### Super-Linter linting Functions @admiralawkbar ######################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########################## FUNCTION CALLS BELOW ################################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
#### Function GetLinterRules ###################################################
|
||||||
|
GetLinterRules() {
|
||||||
|
# Need to validate the rules files exist
|
||||||
|
|
||||||
|
################
|
||||||
|
# Pull in vars #
|
||||||
|
################
|
||||||
|
LANGUAGE_NAME="${1}" # Name of the language were looking for
|
||||||
|
debug "Getting linter rules for ${LANGUAGE_NAME}..."
|
||||||
|
|
||||||
|
DEFAULT_RULES_LOCATION="${2}"
|
||||||
|
debug "Default rules location: ${DEFAULT_RULES_LOCATION}..."
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# Need to create the variables for the real variables #
|
||||||
|
#######################################################
|
||||||
|
LANGUAGE_FILE_NAME="${LANGUAGE_NAME}_FILE_NAME"
|
||||||
|
LANGUAGE_LINTER_RULES="${LANGUAGE_NAME}_LINTER_RULES"
|
||||||
|
debug "Variable names for language file name: ${LANGUAGE_FILE_NAME}, language linter rules: ${LANGUAGE_LINTER_RULES}"
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# Check if the language rules variables are defined #
|
||||||
|
#####################################################
|
||||||
|
if [ -z "${!LANGUAGE_FILE_NAME+x}" ]; then
|
||||||
|
debug "${LANGUAGE_FILE_NAME} is not set. Skipping loading rules for ${LANGUAGE_NAME}..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
debug "Initializing LANGUAGE_LINTER_RULES value to an empty string..."
|
||||||
|
eval "${LANGUAGE_LINTER_RULES}="
|
||||||
|
|
||||||
|
##########################
|
||||||
|
# Get the file extension #
|
||||||
|
##########################
|
||||||
|
FILE_EXTENSION=$(echo "${!LANGUAGE_FILE_NAME}" | rev | cut -d'.' -f1 | rev)
|
||||||
|
FILE_NAME=$(basename "${!LANGUAGE_FILE_NAME}" ".${FILE_EXTENSION}")
|
||||||
|
debug "${LANGUAGE_NAME} language rule file (${!LANGUAGE_FILE_NAME}) has ${FILE_NAME} name and ${FILE_EXTENSION} extension"
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Set the secondary file name and path #
|
||||||
|
########################################
|
||||||
|
debug "Initializing SECONDARY_FILE_NAME and SECONDARY_LANGUAGE_FILE_PATH..."
|
||||||
|
SECONDARY_FILE_NAME=''
|
||||||
|
SECONDARY_LANGUAGE_FILE_PATH=
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Check for secondary file name #
|
||||||
|
#################################
|
||||||
|
if [[ $FILE_EXTENSION == 'yml' ]]; then
|
||||||
|
# Need to see if yaml also exists
|
||||||
|
SECONDARY_FILE_NAME="$FILE_NAME.yaml"
|
||||||
|
elif [[ $FILE_EXTENSION == 'yaml' ]]; then
|
||||||
|
# need to see if yml also exists
|
||||||
|
SECONDARY_FILE_NAME="$FILE_NAME.yml"
|
||||||
|
fi
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Set Flag for set Rules File #
|
||||||
|
###############################
|
||||||
|
SET_RULES=0
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
# Validate we have the linter rules #
|
||||||
|
#####################################
|
||||||
|
LANGUAGE_FILE_PATH="${GITHUB_WORKSPACE}/${LINTER_RULES_PATH}/${!LANGUAGE_FILE_NAME}"
|
||||||
|
debug "Checking if the user-provided:[${!LANGUAGE_FILE_NAME}] and exists at:[${LANGUAGE_FILE_PATH}]"
|
||||||
|
if [ -f "${LANGUAGE_FILE_PATH}" ]; then
|
||||||
|
info "----------------------------------------------"
|
||||||
|
info "User provided file:[${LANGUAGE_FILE_PATH}] exists, setting rules file..."
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Update the path to the file location #
|
||||||
|
########################################
|
||||||
|
eval "${LANGUAGE_LINTER_RULES}=${LANGUAGE_FILE_PATH}"
|
||||||
|
######################
|
||||||
|
# Set the rules flag #
|
||||||
|
######################
|
||||||
|
SET_RULES=1
|
||||||
|
else
|
||||||
|
# Failed to find the primary rules file
|
||||||
|
debug " -> Codebase does NOT have file:[${LANGUAGE_FILE_PATH}]."
|
||||||
|
fi
|
||||||
|
|
||||||
|
####################################################
|
||||||
|
# Check if we have secondary file name to look for #
|
||||||
|
####################################################
|
||||||
|
if [ -n "$SECONDARY_FILE_NAME" ] && [ "${SET_RULES}" -eq 0 ]; then
|
||||||
|
# Set the path
|
||||||
|
SECONDARY_LANGUAGE_FILE_PATH="${GITHUB_WORKSPACE}/${LINTER_RULES_PATH}/${SECONDARY_FILE_NAME}"
|
||||||
|
debug "${LANGUAGE_NAME} language rule file has a secondary rules file name to check (${SECONDARY_FILE_NAME}). Path:[${SECONDARY_LANGUAGE_FILE_PATH}]"
|
||||||
|
|
||||||
|
if [ -f "${SECONDARY_LANGUAGE_FILE_PATH}" ]; then
|
||||||
|
info "----------------------------------------------"
|
||||||
|
info "User provided file:[${SECONDARY_LANGUAGE_FILE_PATH}] exists, setting rules file..."
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Update the path to the file location #
|
||||||
|
########################################
|
||||||
|
eval "${LANGUAGE_LINTER_RULES}=${SECONDARY_LANGUAGE_FILE_PATH}"
|
||||||
|
######################
|
||||||
|
# Set the rules flag #
|
||||||
|
######################
|
||||||
|
SET_RULES=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
##############################################################
|
||||||
|
# We didnt find rules from user, setting to default template #
|
||||||
|
##############################################################
|
||||||
|
if [ "${SET_RULES}" -eq 0 ]; then
|
||||||
|
########################################################
|
||||||
|
# No user default provided, using the template default #
|
||||||
|
########################################################
|
||||||
|
eval "${LANGUAGE_LINTER_RULES}=${DEFAULT_RULES_LOCATION}/${!LANGUAGE_FILE_NAME}"
|
||||||
|
debug " -> Codebase does NOT have file:[${LANGUAGE_FILE_PATH}], nor the file:[${SECONDARY_LANGUAGE_FILE_PATH}], using Default rules at:[${!LANGUAGE_LINTER_RULES}]"
|
||||||
|
######################
|
||||||
|
# Set the rules flag #
|
||||||
|
######################
|
||||||
|
SET_RULES=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Debug Print info #
|
||||||
|
####################
|
||||||
|
debug " -> Language rules file variable (${LANGUAGE_LINTER_RULES}) value is:[${!LANGUAGE_LINTER_RULES}]"
|
||||||
|
|
||||||
|
############################
|
||||||
|
# Validate the file exists #
|
||||||
|
############################
|
||||||
|
if [ -e "${!LANGUAGE_LINTER_RULES}" ]; then
|
||||||
|
# Found the rules file
|
||||||
|
debug " -> ${LANGUAGE_LINTER_RULES} rules file (${!LANGUAGE_LINTER_RULES}) exists."
|
||||||
|
else
|
||||||
|
# Here we expect a rules file, so fail if not available.
|
||||||
|
fatal " -> ${LANGUAGE_LINTER_RULES} rules file (${!LANGUAGE_LINTER_RULES}) doesn't exist. Terminating..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
######################
|
||||||
|
# Export the results #
|
||||||
|
######################
|
||||||
|
eval "export ${LANGUAGE_LINTER_RULES}"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function GetStandardRules #################################################
|
||||||
|
GetStandardRules() {
|
||||||
|
################
|
||||||
|
# Pull In Vars #
|
||||||
|
################
|
||||||
|
LINTER="${1}" # Type: javascript | typescript
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# Need to get the ENV vars from the linter rules to run in command line #
|
||||||
|
#########################################################################
|
||||||
|
# Copy orig IFS to var
|
||||||
|
ORIG_IFS="${IFS}"
|
||||||
|
# Set the IFS to newline
|
||||||
|
IFS=$'\n'
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# Get list of all environment variables #
|
||||||
|
#########################################
|
||||||
|
# Only env vars that are marked as true
|
||||||
|
GET_ENV_ARRAY=()
|
||||||
|
if [[ ${LINTER} == "javascript" ]]; then
|
||||||
|
mapfile -t GET_ENV_ARRAY < <(yq .env "${JAVASCRIPT_STANDARD_LINTER_RULES}" | grep true)
|
||||||
|
elif [[ ${LINTER} == "typescript" ]]; then
|
||||||
|
mapfile -t GET_ENV_ARRAY < <(yq .env "${TYPESCRIPT_STANDARD_LINTER_RULES}" | grep true)
|
||||||
|
fi
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Load the error code #
|
||||||
|
#######################
|
||||||
|
ERROR_CODE=$?
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# Check the shell for errors #
|
||||||
|
##############################
|
||||||
|
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||||
|
# ERROR
|
||||||
|
error "Failed to gain list of ENV vars to load!"
|
||||||
|
fatal "[${GET_ENV_ARRAY[*]}]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
##########################
|
||||||
|
# Set IFS back to normal #
|
||||||
|
##########################
|
||||||
|
# Set IFS back to Orig
|
||||||
|
IFS="${ORIG_IFS}"
|
||||||
|
|
||||||
|
######################
|
||||||
|
# Set the env string #
|
||||||
|
######################
|
||||||
|
ENV_STRING=''
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Pull out the envs to load #
|
||||||
|
#############################
|
||||||
|
for ENV in "${GET_ENV_ARRAY[@]}"; do
|
||||||
|
#############################
|
||||||
|
# remove spaces from return #
|
||||||
|
#############################
|
||||||
|
ENV="$(echo -e "${ENV}" | tr -d '[:space:]')"
|
||||||
|
################################
|
||||||
|
# Get the env to add to string #
|
||||||
|
################################
|
||||||
|
ENV="$(echo "${ENV}" | cut -d'"' -f2)"
|
||||||
|
debug "ENV:[${ENV}]"
|
||||||
|
ENV_STRING+="--env ${ENV} "
|
||||||
|
done
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# Remove trailing and ending whitespace #
|
||||||
|
#########################################
|
||||||
|
if [[ ${LINTER} == "javascript" ]]; then
|
||||||
|
JAVASCRIPT_STANDARD_LINTER_RULES="$(echo -e "${ENV_STRING}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
||||||
|
elif [[ ${LINTER} == "typescript" ]]; then
|
||||||
|
TYPESCRIPT_STANDARD_LINTER_RULES="$(echo -e "${ENV_STRING}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
||||||
|
fi
|
||||||
|
}
|
|
@ -1,5 +1,56 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########### Super-Linter linting Functions @admiralawkbar ######################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
#### Function GetLinterVersions ################################################
|
||||||
|
GetLinterVersions() {
|
||||||
|
#########################
|
||||||
|
# Print version headers #
|
||||||
|
#########################
|
||||||
|
debug "---------------------------------------------"
|
||||||
|
debug "Linter Version Info:"
|
||||||
|
|
||||||
|
if ! [ -e "${VERSION_FILE}" ] && [ "${WRITE_LINTER_VERSIONS_FILE}" = "true" ]; then
|
||||||
|
debug "Building linter version file..."
|
||||||
|
if BuildLinterVersions "${VERSION_FILE}" "${LINTER_NAMES_ARRAY[@]}"; then
|
||||||
|
info "Linter version file built correctly."
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
fatal "Error while building the versions file."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Cat the linter versions file #
|
||||||
|
################################
|
||||||
|
CAT_CMD=$(cat "${VERSION_FILE}" 2>&1)
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Load the error code #
|
||||||
|
#######################
|
||||||
|
ERROR_CODE=$?
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# Check the shell for errors #
|
||||||
|
##############################
|
||||||
|
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||||
|
# Failure
|
||||||
|
fatal "Failed to view version file:[${VERSION_FILE}]"
|
||||||
|
else
|
||||||
|
# Success
|
||||||
|
debug "${CAT_CMD}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Print version footers #
|
||||||
|
#########################
|
||||||
|
debug "---------------------------------------------"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function BuildLinterVersions ##############################################
|
||||||
BuildLinterVersions() {
|
BuildLinterVersions() {
|
||||||
VERSION_FILE="${1}" && shift
|
VERSION_FILE="${1}" && shift
|
||||||
LINTER_ARRAY=("$@")
|
LINTER_ARRAY=("$@")
|
||||||
|
@ -62,7 +113,8 @@ BuildLinterVersions() {
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function WriteFile ########################################################
|
||||||
WriteFile() {
|
WriteFile() {
|
||||||
##############
|
##############
|
||||||
# Read Input #
|
# Read Input #
|
0
lib/log.sh → lib/functions/log.sh
Normal file → Executable file
0
lib/log.sh → lib/functions/log.sh
Normal file → Executable file
123
lib/functions/tapLibrary.sh
Executable file
123
lib/functions/tapLibrary.sh
Executable file
|
@ -0,0 +1,123 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########### Super-Linter linting Functions @admiralawkbar ######################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
########################## FUNCTION CALLS BELOW ################################
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
#### Function IsTap ############################################################
|
||||||
|
function IsTAP() {
|
||||||
|
if [ "${OUTPUT_FORMAT}" == "tap" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function TransformTAPDetails ##############################################
|
||||||
|
function TransformTAPDetails() {
|
||||||
|
DATA=${1}
|
||||||
|
if [ -n "${DATA}" ] && [ "${OUTPUT_DETAILS}" == "detailed" ]; then
|
||||||
|
#########################################################
|
||||||
|
# Transform new lines to \\n, remove colours and colons #
|
||||||
|
#########################################################
|
||||||
|
echo "${DATA}" | awk 'BEGIN{RS="\n";ORS="\\n"}1' | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | tr ':' ' '
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function HeaderTap ########################################################
|
||||||
|
function HeaderTap() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
INDEX="${1}" # File being validated
|
||||||
|
OUTPUT_FILE="${2}" # Output location
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Print the goods #
|
||||||
|
###################
|
||||||
|
printf "TAP version 13\n1..%s\n" "${INDEX}" >"${OUTPUT_FILE}"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function OkTap ############################################################
|
||||||
|
function OkTap() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
INDEX="${1}" # Location
|
||||||
|
FILE="${2}" # File being validated
|
||||||
|
TEMP_FILE="${3}" # Temp file location
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Print the goods #
|
||||||
|
###################
|
||||||
|
echo "ok ${INDEX} - ${FILE}" >>"${TEMP_FILE}"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function NotOkTap #########################################################
|
||||||
|
function NotOkTap() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
INDEX="${1}" # Location
|
||||||
|
FILE="${2}" # File being validated
|
||||||
|
TEMP_FILE="${3}" # Temp file location
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Print the goods #
|
||||||
|
###################
|
||||||
|
echo "not ok ${INDEX} - ${FILE}" >>"${TEMP_FILE}"
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function AddDetailedMessageIfEnabled ######################################
|
||||||
|
function AddDetailedMessageIfEnabled() {
|
||||||
|
################
|
||||||
|
# Pull in Vars #
|
||||||
|
################
|
||||||
|
LINT_CMD="${1}" # Linter command
|
||||||
|
TEMP_FILE="${2}" # Temp file
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Check the return #
|
||||||
|
####################
|
||||||
|
DETAILED_MSG=$(TransformTAPDetails "${LINT_CMD}")
|
||||||
|
if [ -n "${DETAILED_MSG}" ]; then
|
||||||
|
printf " ---\n message: %s\n ...\n" "${DETAILED_MSG}" >>"${TEMP_FILE}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
################################################################################
|
||||||
|
#### Function Reports ##########################################################
|
||||||
|
Reports() {
|
||||||
|
info "----------------------------------------------"
|
||||||
|
info "----------------------------------------------"
|
||||||
|
info "Generated reports:"
|
||||||
|
info "----------------------------------------------"
|
||||||
|
info "----------------------------------------------"
|
||||||
|
|
||||||
|
###################################
|
||||||
|
# Prints output report if enabled #
|
||||||
|
###################################
|
||||||
|
if [ -z "${FORMAT_REPORT}" ]; then
|
||||||
|
info "Reports generated in folder ${REPORT_OUTPUT_FOLDER}"
|
||||||
|
#############################################
|
||||||
|
# Print info on reports that were generated #
|
||||||
|
#############################################
|
||||||
|
if [ -d "${REPORT_OUTPUT_FOLDER}" ]; then
|
||||||
|
info "Contents of report folder:"
|
||||||
|
OUTPUT_CONTENTS_CMD=$(ls "${REPORT_OUTPUT_FOLDER}")
|
||||||
|
info "$OUTPUT_CONTENTS_CMD"
|
||||||
|
else
|
||||||
|
warn "Report output folder (${REPORT_OUTPUT_FOLDER}) does NOT exist."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Prints for warnings if found #
|
||||||
|
################################
|
||||||
|
for TEST in "${WARNING_ARRAY_TEST[@]}"; do
|
||||||
|
warn "Expected file to compare with was not found for ${TEST}"
|
||||||
|
done
|
||||||
|
}
|
|
@ -16,7 +16,7 @@ export LOG_TRACE LOG_DEBUG LOG_VERBOSE LOG_NOTICE LOG_WARN LOG_ERROR
|
||||||
# Source Function Files #
|
# Source Function Files #
|
||||||
#########################
|
#########################
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source /action/lib/log.sh
|
source /action/lib/functions/log.sh
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
############################ FUNCTIONS BELOW ###################################
|
############################ FUNCTIONS BELOW ###################################
|
|
@ -546,84 +546,3 @@ function LintAnsibleFiles() {
|
||||||
debug "skipping ansible lint"
|
debug "skipping ansible lint"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
################################################################################
|
|
||||||
#### Function IsTap ############################################################
|
|
||||||
function IsTAP() {
|
|
||||||
if [ "${OUTPUT_FORMAT}" == "tap" ]; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function TransformTAPDetails ##############################################
|
|
||||||
function TransformTAPDetails() {
|
|
||||||
DATA=${1}
|
|
||||||
if [ -n "${DATA}" ] && [ "${OUTPUT_DETAILS}" == "detailed" ]; then
|
|
||||||
#########################################################
|
|
||||||
# Transform new lines to \\n, remove colours and colons #
|
|
||||||
#########################################################
|
|
||||||
echo "${DATA}" | awk 'BEGIN{RS="\n";ORS="\\n"}1' | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | tr ':' ' '
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function HeaderTap ########################################################
|
|
||||||
function HeaderTap() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
INDEX="${1}" # File being validated
|
|
||||||
OUTPUT_FILE="${2}" # Output location
|
|
||||||
|
|
||||||
###################
|
|
||||||
# Print the goods #
|
|
||||||
###################
|
|
||||||
printf "TAP version 13\n1..%s\n" "${INDEX}" >"${OUTPUT_FILE}"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function OkTap ############################################################
|
|
||||||
function OkTap() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
INDEX="${1}" # Location
|
|
||||||
FILE="${2}" # File being validated
|
|
||||||
TEMP_FILE="${3}" # Temp file location
|
|
||||||
|
|
||||||
###################
|
|
||||||
# Print the goods #
|
|
||||||
###################
|
|
||||||
echo "ok ${INDEX} - ${FILE}" >>"${TEMP_FILE}"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function NotOkTap #########################################################
|
|
||||||
function NotOkTap() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
INDEX="${1}" # Location
|
|
||||||
FILE="${2}" # File being validated
|
|
||||||
TEMP_FILE="${3}" # Temp file location
|
|
||||||
|
|
||||||
###################
|
|
||||||
# Print the goods #
|
|
||||||
###################
|
|
||||||
echo "not ok ${INDEX} - ${FILE}" >>"${TEMP_FILE}"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function AddDetailedMessageIfEnabled ######################################
|
|
||||||
function AddDetailedMessageIfEnabled() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
LINT_CMD="${1}" # Linter command
|
|
||||||
TEMP_FILE="${2}" # Temp file
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Check the return #
|
|
||||||
####################
|
|
||||||
DETAILED_MSG=$(TransformTAPDetails "${LINT_CMD}")
|
|
||||||
if [ -n "${DETAILED_MSG}" ]; then
|
|
||||||
printf " ---\n message: %s\n ...\n" "${DETAILED_MSG}" >>"${TEMP_FILE}"
|
|
||||||
fi
|
|
||||||
}
|
|
521
lib/linter.sh
521
lib/linter.sh
|
@ -44,13 +44,21 @@ export LOG_ERROR
|
||||||
# Source Function Files #
|
# Source Function Files #
|
||||||
#########################
|
#########################
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source /action/lib/log.sh # Source the function script(s)
|
source /action/lib/functions/log.sh # Source the function script(s)
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source /action/lib/buildFileList.sh # Source the function script(s)
|
source /action/lib/functions/buildFileList.sh # Source the function script(s)
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source /action/lib/validation.sh # Source the function script(s)
|
source /action/lib/functions/validation.sh # Source the function script(s)
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source /action/lib/worker.sh # Source the function script(s)
|
source /action/lib/functions/worker.sh # Source the function script(s)
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source /action/lib/functions/tapLibrary.sh # Source the function script(s)
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source /action/lib/functions/linterRules.sh # Source the function script(s)
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source /action/lib/functions/detectFiles.sh # Source the function script(s)
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source /action/lib/functions/linterVersions.sh # Source the function script(s)
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# GLOBALS #
|
# GLOBALS #
|
||||||
|
@ -59,7 +67,8 @@ source /action/lib/worker.sh # Source the function script(s)
|
||||||
DEFAULT_RULES_LOCATION='/action/lib/.automation' # Default rules files location
|
DEFAULT_RULES_LOCATION='/action/lib/.automation' # Default rules files location
|
||||||
LINTER_RULES_PATH="${LINTER_RULES_PATH:-.github/linters}" # Linter Path Directory
|
LINTER_RULES_PATH="${LINTER_RULES_PATH:-.github/linters}" # Linter Path Directory
|
||||||
GITHUB_API_URL='https://api.github.com' # GitHub API root url
|
GITHUB_API_URL='https://api.github.com' # GitHub API root url
|
||||||
VERSION_FILE='/action/lib/linter-versions.txt' # File to store linter versions
|
VERSION_FILE='/action/lib/functions/linterVersions.txt' # File to store linter versions
|
||||||
|
export VERSION_FILE # Workaround SC2034
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Rules files #
|
# Rules files #
|
||||||
|
@ -297,7 +306,7 @@ Header() {
|
||||||
###############################
|
###############################
|
||||||
# Give them the possum action #
|
# Give them the possum action #
|
||||||
###############################
|
###############################
|
||||||
/bin/bash /action/lib/possum.sh
|
/bin/bash /action/lib/functions/possum.sh
|
||||||
|
|
||||||
##########
|
##########
|
||||||
# Prints #
|
# Prints #
|
||||||
|
@ -314,447 +323,6 @@ Header() {
|
||||||
info "---------------------------------------------"
|
info "---------------------------------------------"
|
||||||
}
|
}
|
||||||
################################################################################
|
################################################################################
|
||||||
#### Function GetLinterVersions ################################################
|
|
||||||
GetLinterVersions() {
|
|
||||||
#########################
|
|
||||||
# Print version headers #
|
|
||||||
#########################
|
|
||||||
debug "---------------------------------------------"
|
|
||||||
debug "Linter Version Info:"
|
|
||||||
|
|
||||||
if ! [ -e "${VERSION_FILE}" ] && [ "${WRITE_LINTER_VERSIONS_FILE}" = "true" ]; then
|
|
||||||
debug "Building linter version file..."
|
|
||||||
# shellcheck source=/dev/null
|
|
||||||
source /action/lib/linterVersions.sh # Source the function script(s)
|
|
||||||
if BuildLinterVersions "${VERSION_FILE}" "${LINTER_NAMES_ARRAY[@]}"; then
|
|
||||||
info "Linter version file built correctly."
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
fatal "Error while building the versions file."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
################################
|
|
||||||
# Cat the linter versions file #
|
|
||||||
################################
|
|
||||||
CAT_CMD=$(cat "${VERSION_FILE}" 2>&1)
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Load the error code #
|
|
||||||
#######################
|
|
||||||
ERROR_CODE=$?
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Check the shell for errors #
|
|
||||||
##############################
|
|
||||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
|
||||||
# Failure
|
|
||||||
fatal "Failed to view version file:[${VERSION_FILE}]"
|
|
||||||
else
|
|
||||||
# Success
|
|
||||||
debug "${CAT_CMD}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Print version footers #
|
|
||||||
#########################
|
|
||||||
debug "---------------------------------------------"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function GetLinterRules ###################################################
|
|
||||||
GetLinterRules() {
|
|
||||||
# Need to validate the rules files exist
|
|
||||||
|
|
||||||
################
|
|
||||||
# Pull in vars #
|
|
||||||
################
|
|
||||||
LANGUAGE_NAME="${1}" # Name of the language were looking for
|
|
||||||
debug "Getting linter rules for ${LANGUAGE_NAME}..."
|
|
||||||
|
|
||||||
DEFAULT_RULES_LOCATION="${2}"
|
|
||||||
debug "Default rules location: ${DEFAULT_RULES_LOCATION}..."
|
|
||||||
|
|
||||||
#######################################################
|
|
||||||
# Need to create the variables for the real variables #
|
|
||||||
#######################################################
|
|
||||||
LANGUAGE_FILE_NAME="${LANGUAGE_NAME}_FILE_NAME"
|
|
||||||
LANGUAGE_LINTER_RULES="${LANGUAGE_NAME}_LINTER_RULES"
|
|
||||||
debug "Variable names for language file name: ${LANGUAGE_FILE_NAME}, language linter rules: ${LANGUAGE_LINTER_RULES}"
|
|
||||||
|
|
||||||
#####################################################
|
|
||||||
# Check if the language rules variables are defined #
|
|
||||||
#####################################################
|
|
||||||
if [ -z "${!LANGUAGE_FILE_NAME+x}" ]; then
|
|
||||||
debug "${LANGUAGE_FILE_NAME} is not set. Skipping loading rules for ${LANGUAGE_NAME}..."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
debug "Initializing LANGUAGE_LINTER_RULES value to an empty string..."
|
|
||||||
eval "${LANGUAGE_LINTER_RULES}="
|
|
||||||
|
|
||||||
##########################
|
|
||||||
# Get the file extension #
|
|
||||||
##########################
|
|
||||||
FILE_EXTENSION=$(echo "${!LANGUAGE_FILE_NAME}" | rev | cut -d'.' -f1 | rev)
|
|
||||||
FILE_NAME=$(basename "${!LANGUAGE_FILE_NAME}" ".${FILE_EXTENSION}")
|
|
||||||
debug "${LANGUAGE_NAME} language rule file (${!LANGUAGE_FILE_NAME}) has ${FILE_NAME} name and ${FILE_EXTENSION} extension"
|
|
||||||
|
|
||||||
########################################
|
|
||||||
# Set the secondary file name and path #
|
|
||||||
########################################
|
|
||||||
debug "Initializing SECONDARY_FILE_NAME and SECONDARY_LANGUAGE_FILE_PATH..."
|
|
||||||
SECONDARY_FILE_NAME=''
|
|
||||||
SECONDARY_LANGUAGE_FILE_PATH=
|
|
||||||
|
|
||||||
#################################
|
|
||||||
# Check for secondary file name #
|
|
||||||
#################################
|
|
||||||
if [[ $FILE_EXTENSION == 'yml' ]]; then
|
|
||||||
# Need to see if yaml also exists
|
|
||||||
SECONDARY_FILE_NAME="$FILE_NAME.yaml"
|
|
||||||
elif [[ $FILE_EXTENSION == 'yaml' ]]; then
|
|
||||||
# need to see if yml also exists
|
|
||||||
SECONDARY_FILE_NAME="$FILE_NAME.yml"
|
|
||||||
fi
|
|
||||||
|
|
||||||
###############################
|
|
||||||
# Set Flag for set Rules File #
|
|
||||||
###############################
|
|
||||||
SET_RULES=0
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# Validate we have the linter rules #
|
|
||||||
#####################################
|
|
||||||
LANGUAGE_FILE_PATH="${GITHUB_WORKSPACE}/${LINTER_RULES_PATH}/${!LANGUAGE_FILE_NAME}"
|
|
||||||
debug "Checking if the user-provided:[${!LANGUAGE_FILE_NAME}] and exists at:[${LANGUAGE_FILE_PATH}]"
|
|
||||||
if [ -f "${LANGUAGE_FILE_PATH}" ]; then
|
|
||||||
info "----------------------------------------------"
|
|
||||||
info "User provided file:[${LANGUAGE_FILE_PATH}] exists, setting rules file..."
|
|
||||||
|
|
||||||
########################################
|
|
||||||
# Update the path to the file location #
|
|
||||||
########################################
|
|
||||||
eval "${LANGUAGE_LINTER_RULES}=${LANGUAGE_FILE_PATH}"
|
|
||||||
######################
|
|
||||||
# Set the rules flag #
|
|
||||||
######################
|
|
||||||
SET_RULES=1
|
|
||||||
else
|
|
||||||
# Failed to find the primary rules file
|
|
||||||
debug " -> Codebase does NOT have file:[${LANGUAGE_FILE_PATH}]."
|
|
||||||
fi
|
|
||||||
|
|
||||||
####################################################
|
|
||||||
# Check if we have secondary file name to look for #
|
|
||||||
####################################################
|
|
||||||
if [ -n "$SECONDARY_FILE_NAME" ] && [ "${SET_RULES}" -eq 0 ]; then
|
|
||||||
# Set the path
|
|
||||||
SECONDARY_LANGUAGE_FILE_PATH="${GITHUB_WORKSPACE}/${LINTER_RULES_PATH}/${SECONDARY_FILE_NAME}"
|
|
||||||
debug "${LANGUAGE_NAME} language rule file has a secondary rules file name to check (${SECONDARY_FILE_NAME}). Path:[${SECONDARY_LANGUAGE_FILE_PATH}]"
|
|
||||||
|
|
||||||
if [ -f "${SECONDARY_LANGUAGE_FILE_PATH}" ]; then
|
|
||||||
info "----------------------------------------------"
|
|
||||||
info "User provided file:[${SECONDARY_LANGUAGE_FILE_PATH}] exists, setting rules file..."
|
|
||||||
|
|
||||||
########################################
|
|
||||||
# Update the path to the file location #
|
|
||||||
########################################
|
|
||||||
eval "${LANGUAGE_LINTER_RULES}=${SECONDARY_LANGUAGE_FILE_PATH}"
|
|
||||||
######################
|
|
||||||
# Set the rules flag #
|
|
||||||
######################
|
|
||||||
SET_RULES=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
##############################################################
|
|
||||||
# We didnt find rules from user, setting to default template #
|
|
||||||
##############################################################
|
|
||||||
if [ "${SET_RULES}" -eq 0 ]; then
|
|
||||||
########################################################
|
|
||||||
# No user default provided, using the template default #
|
|
||||||
########################################################
|
|
||||||
eval "${LANGUAGE_LINTER_RULES}=${DEFAULT_RULES_LOCATION}/${!LANGUAGE_FILE_NAME}"
|
|
||||||
debug " -> Codebase does NOT have file:[${LANGUAGE_FILE_PATH}], nor the file:[${SECONDARY_LANGUAGE_FILE_PATH}], using Default rules at:[${!LANGUAGE_LINTER_RULES}]"
|
|
||||||
######################
|
|
||||||
# Set the rules flag #
|
|
||||||
######################
|
|
||||||
SET_RULES=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Debug Print info #
|
|
||||||
####################
|
|
||||||
debug " -> Language rules file variable (${LANGUAGE_LINTER_RULES}) value is:[${!LANGUAGE_LINTER_RULES}]"
|
|
||||||
|
|
||||||
############################
|
|
||||||
# Validate the file exists #
|
|
||||||
############################
|
|
||||||
if [ -e "${!LANGUAGE_LINTER_RULES}" ]; then
|
|
||||||
# Found the rules file
|
|
||||||
debug " -> ${LANGUAGE_LINTER_RULES} rules file (${!LANGUAGE_LINTER_RULES}) exists."
|
|
||||||
else
|
|
||||||
# Here we expect a rules file, so fail if not available.
|
|
||||||
fatal " -> ${LANGUAGE_LINTER_RULES} rules file (${!LANGUAGE_LINTER_RULES}) doesn't exist. Terminating..."
|
|
||||||
fi
|
|
||||||
|
|
||||||
######################
|
|
||||||
# Export the results #
|
|
||||||
######################
|
|
||||||
eval "export ${LANGUAGE_LINTER_RULES}"
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function GetStandardRules #################################################
|
|
||||||
GetStandardRules() {
|
|
||||||
################
|
|
||||||
# Pull In Vars #
|
|
||||||
################
|
|
||||||
LINTER="${1}" # Type: javascript | typescript
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
# Need to get the ENV vars from the linter rules to run in command line #
|
|
||||||
#########################################################################
|
|
||||||
# Copy orig IFS to var
|
|
||||||
ORIG_IFS="${IFS}"
|
|
||||||
# Set the IFS to newline
|
|
||||||
IFS=$'\n'
|
|
||||||
|
|
||||||
#########################################
|
|
||||||
# Get list of all environment variables #
|
|
||||||
#########################################
|
|
||||||
# Only env vars that are marked as true
|
|
||||||
GET_ENV_ARRAY=()
|
|
||||||
if [[ ${LINTER} == "javascript" ]]; then
|
|
||||||
mapfile -t GET_ENV_ARRAY < <(yq .env "${JAVASCRIPT_STANDARD_LINTER_RULES}" | grep true)
|
|
||||||
elif [[ ${LINTER} == "typescript" ]]; then
|
|
||||||
mapfile -t GET_ENV_ARRAY < <(yq .env "${TYPESCRIPT_STANDARD_LINTER_RULES}" | grep true)
|
|
||||||
fi
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Load the error code #
|
|
||||||
#######################
|
|
||||||
ERROR_CODE=$?
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Check the shell for errors #
|
|
||||||
##############################
|
|
||||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
|
||||||
# ERROR
|
|
||||||
error "Failed to gain list of ENV vars to load!"
|
|
||||||
fatal "[${GET_ENV_ARRAY[*]}]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
##########################
|
|
||||||
# Set IFS back to normal #
|
|
||||||
##########################
|
|
||||||
# Set IFS back to Orig
|
|
||||||
IFS="${ORIG_IFS}"
|
|
||||||
|
|
||||||
######################
|
|
||||||
# Set the env string #
|
|
||||||
######################
|
|
||||||
ENV_STRING=''
|
|
||||||
|
|
||||||
#############################
|
|
||||||
# Pull out the envs to load #
|
|
||||||
#############################
|
|
||||||
for ENV in "${GET_ENV_ARRAY[@]}"; do
|
|
||||||
#############################
|
|
||||||
# remove spaces from return #
|
|
||||||
#############################
|
|
||||||
ENV="$(echo -e "${ENV}" | tr -d '[:space:]')"
|
|
||||||
################################
|
|
||||||
# Get the env to add to string #
|
|
||||||
################################
|
|
||||||
ENV="$(echo "${ENV}" | cut -d'"' -f2)"
|
|
||||||
debug "ENV:[${ENV}]"
|
|
||||||
ENV_STRING+="--env ${ENV} "
|
|
||||||
done
|
|
||||||
|
|
||||||
#########################################
|
|
||||||
# Remove trailing and ending whitespace #
|
|
||||||
#########################################
|
|
||||||
if [[ ${LINTER} == "javascript" ]]; then
|
|
||||||
JAVASCRIPT_STANDARD_LINTER_RULES="$(echo -e "${ENV_STRING}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
|
||||||
elif [[ ${LINTER} == "typescript" ]]; then
|
|
||||||
TYPESCRIPT_STANDARD_LINTER_RULES="$(echo -e "${ENV_STRING}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function DetectOpenAPIFile ################################################
|
|
||||||
DetectOpenAPIFile() {
|
|
||||||
################
|
|
||||||
# Pull in vars #
|
|
||||||
################
|
|
||||||
FILE="${1}"
|
|
||||||
debug "Checking if ${FILE} is an OpenAPI file..."
|
|
||||||
|
|
||||||
###############################
|
|
||||||
# Check the file for keywords #
|
|
||||||
###############################
|
|
||||||
grep -E '"openapi":|"swagger":|^openapi:|^swagger:' "${FILE}" >/dev/null
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Load the error code #
|
|
||||||
#######################
|
|
||||||
ERROR_CODE=$?
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Check the shell for errors #
|
|
||||||
##############################
|
|
||||||
if [ ${ERROR_CODE} -eq 0 ]; then
|
|
||||||
########################
|
|
||||||
# Found string in file #
|
|
||||||
########################
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
###################
|
|
||||||
# No string match #
|
|
||||||
###################
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function DetectTektonFile #################################################
|
|
||||||
DetectTektonFile() {
|
|
||||||
################
|
|
||||||
# Pull in vars #
|
|
||||||
################
|
|
||||||
FILE="${1}"
|
|
||||||
debug "Checking if ${FILE} is a Tekton file..."
|
|
||||||
|
|
||||||
###############################
|
|
||||||
# Check the file for keywords #
|
|
||||||
###############################
|
|
||||||
grep -q -E 'apiVersion: tekton' "${FILE}" >/dev/null
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Load the error code #
|
|
||||||
#######################
|
|
||||||
ERROR_CODE=$?
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Check the shell for errors #
|
|
||||||
##############################
|
|
||||||
if [ ${ERROR_CODE} -eq 0 ]; then
|
|
||||||
########################
|
|
||||||
# Found string in file #
|
|
||||||
########################
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
###################
|
|
||||||
# No string match #
|
|
||||||
###################
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function DetectARMFile ####################################################
|
|
||||||
DetectARMFile() {
|
|
||||||
################
|
|
||||||
# Pull in vars #
|
|
||||||
################
|
|
||||||
FILE="${1}" # Name of the file/path we are validating
|
|
||||||
debug "Checking if ${FILE} is an ARM file..."
|
|
||||||
|
|
||||||
###############################
|
|
||||||
# Check the file for keywords #
|
|
||||||
###############################
|
|
||||||
grep -E 'schema.management.azure.com' "${FILE}" >/dev/null
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Load the error code #
|
|
||||||
#######################
|
|
||||||
ERROR_CODE=$?
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Check the shell for errors #
|
|
||||||
##############################
|
|
||||||
if [ ${ERROR_CODE} -eq 0 ]; then
|
|
||||||
########################
|
|
||||||
# Found string in file #
|
|
||||||
########################
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
###################
|
|
||||||
# No string match #
|
|
||||||
###################
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function DetectCloudFormationFile #########################################
|
|
||||||
DetectCloudFormationFile() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="${1}" # File that we need to validate
|
|
||||||
debug "Checking if ${FILE} is a Cloud Formation file..."
|
|
||||||
|
|
||||||
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-formats.html
|
|
||||||
# AWSTemplateFormatVersion is optional
|
|
||||||
#######################################
|
|
||||||
# Check if file has AWS Template info #
|
|
||||||
#######################################
|
|
||||||
if grep -q 'AWSTemplateFormatVersion' "${FILE}" >/dev/null; then
|
|
||||||
# Found it
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# See if it contains AWS References #
|
|
||||||
#####################################
|
|
||||||
if grep -q -E '(AWS|Alexa|Custom)::' "${FILE}" >/dev/null; then
|
|
||||||
# Found it
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
#####################################################
|
|
||||||
# No identifiers of a CLOUDFORMATION template found #
|
|
||||||
#####################################################
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function DetectKubernetesFile #########################################
|
|
||||||
DetectKubernetesFile() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="${1}" # File that we need to validate
|
|
||||||
debug "Checking if ${FILE} is a Kubernetes descriptor..."
|
|
||||||
|
|
||||||
if grep -v 'kustomize.config.k8s.io' "${FILE}" | grep -v tekton | grep -q -E '(apiVersion):'; then
|
|
||||||
debug "${FILE} is a Kubernetes descriptor"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
debug "${FILE} is NOT a Kubernetes descriptor"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function DetectAWSStatesFIle ##############################################
|
|
||||||
DetectAWSStatesFIle() {
|
|
||||||
################
|
|
||||||
# Pull in Vars #
|
|
||||||
################
|
|
||||||
FILE="${1}" # File that we need to validate
|
|
||||||
debug "Checking if ${FILE} is a AWS states descriptor..."
|
|
||||||
|
|
||||||
# https://states-language.net/spec.html#example
|
|
||||||
###############################
|
|
||||||
# check if file has resources #
|
|
||||||
###############################
|
|
||||||
if grep -q '"Resource": *"arn"*' "${FILE}"; then
|
|
||||||
# Found it
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
#################################################
|
|
||||||
# No identifiers of a AWS States Language found #
|
|
||||||
#################################################
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function GetGitHubVars ####################################################
|
#### Function GetGitHubVars ####################################################
|
||||||
GetGitHubVars() {
|
GetGitHubVars() {
|
||||||
##########
|
##########
|
||||||
|
@ -1007,39 +575,6 @@ CallStatusAPI() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
################################################################################
|
################################################################################
|
||||||
#### Function Reports ##########################################################
|
|
||||||
Reports() {
|
|
||||||
info "----------------------------------------------"
|
|
||||||
info "----------------------------------------------"
|
|
||||||
info "Generated reports:"
|
|
||||||
info "----------------------------------------------"
|
|
||||||
info "----------------------------------------------"
|
|
||||||
|
|
||||||
###################################
|
|
||||||
# Prints output report if enabled #
|
|
||||||
###################################
|
|
||||||
if [ -z "${FORMAT_REPORT}" ]; then
|
|
||||||
info "Reports generated in folder ${REPORT_OUTPUT_FOLDER}"
|
|
||||||
#############################################
|
|
||||||
# Print info on reports that were generated #
|
|
||||||
#############################################
|
|
||||||
if [ -d "${REPORT_OUTPUT_FOLDER}" ]; then
|
|
||||||
info "Contents of report folder:"
|
|
||||||
OUTPUT_CONTENTS_CMD=$(ls "${REPORT_OUTPUT_FOLDER}")
|
|
||||||
info "$OUTPUT_CONTENTS_CMD"
|
|
||||||
else
|
|
||||||
warn "Report output folder (${REPORT_OUTPUT_FOLDER}) does NOT exist."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
################################
|
|
||||||
# Prints for warnings if found #
|
|
||||||
################################
|
|
||||||
for TEST in "${WARNING_ARRAY_TEST[@]}"; do
|
|
||||||
warn "Expected file to compare with was not found for ${TEST}"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function Footer ###########################################################
|
#### Function Footer ###########################################################
|
||||||
Footer() {
|
Footer() {
|
||||||
info "----------------------------------------------"
|
info "----------------------------------------------"
|
||||||
|
@ -1052,6 +587,7 @@ Footer() {
|
||||||
# Need to clean up the lanuage array of duplicates #
|
# Need to clean up the lanuage array of duplicates #
|
||||||
####################################################
|
####################################################
|
||||||
mapfile -t UNIQUE_LINTED_ARRAY < <(for LANG in "${LINTED_LANGUAGES_ARRAY[@]}"; do echo "${LANG}"; done | sort -u)
|
mapfile -t UNIQUE_LINTED_ARRAY < <(for LANG in "${LINTED_LANGUAGES_ARRAY[@]}"; do echo "${LANG}"; done | sort -u)
|
||||||
|
export UNIQUE_LINTED_ARRAY # Workaround SC2034
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# Prints for errors if found #
|
# Prints for errors if found #
|
||||||
|
@ -1118,31 +654,6 @@ Footer() {
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
################################################################################
|
################################################################################
|
||||||
#### Function CheckInArray #####################################################
|
|
||||||
CheckInArray() {
|
|
||||||
###############
|
|
||||||
# Pull in Var #
|
|
||||||
###############
|
|
||||||
NEEDLE="$1" # Language we need to match
|
|
||||||
|
|
||||||
######################################
|
|
||||||
# Check if Language was in the array #
|
|
||||||
######################################
|
|
||||||
for LANG in "${UNIQUE_LINTED_ARRAY[@]}"; do
|
|
||||||
if [[ "${LANG}" == "${NEEDLE}" ]]; then
|
|
||||||
############
|
|
||||||
# Found it #
|
|
||||||
############
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
###################
|
|
||||||
# Did not find it #
|
|
||||||
###################
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
################################################################################
|
|
||||||
#### Function Cleanup ##########################################################
|
#### Function Cleanup ##########################################################
|
||||||
cleanup() {
|
cleanup() {
|
||||||
local -ri EXIT_CODE=$?
|
local -ri EXIT_CODE=$?
|
||||||
|
|
Loading…
Reference in a new issue