diff --git a/.automation/cleanup-docker.sh b/.automation/cleanup-docker.sh index 8f03a2df..ab0bb546 100755 --- a/.automation/cleanup-docker.sh +++ b/.automation/cleanup-docker.sh @@ -16,20 +16,19 @@ ########### # Globals # ########### -GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # GitHub Workspace -DOCKER_USERNAME="${DOCKER_USERNAME}" # Username to login to DockerHub -DOCKER_PASSWORD="${DOCKER_PASSWORD}" # Password to login to DockerHub -IMAGE_REPO="${IMAGE_REPO}" # Image repo to upload the image -IMAGE_VERSION="${IMAGE_VERSION}" # Version to tag the image -DOCKERFILE_PATH="${DOCKERFILE_PATH}" # Path to the Dockerfile to be uploaded +GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # GitHub Workspace +DOCKER_USERNAME="${DOCKER_USERNAME}" # Username to login to DockerHub +DOCKER_PASSWORD="${DOCKER_PASSWORD}" # Password to login to DockerHub +IMAGE_REPO="${IMAGE_REPO}" # Image repo to upload the image +IMAGE_VERSION="${IMAGE_VERSION}" # Version to tag the image +DOCKERFILE_PATH="${DOCKERFILE_PATH}" # Path to the Dockerfile to be uploaded ################################################################################ ############################ FUNCTIONS BELOW ################################### ################################################################################ ################################################################################ #### Function Header ########################################################### -Header() -{ +Header() { echo "" echo "-------------------------------------------------------" echo "----- GitHub Actions remove image from DockerHub ------" @@ -38,8 +37,7 @@ Header() } ################################################################################ #### Function ValidateInput #################################################### -ValidateInput() -{ +ValidateInput() { # Need to validate we have the basic variables ################ # Print header # @@ -69,7 +67,7 @@ ValidateInput() echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [IMAGE_REPO]!${NC}" echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$IMAGE_REPO]${NC}" exit 1 - elif [[ "$IMAGE_REPO" == "github/super-linter" ]]; then + elif [[ $IMAGE_REPO == "github/super-linter" ]]; then # Found our main repo echo "Successfully found:[IMAGE_REPO], value:[$IMAGE_REPO]" else @@ -114,7 +112,7 @@ ValidateInput() ################################################## # Check if we need to get the name of the branch # ################################################## - if [[ "$IMAGE_VERSION" != "latest" ]]; then + if [[ $IMAGE_VERSION != "latest" ]]; then ################################## # Remove non alpha-numeric chars # ################################## @@ -131,8 +129,7 @@ ValidateInput() } ################################################################################ #### Function LoginToDocker #################################################### -LoginToDocker() -{ +LoginToDocker() { ################ # Print header # ################ @@ -167,8 +164,7 @@ LoginToDocker() } ################################################################################ #### Function RemoveImage ###################################################### -RemoveImage() -{ +RemoveImage() { ################ # Print header # ################ @@ -187,23 +183,23 @@ RemoveImage() -d "{\"username\": \"$DOCKER_USERNAME\", \"password\": \"$DOCKER_PASSWORD\"}" \ "https://hub.docker.com/v2/users/login/" | jq -r .token 2>&1) - ####################### - # Load the ERROR_CODE # - ####################### - ERROR_CODE=$? + ####################### + # Load the ERROR_CODE # + ####################### + ERROR_CODE=$? - ############################## - # Check the shell for errors # - ############################## - if [ $ERROR_CODE -ne 0 ]; then - # ERROR - echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to gain token from DockerHub!${NC}" - echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$TOKEN]${NC}" - exit 1 - else - # SUCCESS - echo "Successfully gained auth token from DockerHub!" - fi + ############################## + # Check the shell for errors # + ############################## + if [ $ERROR_CODE -ne 0 ]; then + # ERROR + echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to gain token from DockerHub!${NC}" + echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$TOKEN]${NC}" + exit 1 + else + # SUCCESS + echo "Successfully gained auth token from DockerHub!" + fi ################################# # Remove the tag from DockerHub # @@ -232,8 +228,7 @@ RemoveImage() } ################################################################################ #### Function Footer ########################################################### -Footer() -{ +Footer() { echo "" echo "-------------------------------------------------------" echo "The step has completed" diff --git a/.automation/upload-docker.sh b/.automation/upload-docker.sh index f57ec068..1c982c63 100755 --- a/.automation/upload-docker.sh +++ b/.automation/upload-docker.sh @@ -17,25 +17,24 @@ ########### # Globals # ########### -GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # GitHub Workspace -DOCKER_USERNAME="${DOCKER_USERNAME}" # Username to login to DockerHub -DOCKER_PASSWORD="${DOCKER_PASSWORD}" # Password to login to DockerHub -GPR_USERNAME="${GPR_USERNAME}" # Username to login to GitHub package registry -GPR_TOKEN="${GPR_TOKEN}" # Password to login to GitHub package registry -REGISTRY="${REGISTRY}" # What registry to upload | or -IMAGE_REPO="${IMAGE_REPO}" # Image repo to upload the image -IMAGE_VERSION="${IMAGE_VERSION}" # Version to tag the image -DOCKERFILE_PATH="${DOCKERFILE_PATH}" # Path to the Dockerfile to be uploaded -MAJOR_TAG='' # Major tag version if we need to update it -UPDATE_MAJOR_TAG=0 # Flag to deploy the major tag version as well +GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # GitHub Workspace +DOCKER_USERNAME="${DOCKER_USERNAME}" # Username to login to DockerHub +DOCKER_PASSWORD="${DOCKER_PASSWORD}" # Password to login to DockerHub +GPR_USERNAME="${GPR_USERNAME}" # Username to login to GitHub package registry +GPR_TOKEN="${GPR_TOKEN}" # Password to login to GitHub package registry +REGISTRY="${REGISTRY}" # What registry to upload | or +IMAGE_REPO="${IMAGE_REPO}" # Image repo to upload the image +IMAGE_VERSION="${IMAGE_VERSION}" # Version to tag the image +DOCKERFILE_PATH="${DOCKERFILE_PATH}" # Path to the Dockerfile to be uploaded +MAJOR_TAG='' # Major tag version if we need to update it +UPDATE_MAJOR_TAG=0 # Flag to deploy the major tag version as well ################################################################################ ############################ FUNCTIONS BELOW ################################### ################################################################################ ################################################################################ #### Function Header ########################################################### -Header() -{ +Header() { echo "" echo "-------------------------------------------------------" echo "---- GitHub Actions Upload image to [$REGISTRY] ----" @@ -44,8 +43,7 @@ Header() } ################################################################################ #### Function ValidateInput #################################################### -ValidateInput() -{ +ValidateInput() { # Need to validate we have the basic variables ################ # Print header # @@ -81,7 +79,7 @@ ValidateInput() ##################################################### # See if we need values for GitHub package Registry # ##################################################### - if [[ "$REGISTRY" == "GPR" ]]; then + if [[ $REGISTRY == "GPR" ]]; then ######################### # Validate GPR_USERNAME # ######################### @@ -106,7 +104,7 @@ ValidateInput() ######################################## # See if we need values for Ducker hub # ######################################## - elif [[ "$REGISTRY" == "Docker" ]]; then + elif [[ $REGISTRY == "Docker" ]]; then ############################ # Validate DOCKER_USERNAME # ############################ @@ -137,7 +135,6 @@ ValidateInput() exit 1 fi - ####################### # Validate IMAGE_REPO # ####################### @@ -150,7 +147,7 @@ ValidateInput() ############################################### # Need to see if GPR registry and update name # ############################################### - if [[ "$REGISTRY" == "GPR" ]]; then + if [[ $REGISTRY == "GPR" ]]; then NAME="docker.pkg.github.com/$IMAGE_REPO/super-linter" IMAGE_REPO="$NAME" echo "Updated [IMAGE_REPO] to:[$IMAGE_REPO] for GPR" @@ -166,7 +163,7 @@ ValidateInput() ############################## # Get the name of the branch # ############################## - BRANCH_NAME=$(git -C "$GITHUB_WORKSPACE" branch --contains "$GITHUB_SHA" |awk '{print $2}' 2>&1) + BRANCH_NAME=$(git -C "$GITHUB_WORKSPACE" branch --contains "$GITHUB_SHA" | awk '{print $2}' 2>&1) ####################### # Load the error code # @@ -204,7 +201,7 @@ ValidateInput() ###################################################################### # Check if this is a latest to a versioned release at create new tag # ###################################################################### - if [[ "$IMAGE_VERSION" =~ $REGEX ]]; then + if [[ $IMAGE_VERSION =~ $REGEX ]]; then # Need to get the major version, and set flag to update ##################### @@ -233,15 +230,14 @@ ValidateInput() } ################################################################################ #### Function Authenticate ##################################################### -Authenticate() -{ +Authenticate() { ################ # Pull in Vars # ################ - USERNAME="$1" # Name to auth with - PASSWORD="$2" # Password to auth with - URL="$3" # Url to auth towards - NAME="$4" # name of the service + USERNAME="$1" # Name to auth with + PASSWORD="$2" # Password to auth with + URL="$3" # Url to auth towards + NAME="$4" # name of the service ################ # Print header # @@ -277,8 +273,7 @@ Authenticate() } ################################################################################ #### Function BuildImage ####################################################### -BuildImage() -{ +BuildImage() { ################ # Print header # ################ @@ -348,8 +343,7 @@ BuildImage() } ################################################################################ #### Function UploadImage ###################################################### -UploadImage() -{ +UploadImage() { ################ # Print header # ################ @@ -450,8 +444,7 @@ UploadImage() } ################################################################################ #### Function Footer ########################################################### -Footer() -{ +Footer() { echo "" echo "-------------------------------------------------------" echo "The step has completed" @@ -480,14 +473,14 @@ BuildImage ###################### # Login to DockerHub # ###################### -if [[ "$REGISTRY" == "Docker" ]]; then +if [[ $REGISTRY == "Docker" ]]; then # Authenticate "Username" "Password" "Url" "Name" Authenticate "$DOCKER_USERNAME" "$DOCKER_PASSWORD" "" "Dockerhub" #################################### # Login to GitHub Package Registry # #################################### -elif [[ "$REGISTRY" == "GPR" ]]; then +elif [[ $REGISTRY == "GPR" ]]; then # Authenticate "Username" "Password" "Url" "Name" Authenticate "$GPR_USERNAME" "$GPR_TOKEN" "https://docker.pkg.github.com" "GitHub Package Registry" diff --git a/lib/buildFileList.sh b/lib/buildFileList.sh index 8f7d6e95..7334b447 100755 --- a/lib/buildFileList.sh +++ b/lib/buildFileList.sh @@ -9,15 +9,14 @@ ################################################################################ ################################################################################ #### Function BuildFileList #################################################### -function BuildFileList() -{ +function BuildFileList() { # Need to build a list of all files changed # This can be pulled from the GITHUB_EVENT_PATH payload ################ # print header # ################ - if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then + if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then echo "" echo "----------------------------------------------" echo "Pulling in code history and branches..." @@ -26,7 +25,10 @@ function BuildFileList() ################################################################################# # 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) + SWITCH_CMD=$( + git -C "$GITHUB_WORKSPACE" pull --quiet + git -C "$GITHUB_WORKSPACE" checkout "$DEFAULT_BRANCH" 2>&1 + ) ####################### # Load the error code # @@ -46,7 +48,7 @@ function BuildFileList() ################ # print header # ################ - if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then + if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then echo "" echo "----------------------------------------------" echo "Generating Diff with:[git diff --name-only '$DEFAULT_BRANCH..$GITHUB_SHA' --diff-filter=d]" @@ -78,8 +80,7 @@ function BuildFileList() echo "" echo "----------------------------------------------" echo "Files that have been modified in the commit(s):" - for FILE in "${RAW_FILE_ARRAY[@]}" - do + for FILE in "${RAW_FILE_ARRAY[@]}"; do ############## # Print file # ############## @@ -371,7 +372,7 @@ function BuildFileList() ################# # Check if bash # ################# - if [[ "$GET_FILE_TYPE_CMD" == *"Bourne-Again shell script"* ]]; then + if [[ $GET_FILE_TYPE_CMD == *"Bourne-Again shell script"* ]]; then ####################### # It is a bash script # ####################### @@ -385,7 +386,7 @@ function BuildFileList() # Set the READ_ONLY_CHANGE_FLAG since this could be exec # ########################################################## READ_ONLY_CHANGE_FLAG=1 - elif [[ "$GET_FILE_TYPE_CMD" == *"Ruby script"* ]]; then + elif [[ $GET_FILE_TYPE_CMD == *"Ruby script"* ]]; then ####################### # It is a Ruby script # ####################### @@ -412,7 +413,7 @@ function BuildFileList() fi done - echo ${READ_ONLY_CHANGE_FLAG} > /dev/null 2>&1 || true # Workaround SC2034 + echo ${READ_ONLY_CHANGE_FLAG} > /dev/null 2>&1 || true # Workaround SC2034 ######################################### # Need to switch back to branch of code # diff --git a/lib/linter.sh b/lib/linter.sh index c3fbb93f..8f63e45c 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -10,35 +10,35 @@ # Source Function Files # ######################### # shellcheck source=/dev/null -source /action/lib/termColors.sh # Source the function script(s) +source /action/lib/termColors.sh # Source the function script(s) # shellcheck source=/dev/null -source /action/lib/buildFileList.sh # Source the function script(s) +source /action/lib/buildFileList.sh # Source the function script(s) # shellcheck source=/dev/null -source /action/lib/validation.sh # Source the function script(s) +source /action/lib/validation.sh # Source the function script(s) # shellcheck source=/dev/null -source /action/lib/worker.sh # Source the function script(s) +source /action/lib/worker.sh # Source the function script(s) ########### # GLOBALS # ########### # Default Vars -DEFAULT_RULES_LOCATION='/action/lib/.automation' # Default rules files location -LINTER_RULES_PATH="${LINTER_RULES_PATH:-.github/linters}" # Linter Path Directory +DEFAULT_RULES_LOCATION='/action/lib/.automation' # Default rules files location +LINTER_RULES_PATH="${LINTER_RULES_PATH:-.github/linters}" # Linter Path Directory # YAML Vars -YAML_FILE_NAME='.yaml-lint.yml' # Name of the file -YAML_LINTER_RULES="$DEFAULT_RULES_LOCATION/$YAML_FILE_NAME" # Path to the yaml lint rules +YAML_FILE_NAME='.yaml-lint.yml' # Name of the file +YAML_LINTER_RULES="$DEFAULT_RULES_LOCATION/$YAML_FILE_NAME" # Path to the yaml lint rules # MD Vars -MD_FILE_NAME='.markdown-lint.yml' # Name of the file -MD_LINTER_RULES="$DEFAULT_RULES_LOCATION/$MD_FILE_NAME" # Path to the markdown lint rules +MD_FILE_NAME='.markdown-lint.yml' # Name of the file +MD_LINTER_RULES="$DEFAULT_RULES_LOCATION/$MD_FILE_NAME" # Path to the markdown lint rules # Python Vars -PYTHON_FILE_NAME='.python-lint' # Name of the file -PYTHON_LINTER_RULES="$DEFAULT_RULES_LOCATION/$PYTHON_FILE_NAME" # Path to the python lint rules +PYTHON_FILE_NAME='.python-lint' # Name of the file +PYTHON_LINTER_RULES="$DEFAULT_RULES_LOCATION/$PYTHON_FILE_NAME" # Path to the python lint rules # Cloudformation Vars -CFN_FILE_NAME='.cfnlintrc.yml' # Name of the file -CFN_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CFN_FILE_NAME" # Path to the python lint rules +CFN_FILE_NAME='.cfnlintrc.yml' # Name of the file +CFN_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CFN_FILE_NAME" # Path to the python lint rules # Ruby Vars -RUBY_FILE_NAME="${RUBY_CONFIG_FILE:-.ruby-lint.yml}" # Name of the file -RUBY_LINTER_RULES="$DEFAULT_RULES_LOCATION/$RUBY_FILE_NAME" # Path to the ruby lint rules +RUBY_FILE_NAME="${RUBY_CONFIG_FILE:-.ruby-lint.yml}" # Name of the file +RUBY_LINTER_RULES="$DEFAULT_RULES_LOCATION/$RUBY_FILE_NAME" # Path to the ruby lint rules # Coffee Vars COFFEESCRIPT_FILE_NAME='.coffee-lint.json' # Name of the file COFFEESCRIPT_LINTER_RULES="$DEFAULT_RULES_LOCATION/$COFFEESCRIPT_FILE_NAME" # Path to the coffeescript lint rules @@ -51,29 +51,29 @@ TYPESCRIPT_FILE_NAME="${TYPESCRIPT_ES_CONFIG_FILE:-.eslintrc.yml}" # Name o TYPESCRIPT_LINTER_RULES="$DEFAULT_RULES_LOCATION/$TYPESCRIPT_FILE_NAME" # Path to the Typescript lint rules TYPESCRIPT_STANDARD_LINTER_RULES='' # ENV string to pass when running js standard # Ansible Vars -ANSIBLE_FILE_NAME='.ansible-lint.yml' # Name of the file -ANSIBLE_LINTER_RULES="$DEFAULT_RULES_LOCATION/$ANSIBLE_FILE_NAME" # Path to the Ansible lint rules +ANSIBLE_FILE_NAME='.ansible-lint.yml' # Name of the file +ANSIBLE_LINTER_RULES="$DEFAULT_RULES_LOCATION/$ANSIBLE_FILE_NAME" # Path to the Ansible lint rules # Docker Vars -DOCKER_FILE_NAME='.dockerfilelintrc' # Name of the file -DOCKER_LINTER_RULES="$DEFAULT_RULES_LOCATION/$DOCKER_FILE_NAME" # Path to the Docker lint rules +DOCKER_FILE_NAME='.dockerfilelintrc' # Name of the file +DOCKER_LINTER_RULES="$DEFAULT_RULES_LOCATION/$DOCKER_FILE_NAME" # Path to the Docker lint rules # Golang Vars -GO_FILE_NAME='.golangci.yml' # Name of the file -GO_LINTER_RULES="$DEFAULT_RULES_LOCATION/$GO_FILE_NAME" # Path to the Go lint rules +GO_FILE_NAME='.golangci.yml' # Name of the file +GO_LINTER_RULES="$DEFAULT_RULES_LOCATION/$GO_FILE_NAME" # Path to the Go lint rules # Terraform Vars -TERRAFORM_FILE_NAME='.tflint.hcl' # Name of the file -TERRAFORM_LINTER_RULES="$DEFAULT_RULES_LOCATION/$TERRAFORM_FILE_NAME" # Path to the Terraform lint rules +TERRAFORM_FILE_NAME='.tflint.hcl' # Name of the file +TERRAFORM_LINTER_RULES="$DEFAULT_RULES_LOCATION/$TERRAFORM_FILE_NAME" # Path to the Terraform lint rules # Powershell Vars -POWERSHELL_FILE_NAME='.powershell-psscriptanalyzer.psd1' # Name of the file -POWERSHELL_LINTER_RULES="$DEFAULT_RULES_LOCATION/$POWERSHELL_FILE_NAME" # Path to the Powershell lint rules +POWERSHELL_FILE_NAME='.powershell-psscriptanalyzer.psd1' # Name of the file +POWERSHELL_LINTER_RULES="$DEFAULT_RULES_LOCATION/$POWERSHELL_FILE_NAME" # Path to the Powershell lint rules # CSS Vars -CSS_FILE_NAME='.stylelintrc.json' # Name of the file -CSS_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CSS_FILE_NAME" # Path to the CSS lint rules +CSS_FILE_NAME='.stylelintrc.json' # Name of the file +CSS_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CSS_FILE_NAME" # Path to the CSS lint rules # OpenAPI Vars -OPENAPI_FILE_NAME='.openapirc.yml' # Name of the file -OPENAPI_LINTER_RULES="$DEFAULT_RULES_LOCATION/$OPENAPI_FILE_NAME" # Path to the OpenAPI lint rules +OPENAPI_FILE_NAME='.openapirc.yml' # Name of the file +OPENAPI_LINTER_RULES="$DEFAULT_RULES_LOCATION/$OPENAPI_FILE_NAME" # Path to the OpenAPI lint rules # Protocol Buffers Vars -PROTOBUF_FILE_NAME='.protolintrc.yml' # Name of the file -PROTOBUF_LINTER_RULES="$DEFAULT_RULES_LOCATION/$PROTOBUF_FILE_NAME" # Path to the Protocol Buffers lint rules +PROTOBUF_FILE_NAME='.protolintrc.yml' # Name of the file +PROTOBUF_LINTER_RULES="$DEFAULT_RULES_LOCATION/$PROTOBUF_FILE_NAME" # Path to the Protocol Buffers lint rules # Clojure Vars CLOJURE_FILE_NAME='.clj-kondo/config.edn' CLOJURE_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CLOJURE_FILE_NAME" @@ -98,135 +98,134 @@ LANGUAGE_ARRAY=('YML' 'JSON' 'XML' 'MARKDOWN' 'BASH' 'PERL' 'PHP' 'RUBY' 'PYTHON ################### # GitHub ENV Vars # ################### -GITHUB_SHA="${GITHUB_SHA}" # GitHub sha from the commit -GITHUB_EVENT_PATH="${GITHUB_EVENT_PATH}" # Github Event Path -GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # Github Workspace -DEFAULT_BRANCH="${DEFAULT_BRANCH:-master}" # Default Git Branch to use (master by default) -ANSIBLE_DIRECTORY="${ANSIBLE_DIRECTORY}" # Ansible Directory -VALIDATE_ALL_CODEBASE="${VALIDATE_ALL_CODEBASE}" # Boolean to validate all files -VALIDATE_YAML="${VALIDATE_YAML}" # Boolean to validate language -VALIDATE_JSON="${VALIDATE_JSON}" # Boolean to validate language -VALIDATE_XML="${VALIDATE_XML}" # Boolean to validate language -VALIDATE_MD="${VALIDATE_MD}" # Boolean to validate language -VALIDATE_BASH="${VALIDATE_BASH}" # Boolean to validate language -VALIDATE_PERL="${VALIDATE_PERL}" # Boolean to validate language -VALIDATE_PHP="${VALIDATE_PHP}" # Boolean to validate language -VALIDATE_PYTHON="${VALIDATE_PYTHON}" # Boolean to validate language -VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION}" # Boolean to validate language -VALIDATE_RUBY="${VALIDATE_RUBY}" # Boolean to validate language -VALIDATE_COFFEE="${VALIDATE_COFFEE}" # Boolean to validate language -VALIDATE_ANSIBLE="${VALIDATE_ANSIBLE}" # Boolean to validate language -VALIDATE_JAVASCRIPT_ES="${VALIDATE_JAVASCRIPT_ES}" # Boolean to validate language -VALIDATE_JAVASCRIPT_STANDARD="${VALIDATE_JAVASCRIPT_STANDARD}" # Boolean to validate language -VALIDATE_TYPESCRIPT_ES="${VALIDATE_TYPESCRIPT_ES}" # Boolean to validate language -VALIDATE_TYPESCRIPT_STANDARD="${VALIDATE_TYPESCRIPT_STANDARD}" # Boolean to validate language -VALIDATE_DOCKER="${VALIDATE_DOCKER}" # Boolean to validate language -VALIDATE_GO="${VALIDATE_GO}" # Boolean to validate language -VALIDATE_CSS="${VALIDATE_CSS}" # Boolean to validate language -VALIDATE_ENV="${VALIDATE_ENV}" # Boolean to validate language -VALIDATE_CLOJURE="${VALIDATE_CLOJURE}" # Boolean to validate language -VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM}" # Boolean to validate language -VALIDATE_POWERSHELL="${VALIDATE_POWERSHELL}" # Boolean to validate language -VALIDATE_KOTLIN="${VALIDATE_KOTLIN}" # Boolean to validate language -VALIDATE_OPENAPI="${VALIDATE_OPENAPI}" # Boolean to validate language -TEST_CASE_RUN="${TEST_CASE_RUN}" # Boolean to validate only test cases -DISABLE_ERRORS="${DISABLE_ERRORS}" # Boolean to enable warning-only output without throwing errors +GITHUB_SHA="${GITHUB_SHA}" # GitHub sha from the commit +GITHUB_EVENT_PATH="${GITHUB_EVENT_PATH}" # Github Event Path +GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # Github Workspace +DEFAULT_BRANCH="${DEFAULT_BRANCH:-master}" # Default Git Branch to use (master by default) +ANSIBLE_DIRECTORY="${ANSIBLE_DIRECTORY}" # Ansible Directory +VALIDATE_ALL_CODEBASE="${VALIDATE_ALL_CODEBASE}" # Boolean to validate all files +VALIDATE_YAML="${VALIDATE_YAML}" # Boolean to validate language +VALIDATE_JSON="${VALIDATE_JSON}" # Boolean to validate language +VALIDATE_XML="${VALIDATE_XML}" # Boolean to validate language +VALIDATE_MD="${VALIDATE_MD}" # Boolean to validate language +VALIDATE_BASH="${VALIDATE_BASH}" # Boolean to validate language +VALIDATE_PERL="${VALIDATE_PERL}" # Boolean to validate language +VALIDATE_PHP="${VALIDATE_PHP}" # Boolean to validate language +VALIDATE_PYTHON="${VALIDATE_PYTHON}" # Boolean to validate language +VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION}" # Boolean to validate language +VALIDATE_RUBY="${VALIDATE_RUBY}" # Boolean to validate language +VALIDATE_COFFEE="${VALIDATE_COFFEE}" # Boolean to validate language +VALIDATE_ANSIBLE="${VALIDATE_ANSIBLE}" # Boolean to validate language +VALIDATE_JAVASCRIPT_ES="${VALIDATE_JAVASCRIPT_ES}" # Boolean to validate language +VALIDATE_JAVASCRIPT_STANDARD="${VALIDATE_JAVASCRIPT_STANDARD}" # Boolean to validate language +VALIDATE_TYPESCRIPT_ES="${VALIDATE_TYPESCRIPT_ES}" # Boolean to validate language +VALIDATE_TYPESCRIPT_STANDARD="${VALIDATE_TYPESCRIPT_STANDARD}" # Boolean to validate language +VALIDATE_DOCKER="${VALIDATE_DOCKER}" # Boolean to validate language +VALIDATE_GO="${VALIDATE_GO}" # Boolean to validate language +VALIDATE_CSS="${VALIDATE_CSS}" # Boolean to validate language +VALIDATE_ENV="${VALIDATE_ENV}" # Boolean to validate language +VALIDATE_CLOJURE="${VALIDATE_CLOJURE}" # Boolean to validate language +VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM}" # Boolean to validate language +VALIDATE_POWERSHELL="${VALIDATE_POWERSHELL}" # Boolean to validate language +VALIDATE_KOTLIN="${VALIDATE_KOTLIN}" # Boolean to validate language +VALIDATE_OPENAPI="${VALIDATE_OPENAPI}" # Boolean to validate language +TEST_CASE_RUN="${TEST_CASE_RUN}" # Boolean to validate only test cases +DISABLE_ERRORS="${DISABLE_ERRORS}" # Boolean to enable warning-only output without throwing errors ############## # Debug Vars # ############## -RUN_LOCAL="${RUN_LOCAL}" # Boolean to see if we are running locally -ACTIONS_RUNNER_DEBUG="${ACTIONS_RUNNER_DEBUG:-false}" # Boolean to see even more info (debug) +RUN_LOCAL="${RUN_LOCAL}" # Boolean to see if we are running locally +ACTIONS_RUNNER_DEBUG="${ACTIONS_RUNNER_DEBUG:-false}" # Boolean to see even more info (debug) ################ # Default Vars # ################ -DEFAULT_VALIDATE_ALL_CODEBASE='true' # Default value for validate all files -DEFAULT_WORKSPACE="${DEFAULT_WORKSPACE:-/tmp/lint}" # Default workspace if running locally -DEFAULT_RUN_LOCAL='false' # Default value for debugging locally -DEFAULT_TEST_CASE_RUN='false' # Flag to tell code to run only test cases -DEFAULT_IFS="$IFS" # Get the Default IFS for updating +DEFAULT_VALIDATE_ALL_CODEBASE='true' # Default value for validate all files +DEFAULT_WORKSPACE="${DEFAULT_WORKSPACE:-/tmp/lint}" # Default workspace if running locally +DEFAULT_RUN_LOCAL='false' # Default value for debugging locally +DEFAULT_TEST_CASE_RUN='false' # Flag to tell code to run only test cases +DEFAULT_IFS="$IFS" # Get the Default IFS for updating ############################################################### # Default Vars that are called in Subs and need to be ignored # ############################################################### -DEFAULT_DISABLE_ERRORS='false' # Default to enabling errors -echo "${DEFAULT_DISABLE_ERRORS}" > /dev/null 2>&1 || true # Workaround SC2034 -RAW_FILE_ARRAY=() # Array of all files that were changed -echo "${RAW_FILE_ARRAY[*]}" > /dev/null 2>&1 || true # Workaround SC2034 -READ_ONLY_CHANGE_FLAG=0 # Flag set to 1 if files changed are not txt or md -echo "${READ_ONLY_CHANGE_FLAG}" > /dev/null 2>&1 || true # Workaround SC2034 -TEST_CASE_FOLDER='.automation/test' # Folder for test cases we should always ignore -echo "${TEST_CASE_FOLDER}" > /dev/null 2>&1 || true # Workaround SC2034 -DEFAULT_ANSIBLE_DIRECTORY="$GITHUB_WORKSPACE/ansible" # Default Ansible Directory +DEFAULT_DISABLE_ERRORS='false' # Default to enabling errors +echo "${DEFAULT_DISABLE_ERRORS}" > /dev/null 2>&1 || true # Workaround SC2034 +RAW_FILE_ARRAY=() # Array of all files that were changed +echo "${RAW_FILE_ARRAY[*]}" > /dev/null 2>&1 || true # Workaround SC2034 +READ_ONLY_CHANGE_FLAG=0 # Flag set to 1 if files changed are not txt or md +echo "${READ_ONLY_CHANGE_FLAG}" > /dev/null 2>&1 || true # Workaround SC2034 +TEST_CASE_FOLDER='.automation/test' # Folder for test cases we should always ignore +echo "${TEST_CASE_FOLDER}" > /dev/null 2>&1 || true # Workaround SC2034 +DEFAULT_ANSIBLE_DIRECTORY="$GITHUB_WORKSPACE/ansible" # Default Ansible Directory echo "${DEFAULT_ANSIBLE_DIRECTORY}" > /dev/null 2>&1 || true # Workaround SC2034 ########################## # Array of changed files # ########################## -FILE_ARRAY_YML=() # Array of files to check -FILE_ARRAY_JSON=() # Array of files to check -FILE_ARRAY_XML=() # Array of files to check -FILE_ARRAY_MD=() # Array of files to check -FILE_ARRAY_BASH=() # Array of files to check -FILE_ARRAY_PERL=() # Array of files to check -FILE_ARRAY_PHP=() # Array of files to check -FILE_ARRAY_RUBY=() # Array of files to check -FILE_ARRAY_PYTHON=() # Array of files to check -FILE_ARRAY_CFN=() # Array of files to check -FILE_ARRAY_COFFEESCRIPT=() # Array of files to check -FILE_ARRAY_JAVASCRIPT_ES=() # Array of files to check -FILE_ARRAY_JAVASCRIPT_STANDARD=() # Array of files to check -FILE_ARRAY_TYPESCRIPT_ES=() # Array of files to check -FILE_ARRAY_TYPESCRIPT_STANDARD=() # Array of files to check -FILE_ARRAY_DOCKER=() # Array of files to check -FILE_ARRAY_GO=() # Array of files to check -FILE_ARRAY_TERRAFORM=() # Array of files to check -FILE_ARRAY_POWERSHELL=() # Array of files to check -FILE_ARRAY_CSS=() # Array of files to check -FILE_ARRAY_ENV=() # Array of files to check -FILE_ARRAY_CLOJURE=() # Array of files to check -FILE_ARRAY_KOTLIN=() # Array of files to check -FILE_ARRAY_PROTOBUF=() # Array of files to check -FILE_ARRAY_OPENAPI=() # Array of files to check +FILE_ARRAY_YML=() # Array of files to check +FILE_ARRAY_JSON=() # Array of files to check +FILE_ARRAY_XML=() # Array of files to check +FILE_ARRAY_MD=() # Array of files to check +FILE_ARRAY_BASH=() # Array of files to check +FILE_ARRAY_PERL=() # Array of files to check +FILE_ARRAY_PHP=() # Array of files to check +FILE_ARRAY_RUBY=() # Array of files to check +FILE_ARRAY_PYTHON=() # Array of files to check +FILE_ARRAY_CFN=() # Array of files to check +FILE_ARRAY_COFFEESCRIPT=() # Array of files to check +FILE_ARRAY_JAVASCRIPT_ES=() # Array of files to check +FILE_ARRAY_JAVASCRIPT_STANDARD=() # Array of files to check +FILE_ARRAY_TYPESCRIPT_ES=() # Array of files to check +FILE_ARRAY_TYPESCRIPT_STANDARD=() # Array of files to check +FILE_ARRAY_DOCKER=() # Array of files to check +FILE_ARRAY_GO=() # Array of files to check +FILE_ARRAY_TERRAFORM=() # Array of files to check +FILE_ARRAY_POWERSHELL=() # Array of files to check +FILE_ARRAY_CSS=() # Array of files to check +FILE_ARRAY_ENV=() # Array of files to check +FILE_ARRAY_CLOJURE=() # Array of files to check +FILE_ARRAY_KOTLIN=() # Array of files to check +FILE_ARRAY_PROTOBUF=() # Array of files to check +FILE_ARRAY_OPENAPI=() # Array of files to check ############ # Counters # ############ -ERRORS_FOUND_YML=0 # Count of errors found -ERRORS_FOUND_JSON=0 # Count of errors found -ERRORS_FOUND_XML=0 # Count of errors found -ERRORS_FOUND_MARKDOWN=0 # Count of errors found -ERRORS_FOUND_BASH=0 # Count of errors found -ERRORS_FOUND_PERL=0 # Count of errors found -ERRORS_FOUND_PHP=0 # Count of errors found -ERRORS_FOUND_RUBY=0 # Count of errors found -ERRORS_FOUND_PYTHON=0 # Count of errors found -ERRORS_FOUND_CFN=0 # Count of errors found -ERRORS_FOUND_COFFEESCRIPT=0 # Count of errors found -ERRORS_FOUND_ANSIBLE=0 # Count of errors found -ERRORS_FOUND_JAVASCRIPT_STANDARD=0 # Count of errors found -ERRORS_FOUND_JAVASCRIPT_ES=0 # Count of errors found -ERRORS_FOUND_TYPESCRIPT_STANDARD=0 # Count of errors found -ERRORS_FOUND_TYPESCRIPT_ES=0 # Count of errors found -ERRORS_FOUND_DOCKER=0 # Count of errors found -ERRORS_FOUND_GO=0 # Count of errors found -ERRORS_FOUND_TERRAFORM=0 # Count of errors found -ERRORS_FOUND_POWERSHELL=0 # Count of errors found -ERRORS_FOUND_CSS=0 # Count of errors found -ERRORS_FOUND_ENV=0 # Count of errors found -ERRORS_FOUND_CLOJURE=0 # Count of errors found -ERRORS_FOUND_KOTLIN=0 # Count of errors found -ERRORS_FOUND_PROTOBUF=0 # Count of errors found -ERRORS_FOUND_OPENAPI=0 # Count of errors found +ERRORS_FOUND_YML=0 # Count of errors found +ERRORS_FOUND_JSON=0 # Count of errors found +ERRORS_FOUND_XML=0 # Count of errors found +ERRORS_FOUND_MARKDOWN=0 # Count of errors found +ERRORS_FOUND_BASH=0 # Count of errors found +ERRORS_FOUND_PERL=0 # Count of errors found +ERRORS_FOUND_PHP=0 # Count of errors found +ERRORS_FOUND_RUBY=0 # Count of errors found +ERRORS_FOUND_PYTHON=0 # Count of errors found +ERRORS_FOUND_CFN=0 # Count of errors found +ERRORS_FOUND_COFFEESCRIPT=0 # Count of errors found +ERRORS_FOUND_ANSIBLE=0 # Count of errors found +ERRORS_FOUND_JAVASCRIPT_STANDARD=0 # Count of errors found +ERRORS_FOUND_JAVASCRIPT_ES=0 # Count of errors found +ERRORS_FOUND_TYPESCRIPT_STANDARD=0 # Count of errors found +ERRORS_FOUND_TYPESCRIPT_ES=0 # Count of errors found +ERRORS_FOUND_DOCKER=0 # Count of errors found +ERRORS_FOUND_GO=0 # Count of errors found +ERRORS_FOUND_TERRAFORM=0 # Count of errors found +ERRORS_FOUND_POWERSHELL=0 # Count of errors found +ERRORS_FOUND_CSS=0 # Count of errors found +ERRORS_FOUND_ENV=0 # Count of errors found +ERRORS_FOUND_CLOJURE=0 # Count of errors found +ERRORS_FOUND_KOTLIN=0 # Count of errors found +ERRORS_FOUND_PROTOBUF=0 # Count of errors found +ERRORS_FOUND_OPENAPI=0 # Count of errors found ################################################################################ ########################## FUNCTIONS BELOW ##################################### ################################################################################ ################################################################################ #### Function Header ########################################################### -Header() -{ +Header() { ############################### # Give them the possum action # ############################### @@ -247,8 +246,7 @@ Header() } ################################################################################ #### Function GetLinterVersions ################################################ -GetLinterVersions() -{ +GetLinterVersions() { ######################### # Print version headers # ######################### @@ -261,8 +259,7 @@ GetLinterVersions() ########################################################## # Go through the array of linters and print version info # ########################################################## - for LINTER in "${LINTER_ARRAY[@]}" - do + for LINTER in "${LINTER_ARRAY[@]}"; do echo "---------------------------------------------" echo "[$LINTER]:" ################### @@ -292,14 +289,13 @@ GetLinterVersions() } ################################################################################ #### Function GetLinterRules ################################################### -GetLinterRules() -{ +GetLinterRules() { # Need to validate the rules files exist ################ # Pull in vars # ################ - LANGUAGE_NAME="$1" # Name of the language were looking for + LANGUAGE_NAME="$1" # Name of the language were looking for ####################################################### # Need to create the variables for the real variables # @@ -322,15 +318,14 @@ GetLinterRules() ######################################################## # No user default provided, using the template default # ######################################################## - if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then + if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then echo " -> Codebase does NOT have file:[$LINTER_RULES_PATH/${!LANGUAGE_FILE_NAME}], using Default rules at:[${!LANGUAGE_LINTER_RULES}]" fi fi } ################################################################################ #### Function GetStandardRules ################################################# -GetStandardRules() -{ +GetStandardRules() { ################ # Pull In Vars # ################ @@ -349,9 +344,9 @@ GetStandardRules() ######################################### # Only env vars that are marked as true GET_ENV_ARRAY=() - if [[ "$LINTER" == "javascript" ]]; then + if [[ $LINTER == "javascript" ]]; then mapfile -t GET_ENV_ARRAY < <(yq .env "$JAVASCRIPT_LINTER_RULES" | grep true) - elif [[ "$LINTER" == "typescript" ]]; then + elif [[ $LINTER == "typescript" ]]; then mapfile -t GET_ENV_ARRAY < <(yq .env "$TYPESCRIPT_LINTER_RULES" | grep true) fi @@ -384,8 +379,7 @@ GetStandardRules() ############################# # Pull out the envs to load # ############################# - for ENV in "${GET_ENV_ARRAY[@]}" - do + for ENV in "${GET_ENV_ARRAY[@]}"; do ############################# # remove spaces from return # ############################# @@ -401,16 +395,15 @@ GetStandardRules() ######################################### # Remove trailing and ending whitespace # ######################################### - if [[ "$LINTER" == "javascript" ]]; then + if [[ $LINTER == "javascript" ]]; then JAVASCRIPT_STANDARD_LINTER_RULES="$(echo -e "${ENV_STRING}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" - elif [[ "$LINTER" == "typescript" ]]; then + elif [[ $LINTER == "typescript" ]]; then TYPESCRIPT_STANDARD_LINTER_RULES="$(echo -e "${ENV_STRING}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" fi } ################################################################################ #### Function DetectOpenAPIFile ################################################ -DetectOpenAPIFile() -{ +DetectOpenAPIFile() { ################ # Pull in vars # ################ @@ -433,18 +426,17 @@ DetectOpenAPIFile() ######################## # Found string in file # ######################## - return 0 + return 0 else ################### # No string match # ################### - return 1 + return 1 fi } ################################################################################ #### Function DetectCloudFormationFile ######################################### -DetectCloudFormationFile() -{ +DetectCloudFormationFile() { ################ # Pull in Vars # ################ @@ -473,7 +465,7 @@ DetectCloudFormationFile() ############################### if jq -e 'has("Resources")' > /dev/null 2>&1 < "$FILE"; then # Check if AWS Alexa or custom - if jq ".Resources[].Type" 2>/dev/null | grep -q -E "(AWS|Alexa|Custom)" < "$FILE"; then + if jq ".Resources[].Type" 2> /dev/null | grep -q -E "(AWS|Alexa|Custom)" < "$FILE"; then # Found it return 0 fi @@ -495,8 +487,7 @@ DetectCloudFormationFile() ################################################################################ #### Function GetGitHubVars #################################################### -GetGitHubVars() -{ +GetGitHubVars() { ########## # Prints # ########## @@ -536,7 +527,7 @@ GetGitHubVars() ################################# # Check if were running locally # ################################# - if [[ "$RUN_LOCAL" != "false" ]]; then + if [[ $RUN_LOCAL != "false" ]]; then ########################################## # We are running locally for a debug run # ########################################## @@ -557,7 +548,6 @@ GetGitHubVars() # No need to touch or set the GITHUB_ORG # No need to touch or set the GITHUB_REPO - ################################# # Set the VALIDATE_ALL_CODEBASE # ################################# @@ -603,7 +593,7 @@ GetGitHubVars() ###################### # Get the GitHub Org # ###################### - GITHUB_ORG=$(jq -r '.repository.owner.login' < "$GITHUB_EVENT_PATH" ) + GITHUB_ORG=$(jq -r '.repository.owner.login' < "$GITHUB_EVENT_PATH") ############################ # Validate we have a value # @@ -619,7 +609,7 @@ GetGitHubVars() ####################### # Get the GitHub Repo # ####################### - GITHUB_REPO=$(jq -r '.repository.name' < "$GITHUB_EVENT_PATH" ) + GITHUB_REPO=$(jq -r '.repository.name' < "$GITHUB_EVENT_PATH") ############################ # Validate we have a value # @@ -635,11 +625,10 @@ GetGitHubVars() } ################################################################################ #### Function ValidatePowershellModules ######################################## -function ValidatePowershellModules() -{ +function ValidatePowershellModules() { VALIDATE_PSSA_MODULE=$(pwsh -c "(Get-Module -Name PSScriptAnalyzer -ListAvailable | Select-Object -First 1).Name" 2>&1) # If module found, ensure Invoke-ScriptAnalyzer command is available - if [[ "$VALIDATE_PSSA_MODULE" == "PSScriptAnalyzer" ]]; then + if [[ $VALIDATE_PSSA_MODULE == "PSScriptAnalyzer" ]]; then VALIDATE_PSSA_CMD=$(pwsh -c "(Get-Command Invoke-ScriptAnalyzer | Select-Object -First 1).Name" 2>&1) else # Failed to find module @@ -649,7 +638,7 @@ function ValidatePowershellModules() ######################################### # validate we found the script analyzer # ######################################### - if [[ "$VALIDATE_PSSA_CMD" != "Invoke-ScriptAnalyzer" ]]; then + if [[ $VALIDATE_PSSA_CMD != "Invoke-ScriptAnalyzer" ]]; then # Failed to find module exit 1 fi @@ -669,7 +658,7 @@ function ValidatePowershellModules() exit 1 else # Success - if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then + if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then echo -e "${NC}${F[B]}Successfully found module ${F[W]}[$VALIDATE_PSSA_MODULE]${F[B]} in system${NC}" echo -e "${NC}${F[B]}Successfully found command ${F[W]}[$VALIDATE_PSSA_CMD]${F[B]} in system${NC}" fi @@ -677,8 +666,7 @@ function ValidatePowershellModules() } ################################################################################ #### Function Footer ########################################################### -Footer() -{ +Footer() { echo "" echo "----------------------------------------------" echo "----------------------------------------------" @@ -690,8 +678,7 @@ Footer() ############################## # Prints for errors if found # ############################## - for LANGUAGE in "${LANGUAGE_ARRAY[@]}" - do + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do ########################### # Build the error counter # ########################### @@ -715,32 +702,32 @@ Footer() ############################### # Exit with 1 if errors found # ############################### - elif [ "$ERRORS_FOUND_YML" -ne 0 ] || \ - [ "$ERRORS_FOUND_JSON" -ne 0 ] || \ - [ "$ERRORS_FOUND_XML" -ne 0 ] || \ - [ "$ERRORS_FOUND_MARKDOWN" -ne 0 ] || \ - [ "$ERRORS_FOUND_BASH" -ne 0 ] || \ - [ "$ERRORS_FOUND_PERL" -ne 0 ] || \ - [ "$ERRORS_FOUND_PHP" -ne 0 ] || \ - [ "$ERRORS_FOUND_PYTHON" -ne 0 ] || \ - [ "$ERRORS_FOUND_COFFEESCRIPT" -ne 0 ] || \ - [ "$ERRORS_FOUND_ANSIBLE" -ne 0 ] || \ - [ "$ERRORS_FOUND_JAVASCRIPT_ES" -ne 0 ] || \ - [ "$ERRORS_FOUND_JAVASCRIPT_STANDARD" -ne 0 ] || \ - [ "$ERRORS_FOUND_TYPESCRIPT_ES" -ne 0 ] || \ - [ "$ERRORS_FOUND_TYPESCRIPT_STANDARD" -ne 0 ] || \ - [ "$ERRORS_FOUND_DOCKER" -ne 0 ] || \ - [ "$ERRORS_FOUND_GO" -ne 0 ] || \ - [ "$ERRORS_FOUND_TERRAFORM" -ne 0 ] || \ - [ "$ERRORS_FOUND_POWERSHELL" -ne 0 ] || \ - [ "$ERRORS_FOUND_RUBY" -ne 0 ] || \ - [ "$ERRORS_FOUND_CSS" -ne 0 ] || \ - [ "$ERRORS_FOUND_CFN" -ne 0 ] || \ - [ "$ERRORS_FOUND_ENV" -ne 0 ] || \ - [ "$ERRORS_FOUND_OPENAPI" -ne 0 ] || \ - [ "$ERRORS_FOUND_PROTOBUF" -ne 0 ] || \ - [ "$ERRORS_FOUND_CLOJURE" -ne 0 ] || \ - [ "$ERRORS_FOUND_KOTLIN" -ne 0 ]; then + elif [ "$ERRORS_FOUND_YML" -ne 0 ] || + [ "$ERRORS_FOUND_JSON" -ne 0 ] || + [ "$ERRORS_FOUND_XML" -ne 0 ] || + [ "$ERRORS_FOUND_MARKDOWN" -ne 0 ] || + [ "$ERRORS_FOUND_BASH" -ne 0 ] || + [ "$ERRORS_FOUND_PERL" -ne 0 ] || + [ "$ERRORS_FOUND_PHP" -ne 0 ] || + [ "$ERRORS_FOUND_PYTHON" -ne 0 ] || + [ "$ERRORS_FOUND_COFFEESCRIPT" -ne 0 ] || + [ "$ERRORS_FOUND_ANSIBLE" -ne 0 ] || + [ "$ERRORS_FOUND_JAVASCRIPT_ES" -ne 0 ] || + [ "$ERRORS_FOUND_JAVASCRIPT_STANDARD" -ne 0 ] || + [ "$ERRORS_FOUND_TYPESCRIPT_ES" -ne 0 ] || + [ "$ERRORS_FOUND_TYPESCRIPT_STANDARD" -ne 0 ] || + [ "$ERRORS_FOUND_DOCKER" -ne 0 ] || + [ "$ERRORS_FOUND_GO" -ne 0 ] || + [ "$ERRORS_FOUND_TERRAFORM" -ne 0 ] || + [ "$ERRORS_FOUND_POWERSHELL" -ne 0 ] || + [ "$ERRORS_FOUND_RUBY" -ne 0 ] || + [ "$ERRORS_FOUND_CSS" -ne 0 ] || + [ "$ERRORS_FOUND_CFN" -ne 0 ] || + [ "$ERRORS_FOUND_ENV" -ne 0 ] || + [ "$ERRORS_FOUND_OPENAPI" -ne 0 ] || + [ "$ERRORS_FOUND_PROTOBUF" -ne 0 ] || + [ "$ERRORS_FOUND_CLOJURE" -ne 0 ] || + [ "$ERRORS_FOUND_KOTLIN" -ne 0 ]; then # Failed exit echo -e "${NC}${F[R]}Exiting with errors found!${NC}" exit 1 @@ -812,7 +799,7 @@ GetLinterRules "CFN" ################################# # Check if were in verbose mode # ################################# -if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then +if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then ################################## # Get and print all version info # ################################## @@ -822,7 +809,7 @@ fi ########################################### # Check to see if this is a test case run # ########################################### -if [[ "$TEST_CASE_RUN" != "false" ]]; then +if [[ $TEST_CASE_RUN != "false" ]]; then ########################### # Run only the test cases # ########################### @@ -1146,8 +1133,7 @@ if [ "$VALIDATE_OPENAPI" == "true" ]; then IFS=$'\n' mapfile -t LIST_FILES < <(find "$GITHUB_WORKSPACE" -type f -regex ".*\.\(yml\|yaml\|json\)\$" 2>&1) - for FILE in "${LIST_FILES[@]}" - do + for FILE in "${LIST_FILES[@]}"; do if DetectOpenAPIFile "$FILE"; then FILE_ARRAY_OPENAPI+=("$FILE") fi diff --git a/lib/possum.sh b/lib/possum.sh index dd87d952..d867332b 100755 --- a/lib/possum.sh +++ b/lib/possum.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -cat <&1) + LINT_CMD=$( + cd "$GITHUB_WORKSPACE" || exit + pwsh -c "($LINTER_COMMAND $FILE)" + exit $? 2>&1 + ) else ################################ # Lint the file with the rules # ################################ - LINT_CMD=$(cd "$GITHUB_WORKSPACE" || exit; $LINTER_COMMAND "$FILE" 2>&1) + LINT_CMD=$( + cd "$GITHUB_WORKSPACE" || exit + $LINTER_COMMAND "$FILE" 2>&1 + ) fi ####################### @@ -202,17 +206,16 @@ function LintCodebase() } ################################################################################ #### Function TestCodebase ##################################################### -function TestCodebase() -{ +function TestCodebase() { #################### # Pull in the vars # #################### - FILE_TYPE="$1" # Pull the variable and remove from array path (Example: JSON) - LINTER_NAME="$2" # Pull the variable and remove from array path (Example: jsonlint) - LINTER_COMMAND="$3" # Pull the variable and remove from array path (Example: jsonlint -c ConfigFile /path/to/file) - FILE_EXTENSIONS="$4" # Pull the variable and remove from array path (Example: *.json) - INDVIDUAL_TEST_FOLDER="$5" # Folder for specific tests - TESTS_RAN=0 # Incremented when tests are ran, this will help find failed finds + FILE_TYPE="$1" # Pull the variable and remove from array path (Example: JSON) + LINTER_NAME="$2" # Pull the variable and remove from array path (Example: jsonlint) + LINTER_COMMAND="$3" # Pull the variable and remove from array path (Example: jsonlint -c ConfigFile /path/to/file) + FILE_EXTENSIONS="$4" # Pull the variable and remove from array path (Example: *.json) + INDVIDUAL_TEST_FOLDER="$5" # Folder for specific tests + TESTS_RAN=0 # Incremented when tests are ran, this will help find failed finds ################ # print header # @@ -262,8 +265,7 @@ function TestCodebase() ################## # Lint the files # ################## - for FILE in "${LIST_FILES[@]}" - do + for FILE in "${LIST_FILES[@]}"; do ##################### # Get the file name # ##################### @@ -273,12 +275,12 @@ function TestCodebase() # Get the file pass status # ############################ # Example: markdown_good_1.md -> good - FILE_STATUS=$(echo "$FILE_NAME" |cut -f2 -d'_') + FILE_STATUS=$(echo "$FILE_NAME" | cut -f2 -d'_') ######################################################### # If not found, assume it should be linted successfully # ######################################################### - if [ -z "$FILE_STATUS" ] || [[ "$FILE" == *"README"* ]]; then + if [ -z "$FILE_STATUS" ] || [[ $FILE == *"README"* ]]; then ################################## # Set to good for proper linting # ################################## @@ -299,8 +301,8 @@ function TestCodebase() ####################################### # Check if docker and get folder name # ####################################### - if [[ "$FILE_TYPE" == "DOCKER" ]]; then - if [[ "$FILE" == *"good"* ]]; then + if [[ $FILE_TYPE == "DOCKER" ]]; then + if [[ $FILE == *"good"* ]]; then ############# # Good file # ############# @@ -316,7 +318,7 @@ function TestCodebase() ##################### # Check for ansible # ##################### - if [[ "$FILE_TYPE" == "ANSIBLE" ]]; then + if [[ $FILE_TYPE == "ANSIBLE" ]]; then ######################################## # Make sure we dont lint certain files # ######################################## @@ -328,18 +330,28 @@ function TestCodebase() ################################ # Lint the file with the rules # ################################ - LINT_CMD=$(cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER/$INDVIDUAL_TEST_FOLDER" || exit; $LINTER_COMMAND "$FILE" 2>&1) - elif [[ "$FILE_TYPE" == "POWERSHELL" ]]; then + LINT_CMD=$( + cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER/$INDVIDUAL_TEST_FOLDER" || exit + $LINTER_COMMAND "$FILE" 2>&1 + ) + elif [[ $FILE_TYPE == "POWERSHELL" ]]; then ################################ # Lint the file with the rules # ################################ # Need to run PowerShell commands using pwsh -c, also exit with exit code from inner subshell - LINT_CMD=$(cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit; pwsh -c "($LINTER_COMMAND $FILE)"; exit $? 2>&1) + LINT_CMD=$( + cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit + pwsh -c "($LINTER_COMMAND $FILE)" + exit $? 2>&1 + ) else ################################ # Lint the file with the rules # ################################ - LINT_CMD=$(cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit; $LINTER_COMMAND "$FILE" 2>&1) + LINT_CMD=$( + cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit + $LINTER_COMMAND "$FILE" 2>&1 + ) fi ####################### @@ -350,7 +362,7 @@ function TestCodebase() ######################################## # Check for if it was supposed to pass # ######################################## - if [[ "$FILE_STATUS" == "good" ]]; then + if [[ $FILE_STATUS == "good" ]]; then ############################## # Check the shell for errors # ############################## @@ -417,8 +429,7 @@ function TestCodebase() } ################################################################################ #### Function RunTestCases ##################################################### -function RunTestCases() -{ +function RunTestCases() { # This loop will run the test cases and exclude user code # This is called from the automation process to validate new code # When a PR is opened, the new code is validated with the default branch @@ -476,8 +487,7 @@ function RunTestCases() } ################################################################################ #### Function LintAnsibleFiles ################################################# -function LintAnsibleFiles() -{ +function LintAnsibleFiles() { ###################### # Create Print Array # ###################### @@ -518,7 +528,7 @@ function LintAnsibleFiles() exit 1 else # Success - if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then + if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then # Success echo -e "${NC}${F[B]}Successfully found binary in system${NC}" echo "Location:[$VALIDATE_INSTALL_CMD]" @@ -568,8 +578,7 @@ function LintAnsibleFiles() # Check if we have data to look at # #################################### if [ $SKIP_FLAG -eq 0 ]; then - for LINE in "${PRINT_ARRAY[@]}" - do + for LINE in "${PRINT_ARRAY[@]}"; do ######################### # Print the header line # ######################### @@ -580,8 +589,7 @@ function LintAnsibleFiles() ################## # Lint the files # ################## - for FILE in "${LIST_FILES[@]}" - do + for FILE in "${LIST_FILES[@]}"; do ######################################## # Make sure we dont lint certain files # @@ -634,7 +642,7 @@ function LintAnsibleFiles() ############################### # Check to see if debug is on # ############################### - if [[ "$ACTIONS_RUNNER_DEBUG" == "true" ]]; then + if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then ######################## # No Ansible dir found # ########################