From e5a2baf30f5f56ecc8d9f58954d9db59e96e384e Mon Sep 17 00:00:00 2001 From: Casey Vega Date: Tue, 21 Jul 2020 12:25:42 -0700 Subject: [PATCH 01/15] add dart template --- TEMPLATES/analysis_options.yaml | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 TEMPLATES/analysis_options.yaml diff --git a/TEMPLATES/analysis_options.yaml b/TEMPLATES/analysis_options.yaml new file mode 100644 index 00000000..0c444f44 --- /dev/null +++ b/TEMPLATES/analysis_options.yaml @@ -0,0 +1,57 @@ +--- +########################## +########################## +## Dart Linter rules ## +########################## +########################## + +# Pedantic Rules +# https://github.com/dart-lang/pedantic + +linter: + rules: + - always_declare_return_types + - always_require_non_null_named_parameters + - annotate_overrides + - avoid_empty_else + - avoid_init_to_null + - avoid_null_checks_in_equality_operators + - avoid_relative_lib_imports + - avoid_return_types_on_setters + - avoid_shadowing_type_parameters + - avoid_types_as_parameter_names + - camel_case_extensions + - curly_braces_in_flow_control_structures + - empty_catches + - empty_constructor_bodies + - library_names + - library_prefixes + - no_duplicate_case_values + - null_closures + - omit_local_variable_types + - prefer_adjacent_string_concatenation + - prefer_collection_literals + - prefer_conditional_assignment + - prefer_contains + - prefer_equal_for_default_values + - prefer_final_fields + - prefer_for_elements_to_map_fromIterable + - prefer_generic_function_type_aliases + - prefer_if_null_operators + - prefer_is_empty + - prefer_is_not_empty + - prefer_iterable_whereType + - prefer_single_quotes + - prefer_spread_collections + - recursive_getters + - slash_for_doc_comments + - type_init_formals + - unawaited_futures + - unnecessary_const + - unnecessary_new + - unnecessary_null_in_if_null_operators + - unnecessary_this + - unrelated_type_equality_checks + - use_function_type_syntax_for_parameters + - use_rethrow_when_possible + - valid_regexps From daba819f8592eafe96eb30ebe94d89fe6096a06f Mon Sep 17 00:00:00 2001 From: Casey Vega Date: Tue, 21 Jul 2020 12:33:36 -0700 Subject: [PATCH 02/15] update linter.sh - remove pub On second thought, I do not like this approach because it's asking `pub` questions it has already answered for each file, coupled with the fact that `|| true` means pub can fail for whatever reason. Looking at the other linters, and looking at the recent bug report in #120 I think it's safe to assume that pub, or any package manager can be called as a first step and then proceed to super lint. --- lib/linter.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linter.sh b/lib/linter.sh index a4310c38..78092223 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1388,7 +1388,7 @@ if [ "${VALIDATE_DART}" == "true" ]; then # Lint the Dart files # ####################### # LintCodebase "FILE_TYPE" "LINTER_NAME" "LINTER_CMD" "FILE_TYPES_REGEX" "FILE_ARRAY" - LintCodebase "DART" "dart" "pub get || true && dartanalyzer --fatal-infos --fatal-warnings --options ${DART_LINTER_RULES}" ".*\.\(dart\)\$" "${FILE_ARRAY_DART[@]}" + LintCodebase "DART" "dart" "dartanalyzer --fatal-infos --fatal-warnings --options ${DART_LINTER_RULES}" ".*\.\(dart\)\$" "${FILE_ARRAY_DART[@]}" fi ################## From af7101fd92d832d6a4ef13098a28a69670b34868 Mon Sep 17 00:00:00 2001 From: Casey Vega Date: Tue, 21 Jul 2020 12:37:47 -0700 Subject: [PATCH 03/15] update dart section - clean up invalid references - modified invalid file names (changed to anaylsis_options.yaml) --- docs/disabling-linters.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/disabling-linters.md b/docs/disabling-linters.md index 858966a0..d625eef1 100644 --- a/docs/disabling-linters.md +++ b/docs/disabling-linters.md @@ -35,6 +35,7 @@ For some linters it is also possible to override rules on a case by case level w - [Dockerfile](#dockerfile) - [Terraform](#terraform) - [CSS](#css) +- [DART](#dart) - [ENV](#dotenv-linter) - [Kotlin](#kotlin) - [OpenAPI](#openapi) @@ -826,7 +827,7 @@ import package.b.* - `.github/linters/.dart-lint.yml` - You can pass multiple rules and overwrite default rules -- File should be located at: `.github/linters/.dart-lint.yml` +- File should be located at: `.github/linters/anaylsis_options.yaml` ### dartanalyzer disable single line @@ -844,7 +845,7 @@ int x = ''; // ignore: invalid_assignment ### dartanalyzer disable entire file -- You can disable entire files with the `analyzer.exclude` property in `.dart-lint.yml` +- You can disable entire files with the `analyzer.exclude` property in `anaylsis_options.yaml` ```dart analyzer: From c596ef11de805dbe85d0f2c024bd090520703f55 Mon Sep 17 00:00:00 2001 From: Casey Vega Date: Tue, 21 Jul 2020 13:32:34 -0700 Subject: [PATCH 04/15] Update Dockerfile - clean up glibc pkg for dart Noticed `glibc-${GLIBC_VERSION}.apk` was getting purged after and laying around in `/`. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4f56d321..8aa3c5b9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -174,7 +174,7 @@ RUN curl -sSLO https://github.com/pinterest/ktlint/releases/latest/download/ktli #################### RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk -RUN apk add --no-cache glibc-${GLIBC_VERSION}.apk +RUN apk add --no-cache glibc-${GLIBC_VERSION}.apk && rm glibc-${GLIBC_VERSION}.apk RUN wget https://storage.googleapis.com/dart-archive/channels/stable/release/${DART_VERSION}/sdk/dartsdk-linux-x64-release.zip -O - -q | unzip -q - \ && chmod +x dart-sdk/bin/dart* \ && mv dart-sdk/bin/* /usr/bin/ && mv dart-sdk/lib/* /usr/lib/ && mv dart-sdk/include/* /usr/include/ \ From ed4d9111e17cdcf37d99886a40bf4d94f2885f48 Mon Sep 17 00:00:00 2001 From: Victor Martinez Date: Wed, 22 Jul 2020 17:33:19 +0100 Subject: [PATCH 05/15] Revert "Rename expected-COFFEESCRIPT.tap to expected-COFFEESCRIPT.tap.ignored" This reverts commit 586677713406488a9085a4a206457432943ca299. --- ...xpected-COFFEESCRIPT.tap.ignored => expected-COFFEESCRIPT.tap} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .automation/test/coffeescript/reports/{expected-COFFEESCRIPT.tap.ignored => expected-COFFEESCRIPT.tap} (100%) diff --git a/.automation/test/coffeescript/reports/expected-COFFEESCRIPT.tap.ignored b/.automation/test/coffeescript/reports/expected-COFFEESCRIPT.tap similarity index 100% rename from .automation/test/coffeescript/reports/expected-COFFEESCRIPT.tap.ignored rename to .automation/test/coffeescript/reports/expected-COFFEESCRIPT.tap From fd6dea2c1796e19665a3085fa4f6b90d5367031d Mon Sep 17 00:00:00 2001 From: Eric Nemchik Date: Wed, 22 Jul 2020 12:27:45 -0500 Subject: [PATCH 06/15] Simplify extension extraction --- lib/buildFileList.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/buildFileList.sh b/lib/buildFileList.sh index 70dc7c4d..a1e1ebb4 100755 --- a/lib/buildFileList.sh +++ b/lib/buildFileList.sh @@ -84,9 +84,10 @@ function BuildFileList() { ########################### # Get the files extension # ########################### - # Extract just the file and extension, reverse it, cut off extension, - # reverse it back, substitute to lowercase - FILE_TYPE=$(basename "${FILE}" | rev | cut -f1 -d'.' | rev | awk '{print tolower($0)}') + # Extract just the file extension + FILE_TYPE=${FILE##*.} + # To lowercase + FILE_TYPE=${FILE_TYPE,,} ############## # Print file # From 9cb4c33715a74049e63a15df1906b97671b596b2 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:07:08 -0500 Subject: [PATCH 07/15] found the missing link --- .automation/test/cfn/reports/expected-CFN.tap | 22 ---- .../test/{cfn => cloudformation}/README.md | 0 .../cloudformation_bad_1.json} | 0 .../cloudformation_bad_2.yaml} | 0 .../cloudformation_bad_3.json} | 0 .../cloudformation_bad_4.yaml} | 0 .../cloudformation_good_1.json} | 0 .../cloudformation_good_2.yaml} | 0 .../cloudformation_good_3.json} | 0 .../cloudformation_good_4.yaml} | 0 .../reports/expected-CLOUDFORMATION.tap | 22 ++++ Dockerfile | 1 + docs/disabling-linters.md | 2 +- lib/buildFileList.sh | 10 +- lib/linter.sh | 118 +++++++++--------- lib/validation.sh | 21 ++++ lib/worker.sh | 2 +- 17 files changed, 110 insertions(+), 88 deletions(-) delete mode 100644 .automation/test/cfn/reports/expected-CFN.tap rename .automation/test/{cfn => cloudformation}/README.md (100%) rename .automation/test/{cfn/cfn_bad_1.json => cloudformation/cloudformation_bad_1.json} (100%) rename .automation/test/{cfn/cfn_bad_2.yaml => cloudformation/cloudformation_bad_2.yaml} (100%) rename .automation/test/{cfn/cfn_bad_3.json => cloudformation/cloudformation_bad_3.json} (100%) rename .automation/test/{cfn/cfn_bad_4.yaml => cloudformation/cloudformation_bad_4.yaml} (100%) rename .automation/test/{cfn/cfn_good_1.json => cloudformation/cloudformation_good_1.json} (100%) rename .automation/test/{cfn/cfn_good_2.yaml => cloudformation/cloudformation_good_2.yaml} (100%) rename .automation/test/{cfn/cfn_good_3.json => cloudformation/cloudformation_good_3.json} (100%) rename .automation/test/{cfn/cfn_good_4.yaml => cloudformation/cloudformation_good_4.yaml} (100%) create mode 100644 .automation/test/cloudformation/reports/expected-CLOUDFORMATION.tap diff --git a/.automation/test/cfn/reports/expected-CFN.tap b/.automation/test/cfn/reports/expected-CFN.tap deleted file mode 100644 index 98466237..00000000 --- a/.automation/test/cfn/reports/expected-CFN.tap +++ /dev/null @@ -1,22 +0,0 @@ -TAP version 13 -1..8 -not ok 1 - cfn_bad_1.json - --- - message: E3001 Invalid or unsupported Type AWS Route53 HostedZonee for resource DNS in us-east-1\n/tmp/lint/.automation/test/cfn/cfn_bad_1.json 6 10\n - ... -not ok 2 - cfn_bad_2.yaml - --- - message: E3001 Invalid or unsupported Type AWS Route53 HostedZonee for resource DNS in us-east-1\n/tmp/lint/.automation/test/cfn/cfn_bad_2.yaml 5 5\n - ... -not ok 3 - cfn_bad_3.json - --- - message: E3002 Invalid Property Resources/myDNSRecord/Properties/Ttl\n/tmp/lint/.automation/test/cfn/cfn_bad_3.json 11 13\n - ... -not ok 4 - cfn_bad_4.yaml - --- - message: E3002 Invalid Property Resources/myDNSRecord/Properties/Ttl\n/tmp/lint/.automation/test/cfn/cfn_bad_4.yaml 9 7\n - ... -ok 5 - cfn_good_1.json -ok 6 - cfn_good_2.yaml -ok 7 - cfn_good_3.json -ok 8 - cfn_good_4.yaml diff --git a/.automation/test/cfn/README.md b/.automation/test/cloudformation/README.md similarity index 100% rename from .automation/test/cfn/README.md rename to .automation/test/cloudformation/README.md diff --git a/.automation/test/cfn/cfn_bad_1.json b/.automation/test/cloudformation/cloudformation_bad_1.json similarity index 100% rename from .automation/test/cfn/cfn_bad_1.json rename to .automation/test/cloudformation/cloudformation_bad_1.json diff --git a/.automation/test/cfn/cfn_bad_2.yaml b/.automation/test/cloudformation/cloudformation_bad_2.yaml similarity index 100% rename from .automation/test/cfn/cfn_bad_2.yaml rename to .automation/test/cloudformation/cloudformation_bad_2.yaml diff --git a/.automation/test/cfn/cfn_bad_3.json b/.automation/test/cloudformation/cloudformation_bad_3.json similarity index 100% rename from .automation/test/cfn/cfn_bad_3.json rename to .automation/test/cloudformation/cloudformation_bad_3.json diff --git a/.automation/test/cfn/cfn_bad_4.yaml b/.automation/test/cloudformation/cloudformation_bad_4.yaml similarity index 100% rename from .automation/test/cfn/cfn_bad_4.yaml rename to .automation/test/cloudformation/cloudformation_bad_4.yaml diff --git a/.automation/test/cfn/cfn_good_1.json b/.automation/test/cloudformation/cloudformation_good_1.json similarity index 100% rename from .automation/test/cfn/cfn_good_1.json rename to .automation/test/cloudformation/cloudformation_good_1.json diff --git a/.automation/test/cfn/cfn_good_2.yaml b/.automation/test/cloudformation/cloudformation_good_2.yaml similarity index 100% rename from .automation/test/cfn/cfn_good_2.yaml rename to .automation/test/cloudformation/cloudformation_good_2.yaml diff --git a/.automation/test/cfn/cfn_good_3.json b/.automation/test/cloudformation/cloudformation_good_3.json similarity index 100% rename from .automation/test/cfn/cfn_good_3.json rename to .automation/test/cloudformation/cloudformation_good_3.json diff --git a/.automation/test/cfn/cfn_good_4.yaml b/.automation/test/cloudformation/cloudformation_good_4.yaml similarity index 100% rename from .automation/test/cfn/cfn_good_4.yaml rename to .automation/test/cloudformation/cloudformation_good_4.yaml diff --git a/.automation/test/cloudformation/reports/expected-CLOUDFORMATION.tap b/.automation/test/cloudformation/reports/expected-CLOUDFORMATION.tap new file mode 100644 index 00000000..a92e9775 --- /dev/null +++ b/.automation/test/cloudformation/reports/expected-CLOUDFORMATION.tap @@ -0,0 +1,22 @@ +TAP version 13 +1..8 +not ok 1 - cloudformation_bad_1.json + --- + message: E3001 Invalid or unsupported Type AWS Route53 HostedZonee for resource DNS in us-east-1\n/tmp/lint/.automation/test/cloudformation/cloudformation_bad_1.json 6 10\n + ... +not ok 2 - cloudformation_bad_2.yaml + --- + message: E3001 Invalid or unsupported Type AWS Route53 HostedZonee for resource DNS in us-east-1\n/tmp/lint/.automation/test/cloudformation/cloudformation_bad_2.yaml 5 5\n + ... +not ok 3 - cloudformation_bad_3.json + --- + message: E3002 Invalid Property Resources/myDNSRecord/Properties/Ttl\n/tmp/lint/.automation/test/cloudformation/cloudformation_bad_3.json 11 13\n + ... +not ok 4 - cloudformation_bad_4.yaml + --- + message: E3002 Invalid Property Resources/myDNSRecord/Properties/Ttl\n/tmp/lint/.automation/test/cloudformation/cloudformation_bad_4.yaml 9 7\n + ... +ok 5 - cloudformation_good_1.json +ok 6 - cloudformation_good_2.yaml +ok 7 - cloudformation_good_3.json +ok 8 - cloudformation_good_4.yaml diff --git a/Dockerfile b/Dockerfile index 32964e48..cf48d8c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -209,6 +209,7 @@ ENV ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG} \ VALIDATE_ARM=${VALIDATE_ARM} \ VALIDATE_BASH=${VALIDATE_BASH} \ VALIDATE_CLOJURE=${VALIDATE_CLOJURE} \ + VALIDATE_CLOUDFORMATION=${VALIDATE_CLOUDFORMATION} \ VALIDATE_COFFEE=${VALIDATE_COFFEE} \ VALIDATE_CSS=${VALIDATE_CSS} \ VALIDATE_DART=${VALIDATE_DART} \ diff --git a/docs/disabling-linters.md b/docs/disabling-linters.md index 858966a0..fb19256e 100644 --- a/docs/disabling-linters.md +++ b/docs/disabling-linters.md @@ -18,7 +18,7 @@ For some linters it is also possible to override rules on a case by case level w - [Shell](#shell) - [Ansible](#ansible) - [YAML](#yaml) -- [AWS CloudFormation templates](#cfn) +- [AWS CloudFormation templates](#aws-cloud-formation) - [Python](#python3) - [JSON](#json) - [Markdown](#markdown) diff --git a/lib/buildFileList.sh b/lib/buildFileList.sh index 915ddcfa..2627238c 100755 --- a/lib/buildFileList.sh +++ b/lib/buildFileList.sh @@ -99,9 +99,9 @@ function BuildFileList() { ######### #echo "FILE_TYPE:[${FILE_TYPE}]" - ##################### - # Get the CFN files # - ##################### + ################################ + # Get the CLOUDFORMATION files # + ################################ if [ "${FILE_TYPE}" == "yml" ] || [ "${FILE_TYPE}" == "yaml" ]; then ################################ # Append the file to the array # @@ -119,7 +119,7 @@ function BuildFileList() { ################################ # Append the file to the array # ################################ - FILE_ARRAY_CFN+=("${FILE}") + FILE_ARRAY_CLOUDFORMATION+=("${FILE}") ########################################################## # Set the READ_ONLY_CHANGE_FLAG since this could be exec # @@ -159,7 +159,7 @@ function BuildFileList() { ################################ # Append the file to the array # ################################ - FILE_ARRAY_CFN+=("${FILE}") + FILE_ARRAY_CLOUDFORMATION+=("${FILE}") fi ############################################ # Check if the file is AWS States Language # diff --git a/lib/linter.sh b/lib/linter.sh index c489a260..516c9d3c 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -22,71 +22,71 @@ source /action/lib/worker.sh # Source the function script(s) # GLOBALS # ########### # Default Vars -DEFAULT_RULES_LOCATION='/action/lib/.automation' # Default rules files location +DEFAULT_RULES_LOCATION='/action/lib/.automation' # Default rules files location # 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 # Azure Resource Manager Vars -ARM_FILE_NAME='.arm-ttk.psd1' # Name of the file -ARM_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${ARM_FILE_NAME}" # Path to the ARM lint rules +ARM_FILE_NAME='.arm-ttk.psd1' # Name of the file +ARM_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${ARM_FILE_NAME}" # Path to the ARM 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 cloudformation lint rules +CLOUDFORMATION_FILE_NAME='.cfnlintrc.yml' # Name of the file +CLOUDFORMATION_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${CLOUDFORMATION_FILE_NAME}" # Path to the cloudformation lint rules # Clojure Vars -CLOJURE_FILE_NAME='.clj-kondo/config.edn' # Name of the file -CLOJURE_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${CLOJURE_FILE_NAME}" # Path to the Clojure lint rules +CLOJURE_FILE_NAME='.clj-kondo/config.edn' # Name of the file +CLOJURE_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${CLOJURE_FILE_NAME}" # Path to the Clojure lint rules # Coffee Vars -COFFEE_FILE_NAME='.coffee-lint.json' # Name of the file -COFFEESCRIPT_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${COFFEE_FILE_NAME}" # Path to the coffeescript lint rules +COFFEE_FILE_NAME='.coffee-lint.json' # Name of the file +COFFEESCRIPT_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${COFFEE_FILE_NAME}" # Path to the coffeescript 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 # Dart Vars -DART_FILE_NAME='analysis_options.yaml' # Name of the file -DART_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${DART_FILE_NAME}" # Path to the DART lint rules +DART_FILE_NAME='analysis_options.yaml' # Name of the file +DART_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${DART_FILE_NAME}" # Path to the DART 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 # HTML Vars -HTML_FILE_NAME='.htmlhintrc' # Name of the file -HTML_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${HTML_FILE_NAME}" # Path to the CSS lint rules +HTML_FILE_NAME='.htmlhintrc' # Name of the file +HTML_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${HTML_FILE_NAME}" # Path to the CSS lint rules # Javascript Vars -JAVASCRIPT_FILE_NAME="${JAVASCRIPT_ES_CONFIG_FILE:-.eslintrc.yml}" # Name of the file -JAVASCRIPT_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${JAVASCRIPT_FILE_NAME}" # Path to the Javascript lint rules -JAVASCRIPT_STANDARD_LINTER_RULES='' # ENV string to pass when running js standard +JAVASCRIPT_FILE_NAME="${JAVASCRIPT_ES_CONFIG_FILE:-.eslintrc.yml}" # Name of the file +JAVASCRIPT_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${JAVASCRIPT_FILE_NAME}" # Path to the Javascript lint rules +JAVASCRIPT_STANDARD_LINTER_RULES='' # ENV string to pass when running js standard # Default linter path -LINTER_RULES_PATH="${LINTER_RULES_PATH:-.github/linters}" # Linter Path Directory +LINTER_RULES_PATH="${LINTER_RULES_PATH:-.github/linters}" # Linter Path Directory # MD Vars -MARKDOWN_FILE_NAME='.markdown-lint.yml' # Name of the file -MARKDOWN_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${MARKDOWN_FILE_NAME}" # Path to the markdown lint rules +MARKDOWN_FILE_NAME='.markdown-lint.yml' # Name of the file +MARKDOWN_LINTER_RULES="${DEFAULT_RULES_LOCATION}/${MARKDOWN_FILE_NAME}" # Path to the markdown 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 # 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 # 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 # 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 # 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 # 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 # Typescript Vars -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 +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 # 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 ####################################### # Linter array for information prints # @@ -100,7 +100,7 @@ LINTER_ARRAY=('ansible-lint' 'arm-ttk' 'asl-validator' 'cfn-lint' 'clj-kondo' ############################# # Language array for prints # ############################# -LANGUAGE_ARRAY=('ANSIBLE' 'ARM' 'BASH' 'CFN' 'CLOJURE' 'COFFEESCRIPT' +LANGUAGE_ARRAY=('ANSIBLE' 'ARM' 'BASH' 'CLOUDFORMATION' 'CLOJURE' 'COFFEESCRIPT' 'CSS' 'DART' 'DOCKER' 'ENV' 'GO' 'HTML' 'JAVASCRIPT_ES' 'JAVASCRIPT_STANDARD' 'JSON' 'JSX' 'KOTLIN' 'MARKDOWN' 'OPENAPI' 'PERL' 'PHP' 'POWERSHELL' 'PROTOBUF' 'PYTHON' @@ -130,7 +130,7 @@ VALIDATE_ALL_CODEBASE="${VALIDATE_ALL_CODEBASE}" # Boolean to vali VALIDATE_ANSIBLE="${VALIDATE_ANSIBLE}" # Boolean to validate language VALIDATE_ARM="${VALIDATE_ARM}" # Boolean to validate language VALIDATE_BASH="${VALIDATE_BASH}" # Boolean to validate language -VALIDATE_CFN="${VALIDATE_CLOUDFORMATION}" # Boolean to validate language +VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION}" # Boolean to validate language VALIDATE_CLOJURE="${VALIDATE_CLOJURE}" # Boolean to validate language VALIDATE_COFFEE="${VALIDATE_COFFEE}" # Boolean to validate language VALIDATE_CSS="${VALIDATE_CSS}" # Boolean to validate language @@ -205,7 +205,7 @@ REPORT_OUTPUT_FOLDER="${DEFAULT_WORKSPACE}/${OUTPUT_FOLDER}" # Location for the ########################## FILE_ARRAY_ARM=() # Array of files to check FILE_ARRAY_BASH=() # Array of files to check -FILE_ARRAY_CFN=() # Array of files to check +FILE_ARRAY_CLOUDFORMATION=() # Array of files to check FILE_ARRAY_CLOJURE=() # Array of files to check FILE_ARRAY_COFFEESCRIPT=() # Array of files to check FILE_ARRAY_CSS=() # Array of files to check @@ -242,7 +242,7 @@ FILE_ARRAY_YML=() # Array of files to check ERRORS_FOUND_ANSIBLE=0 # Count of errors found ERRORS_FOUND_ARM=0 # Count of errors found ERRORS_FOUND_BASH=0 # Count of errors found -ERRORS_FOUND_CFN=0 # Count of errors found +ERRORS_FOUND_CLOUDFORMATION=0 # Count of errors found ERRORS_FOUND_CLOJURE=0 # Count of errors found ERRORS_FOUND_CSS=0 # Count of errors found ERRORS_FOUND_COFFEESCRIPT=0 # Count of errors found @@ -574,9 +574,9 @@ DetectCloudFormationFile() { return 0 fi - ########################################## - # No identifiers of a CFN template found # - ########################################## + ##################################################### + # No identifiers of a CLOUDFORMATION template found # + ##################################################### return 1 } ################################################################################ @@ -965,7 +965,7 @@ Footer() { elif [ "${ERRORS_FOUND_ANSIBLE}" -ne 0 ] || [ "${ERRORS_FOUND_ARM}" -ne 0 ] || [ "${ERRORS_FOUND_BASH}" -ne 0 ] || - [ "${ERRORS_FOUND_CFN}" -ne 0 ] || + [ "${ERRORS_FOUND_CLOUDFORMATION}" -ne 0 ] || [ "${ERRORS_FOUND_CLOJURE}" -ne 0 ] || [ "${ERRORS_FOUND_COFFEESCRIPT}" -ne 0 ] || [ "${ERRORS_FOUND_CSS}" -ne 0 ] || @@ -1074,8 +1074,8 @@ GetLinterRules "POWERSHELL" GetLinterRules "ARM" # Get CSS rules GetLinterRules "CSS" -# Get CFN rules -GetLinterRules "CFN" +# Get CLOUDFORMATION rules +GetLinterRules "CLOUDFORMATION" # Get DART rules GetLinterRules "DART" # Get HTML rules @@ -1184,15 +1184,15 @@ if [ "${VALIDATE_PYTHON}" == "true" ]; then LintCodebase "PYTHON" "pylint" "pylint --rcfile ${PYTHON_LINTER_RULES}" ".*\.\(py\)\$" "${FILE_ARRAY_PYTHON[@]}" fi -############### -# CFN LINTING # -############### -if [ "${VALIDATE_CFN}" == "true" ]; then +########################## +# CLOUDFORMATION LINTING # +########################## +if [ "${VALIDATE_CLOUDFORMATION}" == "true" ]; then ################################# # Lint the CloudFormation files # ################################# # LintCodebase "FILE_TYPE" "LINTER_NAME" "LINTER_CMD" "FILE_TYPES_REGEX" "FILE_ARRAY" - LintCodebase "CFN" "cfn-lint" "cfn-lint --config-file ${CFN_LINTER_RULES}" ".*\.\(json\|yml\|yaml\)\$" "${FILE_ARRAY_CFN[@]}" + LintCodebase "CLOUDFORMATION" "cfn-lint" "cfn-lint --config-file ${CLOUDFORMATION_LINTER_RULES}" ".*\.\(json\|yml\|yaml\)\$" "${FILE_ARRAY_CLOUDFORMATION[@]}" fi ################ diff --git a/lib/validation.sh b/lib/validation.sh index 4fffb249..bf1e7ccb 100755 --- a/lib/validation.sh +++ b/lib/validation.sh @@ -50,6 +50,7 @@ function GetValidationInfo() { VALIDATE_ARM="${VALIDATE_ARM,,}" VALIDATE_BASH="${VALIDATE_BASH,,}" VALIDATE_CLOJURE="${VALIDATE_CLOJURE,,}" + VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION,,}" VALIDATE_COFFEE="${VALIDATE_COFFEE,,}" VALIDATE_CSS="${VALIDATE_CSS,,}" VALIDATE_DART="${VALIDATE_DART,,}" @@ -88,6 +89,7 @@ function GetValidationInfo() { ${VALIDATE_ARM} || -n \ ${VALIDATE_BASH} || -n \ ${VALIDATE_CLOJURE} || -n \ + ${VALIDATE_CLOUDFORMATION} || -n \ ${VALIDATE_COFFEE} || -n \ ${VALIDATE_CSS} || -n \ ${VALIDATE_DART} || -n \ @@ -551,6 +553,20 @@ function GetValidationInfo() { VALIDATE_CLOJURE="true" fi + ############################################## + # Validate if we should check CloudFormation # + ############################################## + if [[ ${ANY_SET} == "true" ]]; then + # Some linter flags were set - only run those set to true + if [[ -z ${VALIDATE_CLOUDFORMATION} ]]; then + # Cloud Formation flag was not set - default to false + VALIDATE_CLOUDFORMATION="false" + fi + else + # No linter flags were set - default all to true + VALIDATE_CLOUDFORMATION="true" + fi + ############################################ # Validate if we should check editorconfig # ############################################ @@ -700,6 +716,11 @@ function GetValidationInfo() { else PRINT_ARRAY+=("- Excluding [CLOJURE] files in code base...") fi + if [[ ${VALIDATE_CLOUDFORMATION} == "true" ]]; then + PRINT_ARRAY+=("- Validating [CLOUDFORMATION] files in code base...") + else + PRINT_ARRAY+=("- Excluding [CLOUDFORMATION] files in code base...") + fi if [[ ${VALIDATE_ENV} == "true" ]]; then PRINT_ARRAY+=("- Validating [ENV] files in code base...") else diff --git a/lib/worker.sh b/lib/worker.sh index f5957f4e..57ee3413 100755 --- a/lib/worker.sh +++ b/lib/worker.sh @@ -557,7 +557,7 @@ function RunTestCases() { TestCodebase "ANSIBLE" "ansible-lint" "ansible-lint -v -c ${ANSIBLE_LINTER_RULES}" ".*\.\(yml\|yaml\)\$" "ansible" TestCodebase "ARM" "arm-ttk" "Import-Module ${ARM_TTK_PSD1} ; \${config} = \$(Import-PowerShellDataFile -Path ${ARM_LINTER_RULES}) ; Test-AzTemplate @config -TemplatePath" ".*\.\(json\)\$" "arm" TestCodebase "BASH" "shellcheck" "shellcheck --color" ".*\.\(sh\|bash\|dash\|ksh\)\$" "shell" - TestCodebase "CFN" "cfn-lint" "cfn-lint --config-file ${CFN_LINTER_RULES}" ".*\.\(json\|yml\|yaml\)\$" "cfn" + TestCodebase "CLOUDFORMATION" "cfn-lint" "cfn-lint --config-file ${CLOUDFORMATION_LINTER_RULES}" ".*\.\(json\|yml\|yaml\)\$" "cloudformation" TestCodebase "CLOJURE" "clj-kondo" "clj-kondo --config ${CLOJURE_LINTER_RULES} --lint" ".*\.\(clj\|cljs\|cljc\|edn\)\$" "clojure" TestCodebase "COFFEESCRIPT" "coffeelint" "coffeelint -f ${COFFEESCRIPT_LINTER_RULES}" ".*\.\(coffee\)\$" "coffeescript" TestCodebase "CSS" "stylelint" "stylelint --config ${CSS_LINTER_RULES}" ".*\.\(css\)\$" "css" From 3c92dcd70b19a83756a723274188cb3c27523cc6 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:26:45 -0500 Subject: [PATCH 08/15] Went sooo hard on this --- lib/validation.sh | 703 +++------------------------------------------- 1 file changed, 37 insertions(+), 666 deletions(-) diff --git a/lib/validation.sh b/lib/validation.sh index bf1e7ccb..d13bb3f4 100755 --- a/lib/validation.sh +++ b/lib/validation.sh @@ -85,682 +85,53 @@ function GetValidationInfo() { # Determine if any linters were explicitly set # ################################################ ANY_SET="false" - if [[ -n ${VALIDATE_ANSIBLE} || -n \ - ${VALIDATE_ARM} || -n \ - ${VALIDATE_BASH} || -n \ - ${VALIDATE_CLOJURE} || -n \ - ${VALIDATE_CLOUDFORMATION} || -n \ - ${VALIDATE_COFFEE} || -n \ - ${VALIDATE_CSS} || -n \ - ${VALIDATE_DART} || -n \ - ${VALIDATE_DOCKER} || -n \ - ${VALIDATE_EDITORCONFIG} || -n \ - ${VALIDATE_ENV} || -n \ - ${VALIDATE_GO} || -n \ - ${VALIDATE_HTML} || -n \ - ${VALIDATE_JAVASCRIPT_ES} || -n \ - ${VALIDATE_JAVASCRIPT_STANDARD} || -n \ - ${VALIDATE_JSON} || -n \ - ${VALIDATE_KOTLIN} || -n \ - ${VALIDATE_MARKDOWN} || -n \ - ${VALIDATE_OPENAPI} || -n \ - ${VALIDATE_PERL} || -n \ - ${VALIDATE_PHP} || -n \ - ${VALIDATE_POWERSHELL} || -n \ - ${VALIDATE_PROTOBUF} || -n \ - ${VALIDATE_PYTHON} || -n \ - ${VALIDATE_RAKU} || -n \ - ${VALIDATE_RUBY} || -n \ - ${VALIDATE_TERRAFORM} || -n \ - ${VALIDATE_TYPESCRIPT_ES} || -n \ - ${VALIDATE_TYPESCRIPT_STANDARD} || -n \ - ${VALIDATE_XML} || -n \ - ${VALIDATE_YAML} ]]; then - ANY_SET="true" - fi - - #################################### - # Validate if we should check YAML # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_YAML} ]]; then - # YAML flag was not set - default to false - VALIDATE_YAML="false" + # Loop through all languages + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do + # build the variable + VALIDATE_LANGUAGE="VALIDATE_${LANGUAGE}" + # Check to see if the variable was set + if [ -n ${!VALIDATE_LANGUAGE} ]; then + # It was set, need to set flag + ANY_SET="true" fi - else - # No linter flags were set - default all to true - VALIDATE_YAML="true" - fi + done - #################################### - # Validate if we should check JSON # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_JSON} ]]; then - # JSON flag was not set - default to false - VALIDATE_JSON="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_JSON="true" - fi - - ################################### - # Validate if we should check XML # - ################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_XML} ]]; then - # XML flag was not set - default to false - VALIDATE_XML="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_XML="true" - fi - - ######################################## - # Validate if we should check MARKDOWN # - ######################################## - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_MARKDOWN} ]]; then - # MD flag was not set - default to false - VALIDATE_MARKDOWN="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_MARKDOWN="true" - fi - - #################################### - # Validate if we should check BASH # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_BASH} ]]; then - # BASH flag was not set - default to false - VALIDATE_BASH="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_BASH="true" - fi - - #################################### - # Validate if we should check PERL # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_PERL} ]]; then - # PERL flag was not set - default to false - VALIDATE_PERL="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_PERL="true" - fi - - #################################### - # Validate if we should check RAKU # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_RAKU} ]]; then - # RAKU flag was not set - default to false - VALIDATE_RAKU="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_RAKU="true" - fi - - #################################### - # Validate if we should check PHP # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_PHP} ]]; then - # PHP flag was not set - default to false - VALIDATE_PHP="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_PHP="true" - fi - - ###################################### - # Validate if we should check PYTHON # - ###################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_PYTHON} ]]; then - # PYTHON flag was not set - default to false - VALIDATE_PYTHON="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_PYTHON="true" - fi - - #################################### - # Validate if we should check RUBY # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_RUBY} ]]; then - # RUBY flag was not set - default to false - VALIDATE_RUBY="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_RUBY="true" - fi - - ########################################## - # Validate if we should check AWS States # - ########################################## - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_STATES} ]]; then - # STATES flag was not set - default to false - VALIDATE_STATES="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_STATES="true" - fi - - ###################################### - # Validate if we should check COFFEE # - ###################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_COFFEE} ]]; then - # COFFEE flag was not set - default to false - VALIDATE_COFFEE="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_COFFEE="true" - fi - - ####################################### - # Validate if we should check ANSIBLE # - ####################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_ANSIBLE} ]]; then - # ANSIBLE flag was not set - default to false - VALIDATE_ANSIBLE="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_ANSIBLE="true" - fi - - ############################################# - # Validate if we should check JAVASCRIPT_ES # - ############################################# - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_JAVASCRIPT_ES} ]]; then - # JAVASCRIPT_ES flag was not set - default to false - VALIDATE_JAVASCRIPT_ES="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_JAVASCRIPT_ES="true" - fi ################################################### - # Validate if we should check JAVASCRIPT_STANDARD # + # Validate if we should check individual lanuages # ################################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_JAVASCRIPT_STANDARD} ]]; then - # JAVASCRIPT_STANDARD flag was not set - default to false - VALIDATE_JAVASCRIPT_STANDARD="false" + # Loop through all languages + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do + # build the variable + VALIDATE_LANGUAGE="VALIDATE_${LANGUAGE}" + # Check if ANY_SET was set + if [[ ${ANY_SET} == "true" ]]; then + # Check to see if the variable was set + if [ -z ${!VALIDATE_LANGUAGE} ]; then + # Flag was not set, default to false + eval "${VALIDATE_LANGUAGE}='false'" + fi + else + # No linter flags were set - default all to true + eval "${VALIDATE_LANGUAGE}='true'" fi - else - # No linter flags were set - default all to true - VALIDATE_JAVASCRIPT_STANDARD="true" - fi - - ############################################# - # Validate if we should check JSX # - ############################################# - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_JSX} ]]; then - # JSX flag was not set - default to false - VALIDATE_JSX="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_JSX="true" - fi - - ############################################# - # Validate if we should check TSX # - ############################################# - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_TSX} ]]; then - # TSX flag was not set - default to false - VALIDATE_TSX="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_TSX="true" - fi - - ############################################# - # Validate if we should check TYPESCRIPT_ES # - ############################################# - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_TYPESCRIPT_ES} ]]; then - # TYPESCRIPT_ES flag was not set - default to false - VALIDATE_TYPESCRIPT_ES="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_TYPESCRIPT_ES="true" - fi - - ################################################### - # Validate if we should check TYPESCRIPT_STANDARD # - ################################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_TYPESCRIPT_STANDARD} ]]; then - # TYPESCRIPT_STANDARD flag was not set - default to false - VALIDATE_TYPESCRIPT_STANDARD="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_TYPESCRIPT_STANDARD="true" - fi - - ###################################### - # Validate if we should check DOCKER # - ###################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_DOCKER} ]]; then - # DOCKER flag was not set - default to false - VALIDATE_DOCKER="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_DOCKER="true" - fi - - ################################## - # Validate if we should check GO # - ################################## - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_GO} ]]; then - # GO flag was not set - default to false - VALIDATE_GO="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_GO="true" - fi - - ######################################### - # Validate if we should check TERRAFORM # - ######################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_TERRAFORM} ]]; then - # TERRAFORM flag was not set - default to false - VALIDATE_TERRAFORM="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_TERRAFORM="true" - fi - - ######################################### - # Validate if we should check POWERSHELL # - ######################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_POWERSHELL} ]]; then - # POWERSHELL flag was not set - default to false - VALIDATE_POWERSHELL="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_POWERSHELL="true" - fi - - ################################### - # Validate if we should check ARM # - ################################### - if [[ "${ANY_SET}" == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z "${VALIDATE_ARM}" ]]; then - # ARM flag was not set - default to false - VALIDATE_ARM="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_ARM="true" - fi - - ################################### - # Validate if we should check CSS # - ################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_CSS} ]]; then - # CSS flag was not set - default to false - VALIDATE_CSS="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_CSS="true" - fi - - ################################### - # Validate if we should check ENV # - ################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_ENV} ]]; then - # ENV flag was not set - default to false - VALIDATE_ENV="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_ENV="true" - fi - - ###################################### - # Validate if we should check KOTLIN # - ###################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_KOTLIN} ]]; then - # ENV flag was not set - default to false - VALIDATE_KOTLIN="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_KOTLIN="true" - fi - - #################################### - # Validate if we should check DART # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_DART} ]]; then - # ENV flag was not set - default to false - VALIDATE_DART="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_DART="true" - fi - - ####################################### - # Validate if we should check OPENAPI # - ####################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_OPENAPI} ]]; then - # OPENAPI flag was not set - default to false - VALIDATE_OPENAPI="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_OPENAPI="true" - fi - - ####################################### - # Validate if we should check PROTOBUF # - ####################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_PROTOBUF} ]]; then - # PROTOBUF flag was not set - default to false - VALIDATE_PROTOBUF="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_PROTOBUF="true" - fi - - ####################################### - # Validate if we should check Clojure # - ####################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_CLOJURE} ]]; then - # Clojure flag was not set - default to false - VALIDATE_CLOJURE="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_CLOJURE="true" - fi - - ############################################## - # Validate if we should check CloudFormation # - ############################################## - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_CLOUDFORMATION} ]]; then - # Cloud Formation flag was not set - default to false - VALIDATE_CLOUDFORMATION="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_CLOUDFORMATION="true" - fi - - ############################################ - # Validate if we should check editorconfig # - ############################################ - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_EDITORCONFIG} ]]; then - # EDITORCONFIG flag was not set - default to false - VALIDATE_EDITORCONFIG="false" - fi - else - # No linter flags were set - # special case checking for .editorconfig - if [ -f "${GITHUB_WORKSPACE}/.editorconfig" ]; then - VALIDATE_EDITORCONFIG="true" - fi - fi - - #################################### - # Validate if we should check HTML # - #################################### - if [[ ${ANY_SET} == "true" ]]; then - # Some linter flags were set - only run those set to true - if [[ -z ${VALIDATE_HTML} ]]; then - # HTML flag was not set - default to false - VALIDATE_HTML="false" - fi - else - # No linter flags were set - default all to true - VALIDATE_HTML="true" - fi + done ####################################### # Print which linters we are enabling # ####################################### - if [[ ${VALIDATE_YAML} == "true" ]]; then - PRINT_ARRAY+=("- Validating [YAML] files in code base...") - else - PRINT_ARRAY+=("- Excluding [YAML] files in code base...") - fi - if [[ ${VALIDATE_JSON} == "true" ]]; then - PRINT_ARRAY+=("- Validating [JSON] files in code base...") - else - PRINT_ARRAY+=("- Excluding [JSON] files in code base...") - fi - if [[ ${VALIDATE_XML} == "true" ]]; then - PRINT_ARRAY+=("- Validating [XML] files in code base...") - else - PRINT_ARRAY+=("- Excluding [XML] files in code base...") - fi - if [[ ${VALIDATE_MARKDOWN} == "true" ]]; then - PRINT_ARRAY+=("- Validating [MARKDOWN] files in code base...") - else - PRINT_ARRAY+=("- Excluding [MARKDOWN] files in code base...") - fi - if [[ ${VALIDATE_BASH} == "true" ]]; then - PRINT_ARRAY+=("- Validating [BASH] files in code base...") - else - PRINT_ARRAY+=("- Excluding [BASH] files in code base...") - fi - if [[ ${VALIDATE_PERL} == "true" ]]; then - PRINT_ARRAY+=("- Validating [PERL] files in code base...") - else - PRINT_ARRAY+=("- Excluding [PERL] files in code base...") - fi - if [[ ${VALIDATE_RAKU} == "true" ]]; then - PRINT_ARRAY+=("- Validating [RAKU] files in code base...") - else - PRINT_ARRAY+=("- Excluding [RAKU] files in code base...") - fi - if [[ ${VALIDATE_PHP} == "true" ]]; then - PRINT_ARRAY+=("- Validating [PHP] files in code base...") - else - PRINT_ARRAY+=("- Excluding [PHP] files in code base...") - fi - if [[ ${VALIDATE_PYTHON} == "true" ]]; then - PRINT_ARRAY+=("- Validating [PYTHON] files in code base...") - else - PRINT_ARRAY+=("- Excluding [PYTHON] files in code base...") - fi - if [[ ${VALIDATE_RUBY} == "true" ]]; then - PRINT_ARRAY+=("- Validating [RUBY] files in code base...") - else - PRINT_ARRAY+=("- Excluding [RUBY] files in code base...") - fi - if [[ ${VALIDATE_COFFEE} == "true" ]]; then - PRINT_ARRAY+=("- Validating [COFFEE] files in code base...") - else - PRINT_ARRAY+=("- Excluding [COFFEE] files in code base...") - fi - if [[ ${VALIDATE_ANSIBLE} == "true" ]]; then - PRINT_ARRAY+=("- Validating [ANSIBLE] files in code base...") - else - PRINT_ARRAY+=("- Excluding [ANSIBLE] files in code base...") - fi - if [[ ${VALIDATE_JAVASCRIPT_ES} == "true" ]]; then - PRINT_ARRAY+=("- Validating [JAVASCRIPT(eslint)] files in code base...") - else - PRINT_ARRAY+=("- Excluding [JAVASCRIPT(eslint)] files in code base...") - fi - if [[ ${VALIDATE_JAVASCRIPT_STANDARD} == "true" ]]; then - PRINT_ARRAY+=("- Validating [JAVASCRIPT(standard)] files in code base...") - else - PRINT_ARRAY+=("- Excluding [JAVASCRIPT(standard)] files in code base...") - fi - if [[ ${VALIDATE_TYPESCRIPT_ES} == "true" ]]; then - PRINT_ARRAY+=("- Validating [TYPESCRIPT(eslint)] files in code base...") - else - PRINT_ARRAY+=("- Excluding [TYPESCRIPT(eslint)] files in code base...") - fi - if [[ ${VALIDATE_TYPESCRIPT_STANDARD} == "true" ]]; then - PRINT_ARRAY+=("- Validating [TYPESCRIPT(standard)] files in code base...") - else - PRINT_ARRAY+=("- Excluding [TYPESCRIPT(standard)] files in code base...") - fi - if [[ ${VALIDATE_DOCKER} == "true" ]]; then - PRINT_ARRAY+=("- Validating [DOCKER] files in code base...") - else - PRINT_ARRAY+=("- Excluding [DOCKER] files in code base...") - fi - if [[ ${VALIDATE_GO} == "true" ]]; then - PRINT_ARRAY+=("- Validating [GOLANG] files in code base...") - else - PRINT_ARRAY+=("- Excluding [GOLANG] files in code base...") - fi - if [[ ${VALIDATE_TERRAFORM} == "true" ]]; then - PRINT_ARRAY+=("- Validating [TERRAFORM] files in code base...") - else - PRINT_ARRAY+=("- Excluding [TERRAFORM] files in code base...") - fi - if [[ ${VALIDATE_POWERSHELL} == "true" ]]; then - PRINT_ARRAY+=("- Validating [POWERSHELL] files in code base...") - else - PRINT_ARRAY+=("- Excluding [POWERSHELL] files in code base...") - fi - if [[ ${VALIDATE_ARM} == "true" ]]; then - PRINT_ARRAY+=("- Validating [ARM] files in code base...") - else - PRINT_ARRAY+=("- Excluding [ARM] files in code base...") - fi - if [[ ${VALIDATE_CSS} == "true" ]]; then - PRINT_ARRAY+=("- Validating [CSS] files in code base...") - else - PRINT_ARRAY+=("- Excluding [CSS] files in code base...") - fi - if [[ ${VALIDATE_CLOJURE} == "true" ]]; then - PRINT_ARRAY+=("- Validating [CLOJURE] files in code base...") - else - PRINT_ARRAY+=("- Excluding [CLOJURE] files in code base...") - fi - if [[ ${VALIDATE_CLOUDFORMATION} == "true" ]]; then - PRINT_ARRAY+=("- Validating [CLOUDFORMATION] files in code base...") - else - PRINT_ARRAY+=("- Excluding [CLOUDFORMATION] files in code base...") - fi - if [[ ${VALIDATE_ENV} == "true" ]]; then - PRINT_ARRAY+=("- Validating [ENV] files in code base...") - else - PRINT_ARRAY+=("- Excluding [ENV] files in code base...") - fi - if [[ ${VALIDATE_KOTLIN} == "true" ]]; then - PRINT_ARRAY+=("- Validating [KOTLIN] files in code base...") - else - PRINT_ARRAY+=("- Excluding [KOTLIN] files in code base...") - fi - if [[ ${VALIDATE_OPENAPI} == "true" ]]; then - PRINT_ARRAY+=("- Validating [OPENAPI] files in code base...") - else - PRINT_ARRAY+=("- Excluding [OPENAPI] files in code base...") - fi - if [[ ${VALIDATE_PROTOBUF} == "true" ]]; then - PRINT_ARRAY+=("- Validating [PROTOBUF] files in code base...") - else - PRINT_ARRAY+=("- Excluding [PROTOBUF] files in code base...") - fi - if [[ ${VALIDATE_DART} == "true" ]]; then - PRINT_ARRAY+=("- Validating [DART] files in code base...") - else - PRINT_ARRAY+=("- Excluding [DART] files in code base...") - fi - if [[ ${VALIDATE_EDITORCONFIG} == "true" ]]; then - PRINT_ARRAY+=("- Validating [EDITORCONFIG] files in code base...") - else - PRINT_ARRAY+=("- Excluding [EDITORCONFIG] files in code base...") - fi - if [[ ${VALIDATE_HTML} == "true" ]]; then - PRINT_ARRAY+=("- Validating [HTML] files in code base...") - else - PRINT_ARRAY+=("- Excluding [HTML] files in code base...") - fi - if [[ ${VALIDATE_STATES} == "true" ]]; then - PRINT_ARRAY+=("- Validating [AWS STATES] files in code base...") - else - PRINT_ARRAY+=("- Excluding [AWS STATES] files in code base...") - fi + # Loop through all languages + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do + # build the variable + VALIDATE_LANGUAGE="VALIDATE_${LANGUAGE}" + if [[ ${!VALIDATE_LANGUAGE} == "true" ]]; then + # We need to validate + PRINT_ARRAY+=("- Validating [$LANGUAGE] files in code base...") + else + # We are skipping the language + PRINT_ARRAY+=("- Excluding [$LANGUAGE] files in code base...") + fi + done ############################## # Validate Ansible Directory # From 5001845b7baf4c018e039cf35a418b7dbb3b7b1a Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:31:47 -0500 Subject: [PATCH 09/15] going soooo hard --- lib/validation.sh | 45 +++++++++------------------------------------ 1 file changed, 9 insertions(+), 36 deletions(-) diff --git a/lib/validation.sh b/lib/validation.sh index d13bb3f4..57aad373 100755 --- a/lib/validation.sh +++ b/lib/validation.sh @@ -46,40 +46,13 @@ function GetValidationInfo() { ################################ # Convert strings to lowercase # ################################ - VALIDATE_ANSIBLE="${VALIDATE_ANSIBLE,,}" - VALIDATE_ARM="${VALIDATE_ARM,,}" - VALIDATE_BASH="${VALIDATE_BASH,,}" - VALIDATE_CLOJURE="${VALIDATE_CLOJURE,,}" - VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION,,}" - VALIDATE_COFFEE="${VALIDATE_COFFEE,,}" - VALIDATE_CSS="${VALIDATE_CSS,,}" - VALIDATE_DART="${VALIDATE_DART,,}" - VALIDATE_DOCKER="${VALIDATE_DOCKER,,}" - VALIDATE_EDITORCONFIG="${VALIDATE_EDITORCONFIG,,}" - VALIDATE_ENV="${VALIDATE_ENV,,}" - VALIDATE_GO="${VALIDATE_GO,,}" - VALIDATE_HTML="${VALIDATE_HTML,,}" - VALIDATE_JAVASCRIPT_ES="${VALIDATE_JAVASCRIPT_ES,,}" - VALIDATE_JAVASCRIPT_STANDARD="${VALIDATE_JAVASCRIPT_STANDARD,,}" - VALIDATE_JSON="${VALIDATE_JSON,,}" - VALIDATE_JSX="${VALIDATE_JSX,,}" - VALIDATE_KOTLIN="${VALIDATE_KOTLIN,,}" - VALIDATE_MARKDOWN="${VALIDATE_MARKDOWN,,}" - VALIDATE_OPENAPI="${VALIDATE_OPENAPI,,}" - VALIDATE_PERL="${VALIDATE_PERL,,}" - VALIDATE_PHP="${VALIDATE_PHP,,}" - VALIDATE_POWERSHELL="${VALIDATE_POWERSHELL,,}" - VALIDATE_PROTOBUF="${VALIDATE_PROTOBUF,,}" - VALIDATE_PYTHON="${VALIDATE_PYTHON,,}" - VALIDATE_RAKU="${VALIDATE_RAKU,,}" - VALIDATE_RUBY="${VALIDATE_RUBY,,}" - VALIDATE_STATES="${VALIDATE_STATES,,}" - VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM,,}" - VALIDATE_TSX="${VALIDATE_TSX,,}" - VALIDATE_TYPESCRIPT_ES="${VALIDATE_TYPESCRIPT_ES,,}" - VALIDATE_TYPESCRIPT_STANDARD="${VALIDATE_TYPESCRIPT_STANDARD,,}" - VALIDATE_YAML="${VALIDATE_YAML,,}" - VALIDATE_XML="${VALIDATE_XML,,}" + # Loop through all languages + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do + # build the variable + VALIDATE_LANGUAGE="VALIDATE_${LANGUAGE}" + # Set the value of the var to lowercase + eval "${VALIDATE_LANGUAGE}=${!VALIDATE_LANGUAGE,,}" + done ################################################ # Determine if any linters were explicitly set # @@ -90,7 +63,7 @@ function GetValidationInfo() { # build the variable VALIDATE_LANGUAGE="VALIDATE_${LANGUAGE}" # Check to see if the variable was set - if [ -n ${!VALIDATE_LANGUAGE} ]; then + if [ -n "${!VALIDATE_LANGUAGE}" ]; then # It was set, need to set flag ANY_SET="true" fi @@ -107,7 +80,7 @@ function GetValidationInfo() { # Check if ANY_SET was set if [[ ${ANY_SET} == "true" ]]; then # Check to see if the variable was set - if [ -z ${!VALIDATE_LANGUAGE} ]; then + if [ -z "${!VALIDATE_LANGUAGE}" ]; then # Flag was not set, default to false eval "${VALIDATE_LANGUAGE}='false'" fi From f74fa431f4bda7ae562465ea68e7c591095c49a0 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:41:37 -0500 Subject: [PATCH 10/15] Cleanup of errors --- lib/linter.sh | 52 ++++++++++++++------------------------------------- 1 file changed, 14 insertions(+), 38 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index 516c9d3c..e9c156d2 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -205,7 +205,7 @@ REPORT_OUTPUT_FOLDER="${DEFAULT_WORKSPACE}/${OUTPUT_FOLDER}" # Location for the ########################## FILE_ARRAY_ARM=() # Array of files to check FILE_ARRAY_BASH=() # Array of files to check -FILE_ARRAY_CLOUDFORMATION=() # Array of files to check +FILE_ARRAY_CLOUDFORMATION=() # Array of files to check FILE_ARRAY_CLOJURE=() # Array of files to check FILE_ARRAY_COFFEESCRIPT=() # Array of files to check FILE_ARRAY_CSS=() # Array of files to check @@ -242,7 +242,7 @@ FILE_ARRAY_YML=() # Array of files to check ERRORS_FOUND_ANSIBLE=0 # Count of errors found ERRORS_FOUND_ARM=0 # Count of errors found ERRORS_FOUND_BASH=0 # Count of errors found -ERRORS_FOUND_CLOUDFORMATION=0 # Count of errors found +ERRORS_FOUND_CLOUDFORMATION=0 # Count of errors found ERRORS_FOUND_CLOJURE=0 # Count of errors found ERRORS_FOUND_CSS=0 # Count of errors found ERRORS_FOUND_COFFEESCRIPT=0 # Count of errors found @@ -962,42 +962,18 @@ Footer() { ############################### # Exit with 1 if errors found # ############################### - elif [ "${ERRORS_FOUND_ANSIBLE}" -ne 0 ] || - [ "${ERRORS_FOUND_ARM}" -ne 0 ] || - [ "${ERRORS_FOUND_BASH}" -ne 0 ] || - [ "${ERRORS_FOUND_CLOUDFORMATION}" -ne 0 ] || - [ "${ERRORS_FOUND_CLOJURE}" -ne 0 ] || - [ "${ERRORS_FOUND_COFFEESCRIPT}" -ne 0 ] || - [ "${ERRORS_FOUND_CSS}" -ne 0 ] || - [ "${ERRORS_FOUND_DART}" -ne 0 ] || - [ "${ERRORS_FOUND_DOCKER}" -ne 0 ] || - [ "${ERRORS_FOUND_ENV}" -ne 0 ] || - [ "${ERRORS_FOUND_GO}" -ne 0 ] || - [ "${ERRORS_FOUND_HTML}" -ne 0 ] || - [ "${ERRORS_FOUND_JAVASCRIPT_ES}" -ne 0 ] || - [ "${ERRORS_FOUND_JAVASCRIPT_STANDARD}" -ne 0 ] || - [ "${ERRORS_FOUND_JSON}" -ne 0 ] || - [ "${ERRORS_FOUND_JSX}" -ne 0 ] || - [ "${ERRORS_FOUND_KOTLIN}" -ne 0 ] || - [ "${ERRORS_FOUND_MARKDOWN}" -ne 0 ] || - [ "${ERRORS_FOUND_OPENAPI}" -ne 0 ] || - [ "${ERRORS_FOUND_PERL}" -ne 0 ] || - [ "${ERRORS_FOUND_PHP}" -ne 0 ] || - [ "${ERRORS_FOUND_POWERSHELL}" -ne 0 ] || - [ "${ERRORS_FOUND_PROTOBUF}" -ne 0 ] || - [ "${ERRORS_FOUND_PYTHON}" -ne 0 ] || - [ "${ERRORS_FOUND_RAKU}" -ne 0 ] || - [ "${ERRORS_FOUND_RUBY}" -ne 0 ] || - [ "${ERRORS_FOUND_STATES}" -ne 0 ] || - [ "${ERRORS_FOUND_TERRAFORM}" -ne 0 ] || - [ "${ERRORS_FOUND_TSX}" -ne 0 ] || - [ "${ERRORS_FOUND_TYPESCRIPT_ES}" -ne 0 ] || - [ "${ERRORS_FOUND_TYPESCRIPT_STANDARD}" -ne 0 ] || - [ "${ERRORS_FOUND_XML}" -ne 0 ] || - [ "${ERRORS_FOUND_YML}" -ne 0 ]; then - # Failed exit - echo -e "${NC}${F[R]}Exiting with errors found!${NC}" - exit 1 + elif + # Loop through all languages + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do + # build the variable + ERRORS_FOUND_LANGUAGE="ERRORS_FOUND_${LANGUAGE}" + # Check if error was found + if [ "${!ERRORS_FOUND_LANGUAGE}" -ne 0 ]; then + # Failed exit + echo -e "${NC}${F[R]}Exiting with errors found!${NC}" + exit 1 + fi + done else ################# # Footer prints # From 1249a930b7c283571fa264c5b4420bcb90d469d1 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:49:26 -0500 Subject: [PATCH 11/15] making cool moves --- lib/linter.sh | 83 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index e9c156d2..7346b0ec 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -890,12 +890,12 @@ CallStatusAPI() { fi } ################################################################################ -#### Function Footer ########################################################### -Footer() { +#### Function Reports ########################################################## +Reports() { echo "" echo "----------------------------------------------" echo "----------------------------------------------" - echo "The script has completed" + echo "Generated reports:" echo "----------------------------------------------" echo "----------------------------------------------" echo "" @@ -907,6 +907,25 @@ Footer() { echo "Reports generated in folder ${REPORT_OUTPUT_FOLDER}" fi + ################################ + # Prints for warnings if found # + ################################ + for TEST in "${WARNING_ARRAY_TEST[@]}"; do + echo -e "${NC}${F[Y]}WARN!${NC} Expected file to compare with was not found for ${TEST}${NC}" + done + +} +################################################################################ +#### Function Footer ########################################################### +Footer() { + echo "" + echo "----------------------------------------------" + echo "----------------------------------------------" + echo "The script has completed" + echo "----------------------------------------------" + echo "----------------------------------------------" + echo "" + #################################################### # Need to clean up the lanuage array of duplicates # #################################################### @@ -946,45 +965,38 @@ Footer() { fi done - ################################ - # Prints for warnings if found # - ################################ - for TEST in "${WARNING_ARRAY_TEST[@]}"; do - echo -e "${NC}${F[Y]}WARN!${NC} Expected file to compare with was not found for ${TEST}${NC}" - done - ################################## # Exit with 0 if errors disabled # ################################## if [ "${DISABLE_ERRORS}" == "true" ]; then echo -e "${NC}${F[Y]}WARN!${NC} Exiting with exit code:[0] as:[DISABLE_ERRORS] was set to:[${DISABLE_ERRORS}]${NC}" exit 0 + fi + ############################### # Exit with 1 if errors found # ############################### - elif - # Loop through all languages - for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do - # build the variable - ERRORS_FOUND_LANGUAGE="ERRORS_FOUND_${LANGUAGE}" - # Check if error was found - if [ "${!ERRORS_FOUND_LANGUAGE}" -ne 0 ]; then - # Failed exit - echo -e "${NC}${F[R]}Exiting with errors found!${NC}" - exit 1 - fi - done - else - ################# - # Footer prints # - ################# - echo "" - echo -e "${NC}${F[G]}All file(s) linted successfully with no errors detected${NC}" - echo "----------------------------------------------" - echo "" - # Successful exit - exit 0 - fi + # Loop through all languages + for LANGUAGE in "${LANGUAGE_ARRAY[@]}"; do + # build the variable + ERRORS_FOUND_LANGUAGE="ERRORS_FOUND_${LANGUAGE}" + # Check if error was found + if [ "${!ERRORS_FOUND_LANGUAGE}" -ne 0 ]; then + # Failed exit + echo -e "${NC}${F[R]}Exiting with errors found!${NC}" + exit 1 + fi + done + + ######################## + # Footer prints Exit 0 # + ######################## + echo "" + echo -e "${NC}${F[G]}All file(s) linted successfully with no errors detected${NC}" + echo "----------------------------------------------" + echo "" + # Successful exit + exit 0 } ################################################################################ @@ -1513,6 +1525,11 @@ if [ "${VALIDATE_STATES}" == "true" ]; then LintCodebase "STATES" "asl-validator" "asl-validator --json-path" ".*\.\(json\)\$" "${FILE_ARRAY_STATES[@]}" fi +########### +# Reports # +########### +Reports + ########## # Footer # ########## From da67a885357540760fcbaec9b76589d3522f81f7 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:59:03 -0500 Subject: [PATCH 12/15] fix fun else --- lib/linter.sh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index 7346b0ec..e080cfeb 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -954,14 +954,12 @@ Footer() { # Create status API for Failed language # ######################################### CallStatusAPI "${LANGUAGE}" "error" - else + ###################################### + # Check if we validated the langauge # + ###################################### + elif [ "${!ERROR_COUNTER}" -eq 0 ] && [[ "${UNIQUE_LINTED_ARRAY[*]}" =~ ${LANGUAGE} ]]; then # No errors found when linting the language - ###################################### - # Check if we validated the langauge # - ###################################### - if [[ "${UNIQUE_LINTED_ARRAY[*]}" =~ ${LANGUAGE} ]]; then - CallStatusAPI "${LANGUAGE}" "success" - fi + CallStatusAPI "${LANGUAGE}" "success" fi done From a0ff3df431437a683ccffa149a054cb03aaf407e Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Wed, 22 Jul 2020 15:41:08 -0500 Subject: [PATCH 13/15] imports and exports --- lib/linter.sh | 99 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index e080cfeb..3ac5ea63 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -239,39 +239,72 @@ FILE_ARRAY_YML=() # Array of files to check ############ # Counters # ############ -ERRORS_FOUND_ANSIBLE=0 # Count of errors found -ERRORS_FOUND_ARM=0 # Count of errors found -ERRORS_FOUND_BASH=0 # Count of errors found -ERRORS_FOUND_CLOUDFORMATION=0 # Count of errors found -ERRORS_FOUND_CLOJURE=0 # Count of errors found -ERRORS_FOUND_CSS=0 # Count of errors found -ERRORS_FOUND_COFFEESCRIPT=0 # Count of errors found -ERRORS_FOUND_DART=0 # Count of errors found -ERRORS_FOUND_DOCKER=0 # Count of errors found -ERRORS_FOUND_ENV=0 # Count of errors found -ERRORS_FOUND_GO=0 # Count of errors found -ERRORS_FOUND_HTML=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_JSON=0 # Count of errors found -ERRORS_FOUND_JSX=0 # Count of errors found -ERRORS_FOUND_KOTLIN=0 # Count of errors found -ERRORS_FOUND_MARKDOWN=0 # Count of errors found -ERRORS_FOUND_OPENAPI=0 # Count of errors found -ERRORS_FOUND_PERL=0 # Count of errors found -ERRORS_FOUND_PHP=0 # Count of errors found -ERRORS_FOUND_POWERSHELL=0 # Count of errors found -ERRORS_FOUND_PROTOBUF=0 # Count of errors found -ERRORS_FOUND_PYTHON=0 # Count of errors found -ERRORS_FOUND_RAKU=0 # Count of errors found -ERRORS_FOUND_RUBY=0 # Count of errors found -ERRORS_FOUND_STATES=0 # Count of errors found -ERRORS_FOUND_TERRAFORM=0 # Count of errors found -ERRORS_FOUND_TSX=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_XML=0 # Count of errors found -ERRORS_FOUND_YML=0 # Count of errors found +ERRORS_FOUND_ANSIBLE=0 # Count of errors found +export ERRORS_FOUND_ANSIBLE # Workaround SC2034 +ERRORS_FOUND_ARM=0 # Count of errors found +export ERRORS_FOUND_ARM # Workaround SC2034 +ERRORS_FOUND_BASH=0 # Count of errors found +export ERRORS_FOUND_BASH # Workaround SC2034 +ERRORS_FOUND_CLOUDFORMATION=0 # Count of errors found +export ERRORS_FOUND_CLOUDFORMATION # Workaround SC2034 +ERRORS_FOUND_CLOJURE=0 # Count of errors found +export ERRORS_FOUND_CLOJURE # Workaround SC2034 +ERRORS_FOUND_CSS=0 # Count of errors found +export ERRORS_FOUND_CSS # Workaround SC2034 +ERRORS_FOUND_COFFEESCRIPT=0 # Count of errors found +export ERRORS_FOUND_COFFEESCRIPT # Workaround SC2034 +ERRORS_FOUND_DART=0 # Count of errors found +export ERRORS_FOUND_DART # Workaround SC2034 +ERRORS_FOUND_DOCKER=0 # Count of errors found +export ERRORS_FOUND_DOCKER # Workaround SC2034 +ERRORS_FOUND_ENV=0 # Count of errors found +export ERRORS_FOUND_ENV # Workaround SC2034 +ERRORS_FOUND_GO=0 # Count of errors found +export ERRORS_FOUND_GO # Workaround SC2034 +ERRORS_FOUND_HTML=0 # Count of errors found +export ERRORS_FOUND_HTML # Workaround SC2034 +ERRORS_FOUND_JAVASCRIPT_STANDARD=0 # Count of errors found +export ERRORS_FOUND_JAVASCRIPT_STANDARD # Workaround SC2034 +ERRORS_FOUND_JAVASCRIPT_ES=0 # Count of errors found +export ERRORS_FOUND_JAVASCRIPT_ES # Workaround SC2034 +ERRORS_FOUND_JSON=0 # Count of errors found +export ERRORS_FOUND_JSON # Workaround SC2034 +ERRORS_FOUND_JSX=0 # Count of errors found +export ERRORS_FOUND_JSX # Workaround SC2034 +ERRORS_FOUND_KOTLIN=0 # Count of errors found +export ERRORS_FOUND_KOTLIN # Workaround SC2034 +ERRORS_FOUND_MARKDOWN=0 # Count of errors found +export ERRORS_FOUND_MARKDOWN # Workaround SC2034 +ERRORS_FOUND_OPENAPI=0 # Count of errors found +export ERRORS_FOUND_OPENAPI # Workaround SC2034 +ERRORS_FOUND_PERL=0 # Count of errors found +export ERRORS_FOUND_PERL # Workaround SC2034 +ERRORS_FOUND_PHP=0 # Count of errors found +export ERRORS_FOUND_PHP # Workaround SC2034 +ERRORS_FOUND_POWERSHELL=0 # Count of errors found +export ERRORS_FOUND_POWERSHELL # Workaround SC2034 +ERRORS_FOUND_PROTOBUF=0 # Count of errors found +export ERRORS_FOUND_PROTOBUF # Workaround SC2034 +ERRORS_FOUND_PYTHON=0 # Count of errors found +export ERRORS_FOUND_PYTHON # Workaround SC2034 +ERRORS_FOUND_RAKU=0 # Count of errors found +export ERRORS_FOUND_RAKU # Workaround SC2034 +ERRORS_FOUND_RUBY=0 # Count of errors found +export ERRORS_FOUND_RUBY # Workaround SC2034 +ERRORS_FOUND_STATES=0 # Count of errors found +export ERRORS_FOUND_STATES # Workaround SC2034 +ERRORS_FOUND_TERRAFORM=0 # Count of errors found +export ERRORS_FOUND_TERRAFORM # Workaround SC2034 +ERRORS_FOUND_TSX=0 # Count of errors found +export ERRORS_FOUND_TSX # Workaround SC2034 +ERRORS_FOUND_TYPESCRIPT_STANDARD=0 # Count of errors found +export ERRORS_FOUND_TYPESCRIPT_STANDARD # Workaround SC2034 +ERRORS_FOUND_TYPESCRIPT_ES=0 # Count of errors found +export ERRORS_FOUND_TYPESCRIPT_ES # Workaround SC2034 +ERRORS_FOUND_XML=0 # Count of errors found +export ERRORS_FOUND_XML # Workaround SC2034 +ERRORS_FOUND_YML=0 # Count of errors found +export ERRORS_FOUND_YML # Workaround SC2034 ################################################################################ ########################## FUNCTIONS BELOW ##################################### From b15fa8c738e98c33b5597841e58ed0d453f1d1a4 Mon Sep 17 00:00:00 2001 From: Gabo Date: Thu, 23 Jul 2020 00:30:12 -0500 Subject: [PATCH 14/15] Added case for special types like open api --- lib/linter.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index c489a260..1ade97b7 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1188,11 +1188,31 @@ fi # CFN LINTING # ############### if [ "${VALIDATE_CFN}" == "true" ]; then + # If we are validating all codebase we need to build file list because not every yml/json file is an CFN file + if [ "${VALIDATE_ALL_CODEBASE}" == "true" ]; then + ############################################################################### + # Set the file seperator to newline to allow for grabbing objects with spaces # + ############################################################################### + IFS=$'\n' + + mapfile -t LIST_FILES < <(find "${GITHUB_WORKSPACE}" -type f -regex ".*\.\(yml\|yaml\|json\)\$" 2>&1) + for FILE in "${LIST_FILES[@]}"; do + if DetectCloudFormationFile "${FILE}"; then + FILE_ARRAY_CFN+=("${FILE}") + fi + done + + ########################### + # Set IFS back to default # + ########################### + IFS="${DEFAULT_IFS}" + fi + ################################# # Lint the CloudFormation files # ################################# # LintCodebase "FILE_TYPE" "LINTER_NAME" "LINTER_CMD" "FILE_TYPES_REGEX" "FILE_ARRAY" - LintCodebase "CFN" "cfn-lint" "cfn-lint --config-file ${CFN_LINTER_RULES}" ".*\.\(json\|yml\|yaml\)\$" "${FILE_ARRAY_CFN[@]}" + LintCodebase "CFN" "cfn-lint" "cfn-lint --config-file ${CFN_LINTER_RULES}" "disabledfileext" "${FILE_ARRAY_CFN[@]}" fi ################ @@ -1475,11 +1495,31 @@ fi # ARM Template LINTING # ######################## if [ "${VALIDATE_ARM}" == "true" ]; then + # If we are validating all codebase we need to build file list because not every json file is an ARM file + if [ "${VALIDATE_ALL_CODEBASE}" == "true" ]; then + ############################################################################### + # Set the file seperator to newline to allow for grabbing objects with spaces # + ############################################################################### + IFS=$'\n' + + mapfile -t LIST_FILES < <(find "${GITHUB_WORKSPACE}" -type f -regex ".*\.\(json\)\$" 2>&1) + for FILE in "${LIST_FILES[@]}"; do + if DetectARMFile "${FILE}"; then + FILE_ARRAY_ARM+=("${FILE}") + fi + done + + ########################### + # Set IFS back to default # + ########################### + IFS="${DEFAULT_IFS}" + fi + ############################### # Lint the ARM Template files # ############################### # LintCodebase "FILE_TYPE" "LINTER_NAME" "LINTER_CMD" "FILE_TYPES_REGEX" "FILE_ARRAY" - LintCodebase "ARM" "arm-ttk" "Import-Module ${ARM_TTK_PSD1} ; \${config} = \$(Import-PowerShellDataFile -Path ${ARM_LINTER_RULES}) ; Test-AzTemplate @config -TemplatePath" ".*\.\(json\)\$" "${FILE_ARRAY_ARM[@]}" + LintCodebase "ARM" "arm-ttk" "Import-Module ${ARM_TTK_PSD1} ; \${config} = \$(Import-PowerShellDataFile -Path ${ARM_LINTER_RULES}) ; Test-AzTemplate @config -TemplatePath" "disabledfileext" "${FILE_ARRAY_ARM[@]}" fi ################### @@ -1531,10 +1571,30 @@ fi # AWS STATES LINTING # ###################### if [ "${VALIDATE_STATES}" == "true" ]; then + # If we are validating all codebase we need to build file list because not every json file is an aws states file + if [ "${VALIDATE_ALL_CODEBASE}" == "true" ]; then + ############################################################################### + # Set the file seperator to newline to allow for grabbing objects with spaces # + ############################################################################### + IFS=$'\n' + + mapfile -t LIST_FILES < <(find "${GITHUB_WORKSPACE}" -type f -regex ".*\.\(json\)\$" 2>&1) + for FILE in "${LIST_FILES[@]}"; do + if DetectAWSStatesFIle "${FILE}"; then + FILE_ARRAY_STATES+=("${FILE}") + fi + done + + ########################### + # Set IFS back to default # + ########################### + IFS="${DEFAULT_IFS}" + fi + ######################### # Lint the STATES files # ######################### - LintCodebase "STATES" "asl-validator" "asl-validator --json-path" ".*\.\(json\)\$" "${FILE_ARRAY_STATES[@]}" + LintCodebase "STATES" "asl-validator" "asl-validator --json-path" "disabledfileext" "${FILE_ARRAY_STATES[@]}" fi ########## From 677d19fbbf734ad7aaf169fa1fbbf32294c57c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20B=C3=BCschel?= Date: Thu, 23 Jul 2020 21:18:49 +0800 Subject: [PATCH 15/15] chore: remove redundant package-lock.json --- .gitignore | 1 + package-lock.json | 545 ---------------------------------------------- 2 files changed, 1 insertion(+), 545 deletions(-) delete mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index df2846f3..5ab6c13d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* +/package-lock.json # Runtime data pids diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 33b3caa3..00000000 --- a/package-lock.json +++ /dev/null @@ -1,545 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "htmlhint": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-0.14.1.tgz", - "integrity": "sha512-VWKrljlwF8tEKH48YPfC30zYKhrsMqm70d7vXswivEqd3DSva8ZlIzfeCa3YWFEFRIIhiXKgKurlqEpCtYMCAA==", - "dev": true, - "requires": { - "async": "3.2.0", - "chalk": "4.0.0", - "commander": "5.1.0", - "glob": "7.1.6", - "parse-glob": "3.0.4", - "request": "2.88.2", - "strip-json-comments": "3.1.0", - "xml": "1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==" - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" - } - } -}