From 976bc9c852a50d4d24074950f68a810ed6774433 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 15:12:41 -0400 Subject: [PATCH 01/12] Add environment variable for disabling errors --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 89eab906..bd8bce43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -125,7 +125,8 @@ ENV GITHUB_SHA=${GITHUB_SHA} \ ANSIBLE_DIRECTORY=${ANSIBLE_DIRECTORY} \ RUN_LOCAL=${RUN_LOCAL} \ TEST_CASE_RUN=${TEST_CASE_RUN} \ - ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG} + ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG} \ + DISABLE_ERRORS=${DISABLE_ERRORS} ############################# # Copy scripts to container # From 4d2b216eaf25247d5fd6500feb8d3af1e42e434c Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 15:17:59 -0400 Subject: [PATCH 02/12] Add variable and default --- lib/linter.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/linter.sh b/lib/linter.sh index 4ea4461b..92897eec 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -89,6 +89,7 @@ VALIDATE_DOCKER="${VALIDATE_DOCKER}" # Boolean to validate lang VALIDATE_GO="${VALIDATE_GO}" # Boolean to validate language VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM}" # Boolean to validate language TEST_CASE_RUN="${TEST_CASE_RUN}" # Boolean to validate only test cases +DISABLE_ERRORS="${DISABLE_ERRORS}" # Boolean to enable warning-only output without throwing errors ############## # Debug Vars # @@ -108,6 +109,7 @@ DEFAULT_ACTIONS_RUNNER_DEBUG='false' # Default value for debugg RAW_FILE_ARRAY=() # Array of all files that were changed READ_ONLY_CHANGE_FLAG=0 # Flag set to 1 if files changed are not txt or md TEST_CASE_FOLDER='.automation/test' # Folder for test cases we should always ignore +DEFULAT_DISABLE_ERRORS='false' # Default to enabling errors ########################## # Array of changed files # From 2338c2c98ed3e43c9affd508bd1314600993f262 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 15:22:13 -0400 Subject: [PATCH 03/12] Parse DEFAULT_ERRORS variable --- lib/linter.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/linter.sh b/lib/linter.sh index 92897eec..4188f6af 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1096,6 +1096,30 @@ GetValidationInfo() # Set the value ANSIBLE_DIRECTORY="$TEMP_ANSIBLE_DIRECTORY" fi + + ############################### + # Get the disable errors flag # + ############################### + if [ -z "$DISABLE_ERRORS" ]; then + ################################## + # No flag passed, set to default # + ################################## + DISABLE_ERRORS="$DEFAULT_DISABLE_ERRORS" + fi + + ############################### + # Convert string to lowercase # + ############################### + DSIABLE_ERRORS=$(echo "$DISABLE_ERRORS" | awk '{print tolower($0)}') + + ############################ + # Set to false if not true # + ############################ + if [ "$DISABLE_ERRORS" != "true" ]; then + ACTIONS_RUNNER_DEBUG="false" + fi + + ############################ # Get the run verbose flag # From ff19ebe77d28621cc482b3a028da6d739d384dcc Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 15:24:47 -0400 Subject: [PATCH 04/12] exit early if errors are disabled --- lib/linter.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/linter.sh b/lib/linter.sh index 4188f6af..f72f3e03 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1895,6 +1895,14 @@ Footer() fi done + ################################## + # Exit with 0 if errors disabled # + ################################## + + if ${ERRORS_DISABLED} then + exit 0 + fi + ############################### # Exit with 1 if errors found # ############################### From cf8b1eddfe41db50e98843e07c71796b3af5940b Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 15:25:54 -0400 Subject: [PATCH 05/12] Update lib/linter.sh --- lib/linter.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linter.sh b/lib/linter.sh index f72f3e03..021fa960 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1116,7 +1116,7 @@ GetValidationInfo() # Set to false if not true # ############################ if [ "$DISABLE_ERRORS" != "true" ]; then - ACTIONS_RUNNER_DEBUG="false" + DISABLE_ERRORS="false" fi From 49c6b4fa7d7be72438a9a6c6cc437a2b542a1e28 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 15:26:21 -0400 Subject: [PATCH 06/12] Update lib/linter.sh --- lib/linter.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linter.sh b/lib/linter.sh index 021fa960..5c81665f 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1899,7 +1899,7 @@ Footer() # Exit with 0 if errors disabled # ################################## - if ${ERRORS_DISABLED} then + if ${DISABLE_ERRORS} then exit 0 fi From 95af99a134d4cf50be67f4f856e14f7a32506e61 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 16:47:05 -0400 Subject: [PATCH 07/12] Update lib/linter.sh --- lib/linter.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linter.sh b/lib/linter.sh index 5c81665f..719aa9e0 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -109,7 +109,7 @@ DEFAULT_ACTIONS_RUNNER_DEBUG='false' # Default value for debugg RAW_FILE_ARRAY=() # Array of all files that were changed READ_ONLY_CHANGE_FLAG=0 # Flag set to 1 if files changed are not txt or md TEST_CASE_FOLDER='.automation/test' # Folder for test cases we should always ignore -DEFULAT_DISABLE_ERRORS='false' # Default to enabling errors +DEFAULT_DISABLE_ERRORS='false' # Default to enabling errors ########################## # Array of changed files # From dc881c2d1ab3196175244032eceb3a92d24d535c Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Thu, 18 Jun 2020 16:47:52 -0400 Subject: [PATCH 08/12] Update lib/linter.sh --- lib/linter.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linter.sh b/lib/linter.sh index 719aa9e0..6fa50fae 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1110,7 +1110,7 @@ GetValidationInfo() ############################### # Convert string to lowercase # ############################### - DSIABLE_ERRORS=$(echo "$DISABLE_ERRORS" | awk '{print tolower($0)}') + DISABLE_ERRORS=$(echo "$DISABLE_ERRORS" | awk '{print tolower($0)}') ############################ # Set to false if not true # From df54ef21376c80b507ec13381f600bf989710478 Mon Sep 17 00:00:00 2001 From: Artem Medvedev Date: Fri, 19 Jun 2020 20:32:07 +0300 Subject: [PATCH 09/12] Add dotenv-linter support to super-linter (#173) --- .automation/test/env/README.md | 13 +++++++ .automation/test/env/env_bad_1.env | 5 +++ .automation/test/env/env_good_1.env | 4 +++ Dockerfile | 7 ++++ README.md | 2 ++ docs/disabling-linters.md | 20 +++++++++++ lib/linter.sh | 54 ++++++++++++++++++++++++++--- 7 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 .automation/test/env/README.md create mode 100644 .automation/test/env/env_bad_1.env create mode 100644 .automation/test/env/env_good_1.env diff --git a/.automation/test/env/README.md b/.automation/test/env/README.md new file mode 100644 index 00000000..d2ef659d --- /dev/null +++ b/.automation/test/env/README.md @@ -0,0 +1,13 @@ +# ENV Test Cases +This folder holds the test cases for **ENV**. + +## Additional Docs +No Additional information is needed for this test case. + +## Good Test Cases +The test cases denoted: `LANGUAGE_good_FILE.EXTENSION` are all valid, and should pass successfully when linted. +- **Note:** They are linted utilizing the default linter rules. + +## Bad Test Cases +The test cases denoted: `LANGUAGE_bad_FILE.EXTENSION` are **NOT** valid, and should trigger errors when linted. +- **Note:** They are linted utilizing the default linter rules. diff --git a/.automation/test/env/env_bad_1.env b/.automation/test/env/env_bad_1.env new file mode 100644 index 00000000..7361eb11 --- /dev/null +++ b/.automation/test/env/env_bad_1.env @@ -0,0 +1,5 @@ + LOGGER_LEVEL=info +MY_ENV +DB-NAME=testing +DEbUG_hTTP=true +DB_NAME=development diff --git a/.automation/test/env/env_good_1.env b/.automation/test/env/env_good_1.env new file mode 100644 index 00000000..112599ec --- /dev/null +++ b/.automation/test/env/env_good_1.env @@ -0,0 +1,4 @@ +DB_NAME=development +DEBUG_HTTP=true +LOGGER_LEVEL=info +MY_ENV= diff --git a/Dockerfile b/Dockerfile index 7f655c31..04eaa5b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -102,6 +102,12 @@ RUN wget -O- -nvq https://raw.githubusercontent.com/golangci/golangci-lint/maste RUN curl -Ls "$(curl -Ls https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" -o tflint.zip && unzip tflint.zip && rm tflint.zip \ && mv "tflint" /usr/bin/ +################## +# Install dotenv-linter # +################## +RUN wget "https://github.com/dotenv-linter/dotenv-linter/releases/latest/download/dotenv-linter-alpine-x86_64.tar.gz" -O - -q | tar -xzf - \ + && mv "dotenv-linter" /usr/bin + ########################################### # Load GitHub Env Vars for GitHub Actions # ########################################### @@ -128,6 +134,7 @@ ENV GITHUB_SHA=${GITHUB_SHA} \ VALIDATE_GO=${VALIDATE_GO} \ VALIDATE_TERRAFORM=${VALIDATE_TERRAFORM} \ VALIDATE_CSS=${VALIDATE_CSS} \ + VALIDATE_ENV=${VALIDATE_ENV} \ ANSIBLE_DIRECTORY=${ANSIBLE_DIRECTORY} \ RUN_LOCAL=${RUN_LOCAL} \ TEST_CASE_RUN=${TEST_CASE_RUN} \ diff --git a/README.md b/README.md index b7f5455d..f2d11029 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Developers on **GitHub** can call the **GitHub Action** to lint their code base | **TypeScript** | [eslint](https://eslint.org/) [standard js](https://standardjs.com/) | | **XML** | [LibXML](http://xmlsoft.org/) | | **YAML** | [YamlLint](https://github.com/adrienverge/yamllint) | +| **ENV** | [dotenv-linter](https://github.com/dotenv-linter/dotenv-linter) | ## How to use To use this **GitHub** Action you will need to complete the following: @@ -135,6 +136,7 @@ and won't run anything unexpected. | **VALIDATE_GO** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_TERRAFORM** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_CSS** | `true` | Flag to enable or disable the linting process of the language. | +| **VALIDATE_ENV** | `true` | Flag to enable or disable the linting process of the language. | | **ANSIBLE_DIRECTORY** | `/ansible` | Flag to set the root directory for Ansible file location(s). | | **ACTIONS_RUNNER_DEBUG** | `false` | Flag to enable additional information about the linter, versions, and additional output. | | **DEFAULT_WORKSPACE** | `/tmp/lint` | The location containing files to lint if you are running locally. | diff --git a/docs/disabling-linters.md b/docs/disabling-linters.md index 92187192..00a6a2dd 100644 --- a/docs/disabling-linters.md +++ b/docs/disabling-linters.md @@ -21,6 +21,7 @@ Below is examples and documentation for each language and the various methods to - [Dockerfile](#dockerfile) - [Terraform](#terraform) - [CSS](#stylelint) +- [ENV](#dotenv-linter) @@ -544,3 +545,22 @@ a {} ] } ``` + +-------------------------------------------------------------------------------- + +## ENV +- [dotenv-linter](https://github.com/dotenv-linter/dotenv-linter) + +### dotenv-linter Config file +- There is no top level *configuration file* available at this time + +### dotenv-linter disable single line +``` +# Comment line will be ignored +``` + +### dotenv-linter disable code block +- There is currently **No** way to disable rules inline of the file(s) + +### dotenv-linter disable entire file +- There is currently **No** way to disable rules inline of the file(s) diff --git a/lib/linter.sh b/lib/linter.sh index b96f44ec..945caf21 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -59,14 +59,14 @@ CSS_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CSS_FILE_NAME" # Path to th LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck" "pylint" "perl" "rubocop" "coffeelint" "eslint" "standard" "ansible-lint" "/dockerfilelint/bin/dockerfilelint" "golangci-lint" "tflint" - "stylelint") + "stylelint" "dotenv-linter") ############################# # Language array for prints # ############################# LANGUAGE_ARRAY=('YML' 'JSON' 'XML' 'MARKDOWN' 'BASH' 'PERL' 'RUBY' 'PYTHON' 'COFFEESCRIPT' 'ANSIBLE' 'JAVASCRIPT_STANDARD' 'JAVASCRIPT_ES' - 'TYPESCRIPT_STANDARD' 'TYPESCRIPT_ES' 'DOCKER' 'GO' 'TERRAFORM' 'CSS') + 'TYPESCRIPT_STANDARD' 'TYPESCRIPT_ES' 'DOCKER' 'GO' 'TERRAFORM' 'CSS' "ENV") ################### # GitHub ENV Vars # @@ -95,6 +95,7 @@ VALIDATE_DOCKER="${VALIDATE_DOCKER}" # Boolean to validate lang VALIDATE_GO="${VALIDATE_GO}" # Boolean to validate language VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM}" # Boolean to validate language VALIDATE_CSS="${VALIDATE_CSS}" # Boolean to validate language +VALIDATE_ENV="${VALIDATE_ENV}" # Boolean to validate language TEST_CASE_RUN="${TEST_CASE_RUN}" # Boolean to validate only test cases ############## @@ -136,6 +137,7 @@ FILE_ARRAY_DOCKER=() # Array of files to check FILE_ARRAY_GO=() # Array of files to check FILE_ARRAY_TERRAFORM=() # Array of files to check FILE_ARRAY_CSS=() # Array of files to check +FILE_ARRAY_ENV=() # Array of files to check ############ # Counters # @@ -158,6 +160,7 @@ ERRORS_FOUND_DOCKER=0 # Count of errors found ERRORS_FOUND_GO=0 # Count of errors found ERRORS_FOUND_TERRAFORM=0 # Count of errors found ERRORS_FOUND_CSS=0 # Count of errors found +ERRORS_FOUND_ENV=0 # Count of errors found ################################################################################ ########################## FUNCTIONS BELOW ##################################### @@ -735,6 +738,7 @@ GetValidationInfo() VALIDATE_GO=$(echo "$VALIDATE_GO" | awk '{print tolower($0)}') VALIDATE_TERRAFORM=$(echo "$VALIDATE_TERRAFORM" | awk '{print tolower($0)}') VALIDATE_CSS=$(echo "$VALIDATE_CSS" | awk '{print tolower($0)') + VALIDATE_ENV=$(echo "$VALIDATE_ENV" | awk '{print tolower($0)') ################################################ # Determine if any linters were explicitly set # @@ -757,7 +761,8 @@ GetValidationInfo() -n "$VALIDATE_DOCKER" || \ -n "$VALIDATE_GO" || \ -n "$VALIDATE_TERRAFORM" || \ - -n "$VALIDATE_CSS" ]]; then + -n "$VALIDATE_CSS" || \ + -n "$VALIDATE_ENV" ]]; then ANY_SET="true" fi @@ -1013,6 +1018,20 @@ GetValidationInfo() 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 + ####################################### # Print which linters we are enabling # ####################################### @@ -1106,6 +1125,11 @@ GetValidationInfo() else PRINT_ARRAY+=("- Excluding [CSS] 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 ############################## # Validate Ansible Directory # @@ -1422,6 +1446,15 @@ BuildFileList() # Set the READ_ONLY_CHANGE_FLAG since this could be exec # ########################################################## READ_ONLY_CHANGE_FLAG=1 + elif [ "$FILE_TYPE" == "env" ]; then + ################################ + # Append the file to the array # + ################################ + FILE_ARRAY_ENV+=("$FILE") + ########################################################## + # Set the READ_ONLY_CHANGE_FLAG since this could be exec # + ########################################################## + READ_ONLY_CHANGE_FLAG=1 elif [ "$FILE" == "Dockerfile" ]; then ################################ # Append the file to the array # @@ -1928,7 +1961,8 @@ Footer() [ "$ERRORS_FOUND_GO" -ne 0 ] || \ [ "$ERRORS_FOUND_TERRAFORM" -ne 0 ] || \ [ "$ERRORS_FOUND_RUBY" -ne 0 ] || \ - [ "$ERRORS_FOUND_CSS" -ne 0 ]; then + [ "$ERRORS_FOUND_CSS" -ne 0 ] || \ + [ "$ERRORS_FOUND_ENV" -ne 0 ]; then # Failed exit echo "Exiting with errors found!" exit 1 @@ -1986,6 +2020,7 @@ RunTestCases() TestCodebase "ANSIBLE" "ansible-lint" "ansible-lint -v -c $ANSIBLE_LINTER_RULES" "ansible-lint" TestCodebase "TERRAFORM" "tflint" "tflint -c $TERRAFORM_LINTER_RULES" ".*\.\(tf\)\$" TestCodebase "CSS" "stylelint" "stylelint --config $CSS_LINTER_RULES" ".*\.\(css\)\$" + TestCodebase "ENV" "dotenv-linter" "dotenv-linter" ".*\.\(env\)\$" ################# # Footer prints # @@ -2271,6 +2306,17 @@ if [ "$VALIDATE_CSS" == "true" ]; then LintCodebase "CSS" "stylelint" "stylelint --config $CSS_LINTER_RULES" ".*\.\(css\)\$" "${FILE_ARRAY_CSS[@]}" fi +################ +# ENV LINTING # +################ +if [ "$VALIDATE_ENV" == "true" ]; then + ####################### + # Lint the env files # + ####################### + # LintCodebase "FILE_TYPE" "LINTER_NAME" "LINTER_CMD" "FILE_TYPES_REGEX" "FILE_ARRAY" + LintCodebase "ENV" "dotenv-linter" "dotenv-linter" ".*\.\(env\)\$" "${FILE_ARRAY_ENV[@]}" +fi + ################## # DOCKER LINTING # ################## From 2f7f03efe36ee55c6cb58b2a33554f70b2affbf4 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Fri, 19 Jun 2020 12:39:08 -0500 Subject: [PATCH 10/12] fixing logic --- lib/linter.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/linter.sh b/lib/linter.sh index 6fa50fae..01e85333 100755 --- a/lib/linter.sh +++ b/lib/linter.sh @@ -1096,7 +1096,7 @@ GetValidationInfo() # Set the value ANSIBLE_DIRECTORY="$TEMP_ANSIBLE_DIRECTORY" fi - + ############################### # Get the disable errors flag # ############################### @@ -1119,8 +1119,6 @@ GetValidationInfo() DISABLE_ERRORS="false" fi - - ############################ # Get the run verbose flag # ############################ @@ -1898,15 +1896,13 @@ Footer() ################################## # Exit with 0 if errors disabled # ################################## - - if ${DISABLE_ERRORS} then + if [ "$DISABLE_ERRORS" == "true" ]; then + echo "WARN! Exiting with exit code:[0] as:[DISABLE_ERRORS] was set to:[$DISABLE_ERRORS]" exit 0 - fi - ############################### # Exit with 1 if errors found # ############################### - if [ "$ERRORS_FOUND_YML" -ne 0 ] || \ + elif [ "$ERRORS_FOUND_YML" -ne 0 ] || \ [ "$ERRORS_FOUND_JSON" -ne 0 ] || \ [ "$ERRORS_FOUND_XML" -ne 0 ] || \ [ "$ERRORS_FOUND_MARKDOWN" -ne 0 ] || \ From d5fa264b0def91474e83749540f38b97e3a0f3a2 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Fri, 19 Jun 2020 12:40:53 -0500 Subject: [PATCH 11/12] Adding flag to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2fd43bf2..5dff4639 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ and won't run anything unexpected. | **VALIDATE_TERRAFORM** | `true` | Flag to enable or disable the linting process of the language. | | **ANSIBLE_DIRECTORY** | `/ansible` | Flag to set the root directory for Ansible file location(s). | | **ACTIONS_RUNNER_DEBUG** | `false` | Flag to enable additional information about the linter, versions, and additional output. | +| **DISABLE_ERRORS** | `false` | Flag to have the linter complete with exit code 0 even if errors were detected. | ### Template rules files You can use the **GitHub** **Super-Linter** *with* or *without* your own personal rules sets. This allows for greater flexibility for each individual code base. The Template rules all try to follow the standards we believe should be enabled at the basic level. From 8409d58d6900954eae648afa6669e49e0895dc94 Mon Sep 17 00:00:00 2001 From: Lucas Gravley <29484535+admiralAwkbar@users.noreply.github.com> Date: Fri, 19 Jun 2020 12:59:06 -0500 Subject: [PATCH 12/12] adding fence language --- docs/disabling-linters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/disabling-linters.md b/docs/disabling-linters.md index 00a6a2dd..0a2af8b6 100644 --- a/docs/disabling-linters.md +++ b/docs/disabling-linters.md @@ -555,7 +555,7 @@ a {} - There is no top level *configuration file* available at this time ### dotenv-linter disable single line -``` +```env # Comment line will be ignored ```