From 72fd3e3b8768697366fc5333a4def46f01730de8 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:12:49 -0500 Subject: [PATCH 1/8] super simple --- Dockerfile | 10 +-- lib/linter.sh | 65 +++++---------- lib/linterVersions.sh | 185 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 212 insertions(+), 48 deletions(-) create mode 100755 lib/linterVersions.sh diff --git a/Dockerfile b/Dockerfile index b16d60c5..a9fda8f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -306,11 +306,6 @@ ENV PATH="$PATH":"$GOROOT"/bin:"$GOPATH"/bin RUN mkdir -p ${GOPATH}/src ${GOPATH}/bin RUN go get mvdan.cc/sh/v3/cmd/shfmt -############################# -# Bootstrap npm-groovy-lint # -############################# -RUN npm-groovy-lint --version - ########################################### # Load GitHub Env Vars for GitHub Actions # ########################################### @@ -395,6 +390,11 @@ COPY lib /action/lib ################################## COPY TEMPLATES /action/lib/.automation +################################### +# Run to build file with versions # +################################### +# RUN /action/lib/linterVersions.sh + ###################### # Set the entrypoint # ###################### diff --git a/lib/linter.sh b/lib/linter.sh index 8282bee8..ed531bbf 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -17,6 +17,8 @@ source /action/lib/buildFileList.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) +# shellcheck source=/dev/null +source /action/lib/linterVersions.sh # Source the function script(s) ########### # GLOBALS # @@ -128,6 +130,8 @@ TERRAFORM_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${TERRAFORM_FILE_NAME}" # Path TYPESCRIPT_FILE_NAME="${TYPESCRIPT_ES_CONFIG_FILE:-.eslintrc.yml}" # Name of the file 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 +# Version File info +VERSION_FILE='/action/lib/linter-versions.txt' # File to store linter versions # YAML Vars YAML_FILE_NAME="${YAML_CONFIG_FILE:-.yaml-lint.yml}" # Name of the file YAML_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${YAML_FILE_NAME}" # Path to the yaml lint rules @@ -459,51 +463,26 @@ GetLinterVersions() { debug "---------------------------------------------" debug "Linter Version Info:" - ########################################################## - # Go through the array of linters and print version info # - ########################################################## - for LINTER in "${LINTER_ARRAY[@]}"; do - #################### - # Get the versions # - #################### - if [[ ${LINTER} == "arm-ttk" ]]; then - # Need specific command for ARM - mapfile -t GET_VERSION_CMD < <(grep -iE 'version' "${ARM_TTK_PSD1}" | xargs 2>&1) - elif [[ ${LINTER} == "protolint" ]] || [[ ${LINTER} == "editorconfig-checker" ]] || [[ ${LINTER} == "bash-exec" ]]; then - # Need specific command for Protolint and editorconfig-checker - mapfile -t GET_VERSION_CMD < <(echo "--version not supported") - elif [[ ${LINTER} == "lintr" ]]; then - # Need specific command for lintr (--slave is deprecated in R 4.0 and replaced by --no-echo) - mapfile -t GET_VERSION_CMD < <(R --slave -e "r_ver <- R.Version()\$version.string; \ - lintr_ver <- packageVersion('lintr'); \ - glue::glue('lintr { lintr_ver } on { r_ver }')") - elif [[ ${LINTER} == "lua" ]]; then - # Semi standardversion command - mapfile -t GET_VERSION_CMD < <("${LINTER}" -v 2>&1) - elif [[ ${LINTER} == "terrascan" ]]; then - mapfile -t GET_VERSION_CMD < <("${LINTER}" version 2>&1) - else - # Standard version command - mapfile -t GET_VERSION_CMD < <("${LINTER}" --version 2>&1) - fi + ################################ + # Cat the linter versions file # + ################################ + CAT_CMD=$(cat ${VERSION_FILE} 2>&1) - ####################### - # Load the error code # - ####################### - ERROR_CODE=$? + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? - ############################## - # Check the shell for errors # - ############################## - if [ ${ERROR_CODE} -ne 0 ] || [ -z "${GET_VERSION_CMD[*]}" ]; then - warn "[${LINTER}]: Failed to get version info for:" - else - ########################## - # Print the version info # - ########################## - debug "Successfully found version for ${F[W]}[${LINTER}]${F[B]}: ${F[W]}${GET_VERSION_CMD[*]}" - fi - done + ############################## + # Check the shell for errors # + ############################## + if [ ${ERROR_CODE} -ne 0 ]; then + # Failure + warn "Failed to view version file:[${VERSION_FILE}]" + else + # Success + info "${CAT_CMD}" + fi ######################### # Print version footers # diff --git a/lib/linterVersions.sh b/lib/linterVersions.sh new file mode 100755 index 00000000..1f021436 --- /dev/null +++ b/lib/linterVersions.sh @@ -0,0 +1,185 @@ +#!/usr/bin/env bash + +################################################################################ +################################################################################ +########### Super-Linter (Get the linter versions) @admiralawkbar ############## +################################################################################ +################################################################################ + +######################### +# Source Function Files # +######################### +# shellcheck source=/dev/null +source /action/lib/log.sh # Source the function script(s) + +########### +# GLOBALS # +########### +MAIN_FILE='/action/lib/linter.sh' # Main file for super-linter +VERSION_FILE='/action/lib/linter-versions.txt' # File to store linter versions +LINTER_ARRAY=() # Array of languages to get versions +DEFAULT_IFS="${IFS}" # Get the Default IFS for updating +ARM_TTK_PSD1='/usr/bin/arm-ttk' # Powershell var + +################################################################################ +########################## FUNCTIONS BELOW ##################################### +################################################################################ +################################################################################ +#### Function GetLinterArray ################################################### +GetLinterArray() { + ################################## + # Make sure we can find the file # + ################################## + if [ ! -f "${MAIN_FILE}" ]; then + fatal "Failed to find:[${MAIN_FILE}]" + fi + + ############################### + # Get the array from the file # + ############################### + RAW_DATA=$(awk '/LINTER_ARRAY=\(/,/\)/' "${MAIN_FILE}" 2>&1) + + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? + + ############################## + # Check the shell for errors # + ############################## + if [ $ERROR_CODE -ne 0 ]; then + error "Failed to get data from:[${MAIN_FILE}]" + fatal "RAW_DATA:[$RAW_DATA]" + fi + + ################################# + # Split the trash off the front # + ################################# + CLEANER_DATA=$(echo "${RAW_DATA}" | cut -d'(' -f2 | cut -d')' -f1 | tr -d '\n') + + ##################################################### + # Remove first and last "'" for easy breaking apart # + ##################################################### + MORE_CLEAN=$(echo "${CLEANER_DATA:1:${#CLEANER_DATA}-2}") + + ########################## + # Set IFS for this event # + ########################## + IFS="' '" + + ################## + # Load the array # + ################## + read -r -a LINTER_ARRAY <<< "${MORE_CLEAN}" + + ################ + # Set IFS back # + ################ + IFS="${DEFAULT_IFS}" +} +################################################################################ +#### Function GetLinterVersions ################################################ +GetLinterVersions() { + ######################### + # Print version headers # + ######################### + info "---------------------------------------------" + info "Linter Version Info:" + + ########################################################## + # Go through the array of linters and print version info # + ########################################################## + for LINTER in "${LINTER_ARRAY[@]}"; do + if [ -n "${LINTER}" ]; then + echo "Linter:[${LINTER}]" + #################### + # Get the versions # + #################### + if [[ ${LINTER} == "arm-ttk" ]]; then + # Need specific command for ARM + mapfile -t GET_VERSION_CMD < <(grep -iE 'version' "${ARM_TTK_PSD1}" | xargs 2>&1) + elif [[ ${LINTER} == "protolint" ]] || [[ ${LINTER} == "editorconfig-checker" ]] || [[ ${LINTER} == "bash-exec" ]]; then + # Need specific command for Protolint and editorconfig-checker + mapfile -t GET_VERSION_CMD < <(echo "--version not supported") + elif [[ ${LINTER} == "lintr" ]]; then + # Need specific command for lintr (--slave is deprecated in R 4.0 and replaced by --no-echo) + mapfile -t GET_VERSION_CMD < <(R --slave -e "r_ver <- R.Version()\$version.string; \ + lintr_ver <- packageVersion('lintr'); \ + glue::glue('lintr { lintr_ver } on { r_ver }')") + elif [[ ${LINTER} == "lua" ]]; then + # Semi standardversion command + mapfile -t GET_VERSION_CMD < <("${LINTER}" -v 2>&1) + elif [[ ${LINTER} == "terrascan" ]]; then + mapfile -t GET_VERSION_CMD < <("${LINTER}" version 2>&1) + elif [[ ${LINTER} == "checkstyle" ]]; then + mapfile -t GET_VERSION_CMD < <("java -jar /usr/bin/${LINTER}" --version 2>&1) + else + # Standard version command + mapfile -t GET_VERSION_CMD < <("${LINTER}" --version 2>&1) + fi + + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? + + ############################## + # Check the shell for errors # + ############################## + if [ ${ERROR_CODE} -ne 0 ] || [ -z "${GET_VERSION_CMD[*]}" ]; then + warn "[${LINTER}]: Failed to get version info for:" + WriteFile "${LINTER}" "Failed to get version info" + else + ########################## + # Print the version info # + ########################## + info "Successfully found version for ${F[W]}[${LINTER}]${F[B]}: ${F[W]}${GET_VERSION_CMD[*]}" + WriteFile "${LINTER}" "${GET_VERSION_CMD}" + fi + fi + done + + ######################### + # Print version footers # + ######################### + info "---------------------------------------------" +} +################################################################################ +#### Function WriteFile ######################################################## +WriteFile() { + ############## + # Read Input # + ############## + LINTER="$1" # Name of the linter + VERSION="$2" # Version returned from check + + ################################# + # Write the data to output file # + ################################# + WRITE_CMD=$(echo "${LINTER}: ${VERSION}" >> "${VERSION_FILE}" 2>&1) + + ####################### + # Load the error code # + ####################### + ERROR_CODE=$? + + ############################## + # Check the shell for errors # + ############################## + if [ $ERROR_CODE -ne 0 ]; then + fatal "Failed to write data to file:[${WRITE_CMD}]" + fi +} +################################################################################ +############################### MAIN ########################################### +################################################################################ + +########################### +# Get the languages array # +########################### +GetLinterArray + +##################### +# GetLinterVersions # +##################### +GetLinterVersions From 0818e17d070b494906b6d8b4d3d233d9d1b6cd49 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:14:47 -0500 Subject: [PATCH 2/8] adding it --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a9fda8f6..a613fba8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -393,7 +393,7 @@ COPY TEMPLATES /action/lib/.automation ################################### # Run to build file with versions # ################################### -# RUN /action/lib/linterVersions.sh +RUN /action/lib/linterVersions.sh ###################### # Set the entrypoint # From 8a51e59be7012420ccc679811c586b32fa00d086 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:20:00 -0500 Subject: [PATCH 3/8] even easier --- lib/linter.sh | 9 ------ lib/linterVersions.sh | 68 ++++++------------------------------------- 2 files changed, 9 insertions(+), 68 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index ed531bbf..0a0e0aac 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -136,15 +136,6 @@ VERSION_FILE='/action/lib/linter-versions.txt' # File to store linter versions YAML_FILE_NAME="${YAML_CONFIG_FILE:-.yaml-lint.yml}" # Name of the file YAML_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${YAML_FILE_NAME}" # Path to the yaml lint rules -####################################### -# Linter array for information prints # -####################################### -LINTER_ARRAY=('ansible-lint' 'arm-ttk' 'asl-validator' 'bash-exec' 'black' 'cfn-lint' 'checkstyle' 'chktex' 'clj-kondo' 'coffeelint' - 'dotnet-format' 'dart' 'dockerfilelint' 'dotenv-linter' 'editorconfig-checker' 'eslint' 'flake8' 'golangci-lint' - 'hadolint' 'htmlhint' 'jsonlint' 'ktlint' 'lintr' 'lua' 'markdownlint' 'npm-groovy-lint' 'perl' 'protolint' - 'pwsh' 'pylint' 'raku' 'rubocop' 'shellcheck' 'shfmt' 'spectral' 'standard' 'stylelint' 'sql-lint' - 'terrascan' 'tflint' 'xmllint' 'yamllint') - ############################# # Language array for prints # ############################# diff --git a/lib/linterVersions.sh b/lib/linterVersions.sh index 1f021436..cf1ad5d1 100755 --- a/lib/linterVersions.sh +++ b/lib/linterVersions.sh @@ -17,67 +17,22 @@ source /action/lib/log.sh # Source the function script(s) ########### MAIN_FILE='/action/lib/linter.sh' # Main file for super-linter VERSION_FILE='/action/lib/linter-versions.txt' # File to store linter versions -LINTER_ARRAY=() # Array of languages to get versions DEFAULT_IFS="${IFS}" # Get the Default IFS for updating ARM_TTK_PSD1='/usr/bin/arm-ttk' # Powershell var +####################################### +# Linter array for information prints # +####################################### +LINTER_ARRAY=('ansible-lint' 'arm-ttk' 'asl-validator' 'bash-exec' 'black' 'cfn-lint' 'checkstyle' 'chktex' 'clj-kondo' 'coffeelint' + 'dotnet-format' 'dart' 'dockerfilelint' 'dotenv-linter' 'editorconfig-checker' 'eslint' 'flake8' 'golangci-lint' + 'hadolint' 'htmlhint' 'jsonlint' 'ktlint' 'lintr' 'lua' 'markdownlint' 'npm-groovy-lint' 'perl' 'protolint' + 'pwsh' 'pylint' 'raku' 'rubocop' 'shellcheck' 'shfmt' 'spectral' 'standard' 'stylelint' 'sql-lint' + 'terrascan' 'tflint' 'xmllint' 'yamllint') + ################################################################################ ########################## FUNCTIONS BELOW ##################################### ################################################################################ ################################################################################ -#### Function GetLinterArray ################################################### -GetLinterArray() { - ################################## - # Make sure we can find the file # - ################################## - if [ ! -f "${MAIN_FILE}" ]; then - fatal "Failed to find:[${MAIN_FILE}]" - fi - - ############################### - # Get the array from the file # - ############################### - RAW_DATA=$(awk '/LINTER_ARRAY=\(/,/\)/' "${MAIN_FILE}" 2>&1) - - ####################### - # Load the error code # - ####################### - ERROR_CODE=$? - - ############################## - # Check the shell for errors # - ############################## - if [ $ERROR_CODE -ne 0 ]; then - error "Failed to get data from:[${MAIN_FILE}]" - fatal "RAW_DATA:[$RAW_DATA]" - fi - - ################################# - # Split the trash off the front # - ################################# - CLEANER_DATA=$(echo "${RAW_DATA}" | cut -d'(' -f2 | cut -d')' -f1 | tr -d '\n') - - ##################################################### - # Remove first and last "'" for easy breaking apart # - ##################################################### - MORE_CLEAN=$(echo "${CLEANER_DATA:1:${#CLEANER_DATA}-2}") - - ########################## - # Set IFS for this event # - ########################## - IFS="' '" - - ################## - # Load the array # - ################## - read -r -a LINTER_ARRAY <<< "${MORE_CLEAN}" - - ################ - # Set IFS back # - ################ - IFS="${DEFAULT_IFS}" -} -################################################################################ #### Function GetLinterVersions ################################################ GetLinterVersions() { ######################### @@ -174,11 +129,6 @@ WriteFile() { ############################### MAIN ########################################### ################################################################################ -########################### -# Get the languages array # -########################### -GetLinterArray - ##################### # GetLinterVersions # ##################### From 165b29cbe125dcfb8cfa4333f62da8cbf830b35a Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:21:22 -0500 Subject: [PATCH 4/8] fix array --- lib/linterVersions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linterVersions.sh b/lib/linterVersions.sh index cf1ad5d1..bf0b74c0 100755 --- a/lib/linterVersions.sh +++ b/lib/linterVersions.sh @@ -89,7 +89,7 @@ GetLinterVersions() { # Print the version info # ########################## info "Successfully found version for ${F[W]}[${LINTER}]${F[B]}: ${F[W]}${GET_VERSION_CMD[*]}" - WriteFile "${LINTER}" "${GET_VERSION_CMD}" + WriteFile "${LINTER}" "${GET_VERSION_CMD[*]}" fi fi done From 6ac933dc8c9b0592cb5dea547edcdd9463f1eaf5 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:34:39 -0500 Subject: [PATCH 5/8] fix print --- lib/linterVersions.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/linterVersions.sh b/lib/linterVersions.sh index bf0b74c0..3398ed42 100755 --- a/lib/linterVersions.sh +++ b/lib/linterVersions.sh @@ -15,9 +15,7 @@ source /action/lib/log.sh # Source the function script(s) ########### # GLOBALS # ########### -MAIN_FILE='/action/lib/linter.sh' # Main file for super-linter VERSION_FILE='/action/lib/linter-versions.txt' # File to store linter versions -DEFAULT_IFS="${IFS}" # Get the Default IFS for updating ARM_TTK_PSD1='/usr/bin/arm-ttk' # Powershell var ####################################### @@ -111,7 +109,7 @@ WriteFile() { ################################# # Write the data to output file # ################################# - WRITE_CMD=$(echo "${LINTER}: ${VERSION}" >> "${VERSION_FILE}" 2>&1) + echo "${LINTER}: ${VERSION}" >> "${VERSION_FILE}" 2>&1 ####################### # Load the error code # @@ -122,7 +120,7 @@ WriteFile() { # Check the shell for errors # ############################## if [ $ERROR_CODE -ne 0 ]; then - fatal "Failed to write data to file:[${WRITE_CMD}]" + fatal "Failed to write data to file!" fi } ################################################################################ From a3c8b22e2ccfeddbb362385f8ba1d52880d26fdb Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:56:34 -0500 Subject: [PATCH 6/8] fix duplicate names --- lib/linterVersions.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/linterVersions.sh b/lib/linterVersions.sh index 3398ed42..5c659cb9 100755 --- a/lib/linterVersions.sh +++ b/lib/linterVersions.sh @@ -31,8 +31,8 @@ LINTER_ARRAY=('ansible-lint' 'arm-ttk' 'asl-validator' 'bash-exec' 'black' 'cfn- ########################## FUNCTIONS BELOW ##################################### ################################################################################ ################################################################################ -#### Function GetLinterVersions ################################################ -GetLinterVersions() { +#### Function BuildLinterVersions ############################################## +BuildLinterVersions() { ######################### # Print version headers # ######################### @@ -44,7 +44,6 @@ GetLinterVersions() { ########################################################## for LINTER in "${LINTER_ARRAY[@]}"; do if [ -n "${LINTER}" ]; then - echo "Linter:[${LINTER}]" #################### # Get the versions # #################### @@ -127,7 +126,7 @@ WriteFile() { ############################### MAIN ########################################### ################################################################################ -##################### -# GetLinterVersions # -##################### -GetLinterVersions +####################### +# BuildLinterVersions # +####################### +BuildLinterVersions From d78e707cbad57750bf930ea01485be73a31e15a5 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:57:20 -0500 Subject: [PATCH 7/8] no source needed --- lib/linter.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index 0a0e0aac..a1a96026 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -17,8 +17,6 @@ source /action/lib/buildFileList.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) -# shellcheck source=/dev/null -source /action/lib/linterVersions.sh # Source the function script(s) ########### # GLOBALS # From c4bbf03935711a928fce39b46be0833d58aae71f Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Thu, 3 Sep 2020 10:12:29 -0500 Subject: [PATCH 8/8] fixing debug --- lib/linter.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index a1a96026..08edb0e6 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -455,7 +455,7 @@ GetLinterVersions() { ################################ # Cat the linter versions file # ################################ - CAT_CMD=$(cat ${VERSION_FILE} 2>&1) + CAT_CMD=$(cat "${VERSION_FILE}" 2>&1) ####################### # Load the error code # @@ -470,7 +470,7 @@ GetLinterVersions() { warn "Failed to view version file:[${VERSION_FILE}]" else # Success - info "${CAT_CMD}" + debug "${CAT_CMD}" fi #########################