mirror of
https://github.com/super-linter/super-linter.git
synced 2024-11-25 10:10:56 -05:00
Merge branch 'master' into Groovy
This commit is contained in:
commit
40dc32f670
99 changed files with 3434 additions and 1945 deletions
|
@ -1,23 +1,28 @@
|
|||
# .automation
|
||||
|
||||
This folder holds automation scripts to help `deploy` and `cleanup` **DockerHub** images of the **Super-Linter**
|
||||
|
||||
## cleanup-docker.sh
|
||||
|
||||
This script uses **GitHub Actions** so that when a PR is merged and closed, the **GitHub Action** is triggered.
|
||||
It will then search **DockerHub** for the image that was deployed during the development, and remove it.
|
||||
|
||||
## upload-docker.sh
|
||||
|
||||
This script uses **GitHub Actions** so that when a push to the repository is committed, it will complete the following:
|
||||
|
||||
- Checkout the source code
|
||||
- Build the **Docker** container for **Super-Linter** using that source code
|
||||
- Upload the container to **DockerHub**
|
||||
|
||||
When the script is triggered on master, it will push with the tag:**latest** which is used by all scripting for general availability.
|
||||
When the script is triggered in a branch, it will push with the tag:**NameOfBranch** which can be used for:
|
||||
- *testing*
|
||||
- *troubleshooting*
|
||||
- *debugging*
|
||||
|
||||
- _testing_
|
||||
- _troubleshooting_
|
||||
- _debugging_
|
||||
- **Note:** The branch name will be reduced to alphanumeric for consistency and uploading
|
||||
|
||||
## test
|
||||
|
||||
This folder holds all **Test Cases** to help run the *CI/CT/CD* process for the **Super-Linter**.
|
||||
This folder holds all **Test Cases** to help run the _CI/CT/CD_ process for the **Super-Linter**.
|
||||
|
|
|
@ -51,25 +51,25 @@ ValidateInput() {
|
|||
############################
|
||||
# Validate GITHUB_WORKSPACE #
|
||||
############################
|
||||
if [ -z "$GITHUB_WORKSPACE" ]; then
|
||||
if [ -z "${GITHUB_WORKSPACE}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [GITHUB_WORKSPACE]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$GITHUB_WORKSPACE]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${GITHUB_WORKSPACE}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo "Successfully found:[GITHUB_WORKSPACE], value:[$GITHUB_WORKSPACE]"
|
||||
echo "Successfully found:[GITHUB_WORKSPACE], value:[${GITHUB_WORKSPACE}]"
|
||||
fi
|
||||
|
||||
#######################
|
||||
# Validate IMAGE_REPO #
|
||||
#######################
|
||||
if [ -z "$IMAGE_REPO" ]; then
|
||||
if [ -z "${IMAGE_REPO}" ]; then
|
||||
# No repo was pulled
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [IMAGE_REPO]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$IMAGE_REPO]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${IMAGE_REPO}]${NC}"
|
||||
exit 1
|
||||
elif [[ $IMAGE_REPO == "github/super-linter" ]]; then
|
||||
elif [[ ${IMAGE_REPO} == "github/super-linter" ]]; then
|
||||
# Found our main repo
|
||||
echo "Successfully found:[IMAGE_REPO], value:[$IMAGE_REPO]"
|
||||
echo "Successfully found:[IMAGE_REPO], value:[${IMAGE_REPO}]"
|
||||
else
|
||||
# This is a fork and we cant pull vars or any info
|
||||
echo -e "${NC}${F[Y]}WARN!${NC} No image to cleanup as this is a forked branch, and not being built with current automation!${NC}"
|
||||
|
@ -79,31 +79,31 @@ ValidateInput() {
|
|||
##########################
|
||||
# Validate IMAGE_VERSION #
|
||||
##########################
|
||||
if [ -z "$IMAGE_VERSION" ]; then
|
||||
if [ -z "${IMAGE_VERSION}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [IMAGE_VERSION]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$IMAGE_VERSION]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${IMAGE_VERSION}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo "Successfully found:[IMAGE_VERSION], value:[$IMAGE_VERSION]"
|
||||
echo "Successfully found:[IMAGE_VERSION], value:[${IMAGE_VERSION}]"
|
||||
fi
|
||||
|
||||
############################
|
||||
# Validate DOCKER_USERNAME #
|
||||
############################
|
||||
if [ -z "$DOCKER_USERNAME" ]; then
|
||||
if [ -z "${DOCKER_USERNAME}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [DOCKER_USERNAME]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$DOCKER_USERNAME]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${DOCKER_USERNAME}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo "Successfully found:[DOCKER_USERNAME], value:[$DOCKER_USERNAME]"
|
||||
echo "Successfully found:[DOCKER_USERNAME], value:[${DOCKER_USERNAME}]"
|
||||
fi
|
||||
|
||||
############################
|
||||
# Validate DOCKER_PASSWORD #
|
||||
############################
|
||||
if [ -z "$DOCKER_PASSWORD" ]; then
|
||||
if [ -z "${DOCKER_PASSWORD}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [DOCKER_PASSWORD]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$DOCKER_PASSWORD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${DOCKER_PASSWORD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo "Successfully found:[DOCKER_PASSWORD], value:[********]"
|
||||
|
@ -112,11 +112,11 @@ ValidateInput() {
|
|||
##################################################
|
||||
# Check if we need to get the name of the branch #
|
||||
##################################################
|
||||
if [[ $IMAGE_VERSION != "latest" ]]; then
|
||||
if [[ ${IMAGE_VERSION} != "latest" ]]; then
|
||||
##################################
|
||||
# Remove non alpha-numeric chars #
|
||||
##################################
|
||||
IMAGE_VERSION=$(echo "$IMAGE_VERSION" | tr -cd '[:alnum:]')
|
||||
IMAGE_VERSION=$(echo "${IMAGE_VERSION}" | tr -cd '[:alnum:]')
|
||||
else
|
||||
#############################################
|
||||
# Image is 'latest' and we will not destroy #
|
||||
|
@ -142,7 +142,7 @@ LoginToDocker() {
|
|||
######################
|
||||
# Login to DockerHub #
|
||||
######################
|
||||
LOGIN_CMD=$(docker login --username "$DOCKER_USERNAME" --password "$DOCKER_PASSWORD" 2>&1)
|
||||
LOGIN_CMD=$(docker login --username "${DOCKER_USERNAME}" --password "${DOCKER_PASSWORD}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -152,10 +152,10 @@ LoginToDocker() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to authenticate to DockerHub!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$LOGIN_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${LOGIN_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# SUCCESS
|
||||
|
@ -170,7 +170,7 @@ RemoveImage() {
|
|||
################
|
||||
echo ""
|
||||
echo "----------------------------------------------"
|
||||
echo "Removing the DockerFile image:[$IMAGE_REPO:$IMAGE_VERSION]"
|
||||
echo "Removing the DockerFile image:[${IMAGE_REPO}:${IMAGE_VERSION}]"
|
||||
echo "----------------------------------------------"
|
||||
echo ""
|
||||
|
||||
|
@ -180,7 +180,7 @@ RemoveImage() {
|
|||
TOKEN=$(curl -s -k \
|
||||
-H "Content-Type: application/json" \
|
||||
-X POST \
|
||||
-d "{\"username\": \"$DOCKER_USERNAME\", \"password\": \"$DOCKER_PASSWORD\"}" \
|
||||
-d "{\"username\": \"${DOCKER_USERNAME}\", \"password\": \"${DOCKER_PASSWORD}\"}" \
|
||||
"https://hub.docker.com/v2/users/login/" | jq -r .token 2>&1)
|
||||
|
||||
#######################
|
||||
|
@ -191,10 +191,10 @@ RemoveImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to gain token from DockerHub!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$TOKEN]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${TOKEN}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# SUCCESS
|
||||
|
@ -204,9 +204,9 @@ RemoveImage() {
|
|||
#################################
|
||||
# Remove the tag from DockerHub #
|
||||
#################################
|
||||
REMOVE_CMD=$(curl "https://hub.docker.com/v2/repositories/$IMAGE_REPO/tags/$IMAGE_VERSION/" \
|
||||
REMOVE_CMD=$(curl "https://hub.docker.com/v2/repositories/${IMAGE_REPO}/tags/${IMAGE_VERSION}/" \
|
||||
-X DELETE \
|
||||
-H "Authorization: JWT $TOKEN" 2>&1)
|
||||
-H "Authorization: JWT ${TOKEN}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the ERROR_CODE #
|
||||
|
@ -216,14 +216,14 @@ RemoveImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to remove tag from DockerHub!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$REMOVE_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${REMOVE_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# SUCCESS
|
||||
echo "Successfully [removed] Docker image tag:[$IMAGE_VERSION] from DockerHub!"
|
||||
echo "Successfully [removed] Docker image tag:[${IMAGE_VERSION}] from DockerHub!"
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Test Cases
|
||||
|
||||
This folder holds `test cases` that are used to validate the sanity of the **Super-Linter**.
|
||||
The format:
|
||||
|
||||
- Each **Super-Linter** language should have its own folder
|
||||
- Folder(s) containing test cases for each language supported
|
||||
- Passing test case(s) per language denoted in naming scheme
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
# Ansible Test Cases
|
||||
|
||||
This folder holds the test cases for **Ansible**.
|
||||
|
||||
## Additional Docs
|
||||
|
||||
The folder **ghe-initialize** is pulled from the **GitHub-Demo-Stack** and is a valid **Ansible** role.
|
||||
|
||||
## 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.
|
||||
|
|
|
@ -26,23 +26,23 @@ CheckGHEPid()
|
|||
##################################
|
||||
# Check to prevent infinite loop #
|
||||
##################################
|
||||
if [ $PID_CHECK -gt $PID_CHECK_LIMIT ]; then
|
||||
if [ ${PID_CHECK} -gt ${PID_CHECK_LIMIT} ]; then
|
||||
# Over the limit, move on
|
||||
echo "We have checked the pid $PID_CHECK times, moving on..."
|
||||
echo "We have checked the pid ${PID_CHECK} times, moving on..."
|
||||
else
|
||||
################################################
|
||||
# Check to see if the PID is alive and running #
|
||||
################################################
|
||||
if [ ! -f "$GHE_CONFIG_PID" ]; then
|
||||
if [ ! -f "${GHE_CONFIG_PID}" ]; then
|
||||
# File not found
|
||||
echo "We're good to move forward, no .pid file found at:[$GHE_CONFIG_PID]"
|
||||
echo "We're good to move forward, no .pid file found at:[${GHE_CONFIG_PID}]"
|
||||
else
|
||||
# Found the pid running, need to sleep
|
||||
echo "Current PID found, sleeping $SLEEP_SECONDS seconds before next check..."
|
||||
echo "Current PID found, sleeping ${SLEEP_SECONDS} seconds before next check..."
|
||||
################
|
||||
# Sleep it off #
|
||||
################
|
||||
SLEEP_CMD=$(sleep $SLEEP_SECONDS 2>&1)
|
||||
SLEEP_CMD=$(sleep ${SLEEP_SECONDS} 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -52,9 +52,9 @@ CheckGHEPid()
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to sleep!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$SLEEP_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${SLEEP_CMD}]${NC}"
|
||||
echo "Will try to call apply as last effort..."
|
||||
####################################
|
||||
# Call config apply as last effort #
|
||||
|
@ -80,14 +80,14 @@ CheckGHEProcess()
|
|||
##################################
|
||||
# Check to prevent infinite loop #
|
||||
##################################
|
||||
if [ $PROCESS_CHECK -gt $PROCESS_CHECK_LIMIT ]; then
|
||||
if [ ${PROCESS_CHECK} -gt ${PROCESS_CHECK_LIMIT} ]; then
|
||||
# Over the limit, move on
|
||||
echo "We have checked the process $PROCESS_CHECK times, moving on..."
|
||||
echo "We have checked the process ${PROCESS_CHECK} times, moving on..."
|
||||
else
|
||||
####################################################
|
||||
# Check to see if the process is alive and running #
|
||||
####################################################
|
||||
CHECK_PROCESS_CMD=$(pgrep -f "$GHE_APPLY_COMMAND" 2>&1)
|
||||
CHECK_PROCESS_CMD=$(pgrep -f "${GHE_APPLY_COMMAND}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -97,16 +97,16 @@ CheckGHEProcess()
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# No process running on the system
|
||||
echo "Were good to move forward, no process like:[$GHE_APPLY_COMMAND] running currently on the system"
|
||||
echo "Were good to move forward, no process like:[${GHE_APPLY_COMMAND}] running currently on the system"
|
||||
else
|
||||
# Found the process running, need to sleep
|
||||
echo "Current process alive:[$CHECK_PROCESS_CMD], sleeping $SLEEP_SECONDS seconds before next check..."
|
||||
echo "Current process alive:[${CHECK_PROCESS_CMD}], sleeping ${SLEEP_SECONDS} seconds before next check..."
|
||||
################
|
||||
# Sleep it off #
|
||||
################
|
||||
SLEEP_CMD=$(sleep $SLEEP_SECONDS 2>&1)
|
||||
SLEEP_CMD=$(sleep ${SLEEP_SECONDS} 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -116,9 +116,9 @@ CheckGHEProcess()
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to sleep!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$SLEEP_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${SLEEP_CMD}]${NC}"
|
||||
echo "Will try to call apply as last effort..."
|
||||
####################################
|
||||
# Call config apply as last effort #
|
||||
|
@ -144,7 +144,7 @@ RunConfigApply()
|
|||
##########
|
||||
# Header #
|
||||
##########
|
||||
echo "Running $GHE_APPLY_COMMAND to the server..."
|
||||
echo "Running ${GHE_APPLY_COMMAND} to the server..."
|
||||
|
||||
##############################################
|
||||
# Run the command to apply changes to server #
|
||||
|
@ -159,14 +159,14 @@ RunConfigApply()
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Errors
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to run config apply command!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$APPLY_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${APPLY_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# Success
|
||||
echo -e "${NC}${F[B]}Successfully ran ${F[C]}$GHE_APPLY_COMMAND${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully ran ${F[C]}${GHE_APPLY_COMMAND}${NC}"
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
|
|
7
.automation/test/ansible/reports/expected-ANSIBLE.tap
Normal file
7
.automation/test/ansible/reports/expected-ANSIBLE.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - ansible_bad_1.yml
|
||||
---
|
||||
message: Traceback (most recent call last) \n File "/usr/bin/ansible-lint", line 11, in <module>\n load_entry_point('ansible-lint==4.2.0', 'console_scripts', 'ansible-lint')()\n File "/usr/lib/python3.8/site-packages/ansiblelint/__main__.py", line 187, in main\n matches.extend(runner.run())\n File "/usr/lib/python3.8/site-packages/ansiblelint/__init__.py", line 267, in run\n for child in ansiblelint.utils.find_children(arg, self.playbook_dir) \n File "/usr/lib/python3.8/site-packages/ansiblelint/utils.py", line 163, in find_children\n for child in play_children(basedir, item, playbook[1], playbook_dir) \n File "/usr/lib/python3.8/site-packages/ansiblelint/utils.py", line 215, in play_children\n return delegate_map[k](basedir, k, v, parent_type)\n File "/usr/lib/python3.8/site-packages/ansiblelint/utils.py", line 246, in _taskshandlers_children\n results.extend(_roles_children(basedir, k, [th['action'].get('name')],\n File "/usr/lib/python3.8/site-packages/ansiblelint/utils.py", line 285, in _roles_children\n results.extend(_look_for_role_files(basedir, role, main=main))\n File "/usr/lib/python3.8/site-packages/ansiblelint/utils.py", line 330, in _look_for_role_files\n role_path = _rolepath(basedir, role)\n File "/usr/lib/python3.8/site-packages/ansiblelint/utils.py", line 299, in _rolepath\n path_dwim(basedir, os.path.join('roles', role)),\n File "/usr/lib/python3.8/posixpath.py", line 90, in join\n genericpath._check_arg_types('join', a, *p)\n File "/usr/lib/python3.8/genericpath.py", line 152, in _check_arg_types\n raise TypeError(f'{funcname}() argument must be str, bytes, or '\nTypeError join() argument must be str, bytes, or os.PathLike object, not 'NoneType'\n
|
||||
...
|
||||
ok 2 - ansible_good_1.yml
|
|
@ -1,13 +1,19 @@
|
|||
# ARM Test Cases
|
||||
|
||||
This folder holds the test cases for **Azure Resource Manager (ARM)**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/arm/reports/expected-ARM.tap.ignored
Normal file
7
.automation/test/arm/reports/expected-ARM.tap.ignored
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - arm_bad_1.json
|
||||
---
|
||||
message: \nValidating arm\arm_bad_1.json\n deploymentTemplate\n [+] adminUsername Should Not Be A Literal (109 ms)\n [+] apiVersions Should Be Recent (121 ms)\n [+] artifacts parameter (13 ms)\n [+] DependsOn Best Practices (7 ms)\n [+] Deployment Resources Must Not Be Debug (6 ms)\n [+] DeploymentTemplate Schema Is Correct (4 ms)\n [+] Dynamic Variable References Should Not Use Concat (8 ms)\n [+] IDs Should Be Derived From ResourceIDs (40 ms)\n [?] Location Should Not Be Hardcoded (5 ms)\n Skipped because IsMainTemplate was missing\n\n [+] ManagedIdentityExtension must not be used (54 ms)\n [+] Min And Max Value Are Numbers (6 ms)\n [+] Outputs Must Not Contain Secrets (15 ms)\n [+] Parameters Must Be Referenced (9 ms)\n [+] Parameters Property Must Exist (2 ms)\n [+] providers apiVersions Is Not Permitted (2 ms)\n [+] ResourceIds should not contain (14 ms)\n [+] Resources Should Have Location (3 ms)\n [+] Secure String Parameters Cannot Have Default (4 ms)\n [-] Template Should Not Contain Blanks (33 ms)\n Empty property [] found on line 28 Index 1331\n Empty property "" found on line 3 Index 121\n\n [-] Variables Must Be Referenced (35 ms)\n Unreferenced variable Network.Location\n Unreferenced variable Test.Blank.Variable\n\n [+] Virtual Machines Should Not Be Preview (17 ms)\n [+] VM Images Should Use Latest Version (1 ms)\n [+] VM Size Should Be A Parameter (15 ms)\n \n
|
||||
...
|
||||
ok 2 - arm_good_1.json
|
|
@ -1,13 +1,19 @@
|
|||
# AWS CloudFormation Test Cases
|
||||
|
||||
This folder holds the test cases for **CloudFormation**.
|
||||
|
||||
## 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.
|
||||
|
|
22
.automation/test/cfn/reports/expected-CFN.tap
Normal file
22
.automation/test/cfn/reports/expected-CFN.tap
Normal file
|
@ -0,0 +1,22 @@
|
|||
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
|
|
@ -1,13 +1,19 @@
|
|||
# Clojure Test Cases
|
||||
|
||||
This folder holds the test cases for **Clojure**.
|
||||
|
||||
## 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.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - clojure_bad_1.clj
|
||||
---
|
||||
message: /tmp/lint/.automation/test/clojure/clojure_bad_1.clj 5 5 warning namespace clojure.set is required but never used\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 8 2 error unresolved symbol but-last\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 12 1 error clojure.string/join is called with 0 args but expects 1 or 2\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 15 17 warning unused binding y\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 17 3 warning redundant do\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 19 5 warning inline def\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 22 7 warning Redundant let expression.\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 22 13 warning unused binding z\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 24 9 error y is called with 1 arg but expects 0\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 26 9 error recur argument count mismatch (expected 2, got 0)\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 29 9 error h is called with 1 arg but expects 0\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 30 9 error f is called with 1 arg but expects 0\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 34 1 warning redefined var #'foo/private-fn\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 34 8 warning Unused private var foo/private-fn\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 38 6 error Expected number, received keyword.\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 42 1 error java.lang.Thread/sleep is called with 3 args but expects 1 or 2\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 48 1 error foo/foo-fn is called with 0 args but expects 2\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 51 1 error #'foo/private-fn is private\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 54 7 error duplicate key a\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 56 5 error duplicate set element 1\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 58 7 error missing value for key b\n/tmp/lint/.automation/test/clojure/clojure_bad_1.clj 64 3 warning missing test assertion\nlinting took 18ms, errors 13, warnings 9\n
|
||||
...
|
||||
ok 2 - clojure_good_1.clj
|
|
@ -1,13 +1,19 @@
|
|||
# Coffeescript Test Cases
|
||||
|
||||
This folder holds the test cases for **Coffeescript**.
|
||||
|
||||
## 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.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - coffeescript_bad_1.coffee
|
||||
---
|
||||
message: ✗ /tmp/lint/.automation/test/coffeescript/coffeescript_bad_1.coffee\n ✗ #39 [stdin] 39 29 error unmatched )\nmodule.exports = (robot) -> )\n ^. (coffeescript_error)\n\n✗ Lint! » 1 error and 0 warnings in 1 file\n
|
||||
...
|
||||
ok 2 - coffeescript_good_1.coffee
|
|
@ -1,13 +1,19 @@
|
|||
# CSS Test Cases
|
||||
|
||||
This folder holds the test cases for **CSS**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/css/reports/expected-CSS.tap
Normal file
7
.automation/test/css/reports/expected-CSS.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - css_bad_01.css
|
||||
---
|
||||
message: \ncss/css_bad_01.css\n 2 1 ✖ Expected empty line before comment comment-empty-line-before\n 3 1 ✖ Expected empty line before comment comment-empty-line-before\n 5 5 ✖ Expected indentation of 2 spaces indentation \n 5 33 ✖ Expected "#FFFFFF" to be "#ffffff" color-hex-case \n 5 33 ✖ Expected "#FFFFFF" to be "#FFF" color-hex-length \n 6 5 ✖ Expected indentation of 2 spaces indentation \n 7 5 ✖ Expected indentation of 2 spaces indentation \n 8 5 ✖ Expected indentation of 2 spaces indentation \n 8 12 ✖ Expected "#AAAAAA" to be "#aaaaaa" color-hex-case \n 8 12 ✖ Expected "#AAAAAA" to be "#AAA" color-hex-length\n
|
||||
...
|
||||
ok 2 - css_good_01.css
|
19
.automation/test/dart/README.md
Normal file
19
.automation/test/dart/README.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Dart Test Cases
|
||||
|
||||
This folder holds the test cases for **Dart**.
|
||||
|
||||
## 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.
|
5
.automation/test/dart/dart_bad_1.dart
Normal file
5
.automation/test/dart/dart_bad_1.dart
Normal file
|
@ -0,0 +1,5 @@
|
|||
// empty_constructor_bodies bad {}
|
||||
class Point {
|
||||
int x, y;
|
||||
Point(this.x, this.y) {}
|
||||
}
|
5
.automation/test/dart/dart_good_1.dart
Normal file
5
.automation/test/dart/dart_good_1.dart
Normal file
|
@ -0,0 +1,5 @@
|
|||
// empty_constructor_bodies good ;
|
||||
class Point {
|
||||
int x, y;
|
||||
Point(this.x, this.y);
|
||||
}
|
7
.automation/test/dart/reports/expected-DART.tap
Normal file
7
.automation/test/dart/reports/expected-DART.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - dart_bad_1.dart
|
||||
---
|
||||
message: Analyzing /tmp/lint/.automation/test/dart/dart_bad_1.dart...\n lint • Use `;` instead of `{}` for empty constructor bodies. • dart/dart_bad_1.dart 4 25 • empty_constructor_bodies\n1 lint found.\n
|
||||
...
|
||||
ok 2 - dart_good_1.dart
|
|
@ -1,13 +1,18 @@
|
|||
# Docker Test Cases
|
||||
|
||||
This folder holds the test cases for **Docker**.
|
||||
|
||||
## Additional Docs
|
||||
|
||||
Due to the nature of the naming of files, we have `2` subfolders in this directory.
|
||||
|
||||
- `good` is for working, and correct **Dockerfile**(s)
|
||||
- `bad` is for invalid, and incorrect **Dockerfile**(s)
|
||||
|
||||
## Good Test Cases
|
||||
|
||||
- **Note:** They are linted utilizing the default linter rules.
|
||||
|
||||
## Bad Test Cases
|
||||
|
||||
- **Note:** They are linted utilizing the default linter rules.
|
||||
|
|
7
.automation/test/docker/reports/expected-DOCKER.tap
Normal file
7
.automation/test/docker/reports/expected-DOCKER.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - Dockerfile
|
||||
---
|
||||
message: \nFile /tmp/lint/.automation/test/docker/bad/Dockerfile\nIssues 6\n\nLine 1 from node latest\nIssue Category Title Description\n 1 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile\n Dockerfile should be uppercase.\n Instructions This is a convention adopted by most of the official images and\n greatly improves readability in long Dockerfiles. For an example\n of\n why this makes a difference, check out the current [redis\n Dockerfile](https //github.com/docker-library/redis/blob/b375650fb6\n 9b7db819e90c0033433c705b28656e/3.0/Dockerfile)\n and you should be able to easily see the instructions used.\n 2 Clarity Base Image Latest Base images should not use the latest tag.\n Tag\n\nLine 4 run mkdir -p /usr/src/app\nIssue Category Title Description\n 3 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile\n Dockerfile should be uppercase.\n Instructions This is a convention adopted by most of the official images and\n greatly improves readability in long Dockerfiles. For an example\n of\n why this makes a difference, check out the current [redis\n Dockerfile](https //github.com/docker-library/redis/blob/b375650fb6\n 9b7db819e90c0033433c705b28656e/3.0/Dockerfile)\n and you should be able to easily see the instructions used.\n\nLine 8 copy package.json /usr/src/app/ /here/there\nIssue Category Title Description\n 4 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile\n Dockerfile should be uppercase.\n Instructions This is a convention adopted by most of the official images and\n greatly improves readability in long Dockerfiles. For an example\n of\n why this makes a difference, check out the current [redis\n Dockerfile](https //github.com/docker-library/redis/blob/b375650fb6\n 9b7db819e90c0033433c705b28656e/3.0/Dockerfile)\n and you should be able to easily see the instructions used.\n\nLine 9 RUN sudo npm install\nIssue Category Title Description\n 5 Possible Bug Use Of sudo Is Not Use of `sudo` is not allowed in a Dockerfile. From the official\n Allowed document [Best practices for writing\n Dockerfiles](https //docs.docker.com/engine/userguide/eng-image/doc\n kerfile_best-practices/) \n > You should avoid installing or using `sudo` since it has\n unpredictable TTY and signal-forwarding behavior that can cause\n more problems than it solves.\n > If you absolutely need functionality similar to `sudo` (e.g.,\n initializing the daemon as root but running it as non-root), you\n may be able to use `gosu`.\n\nLine 14 ENtrypoint /tmp/here.sh\nIssue Category Title Description\n 6 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile\n Dockerfile should be uppercase.\n Instructions This is a convention adopted by most of the official images and\n greatly improves readability in long Dockerfiles. For an example\n of\n why this makes a difference, check out the current [redis\n Dockerfile](https //github.com/docker-library/redis/blob/b375650fb6\n 9b7db819e90c0033433c705b28656e/3.0/Dockerfile)\n and you should be able to easily see the instructions used.\n
|
||||
...
|
||||
ok 2 - Dockerfile
|
|
@ -1,13 +1,19 @@
|
|||
# EDITORCONFIG_CHECKER Test Cases
|
||||
|
||||
This folder holds the test cases for **EDITORCONFIG_CHECKER**.
|
||||
|
||||
## 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.
|
||||
|
|
6
.automation/test/env/README.md
vendored
6
.automation/test/env/README.md
vendored
|
@ -1,13 +1,19 @@
|
|||
# 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.
|
||||
|
|
7
.automation/test/env/reports/expected-ENV.tap
vendored
Normal file
7
.automation/test/env/reports/expected-ENV.tap
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - env_bad_1.env
|
||||
---
|
||||
message: env/env_bad_1.env 1 LeadingCharacter Invalid leading character detected\nenv/env_bad_1.env 2 KeyWithoutValue The MY_ENV key should be with a value or have an equal sign\nenv/env_bad_1.env 3 IncorrectDelimiter The DB-NAME key has incorrect delimiter\nenv/env_bad_1.env 3 UnorderedKey The DB-NAME key should go before the LOGGER_LEVEL key\nenv/env_bad_1.env 4 LowercaseKey The DEbUG_hTTP key should be in uppercase\nenv/env_bad_1.env 4 UnorderedKey The DEbUG_hTTP key should go before the LOGGER_LEVEL key\nenv/env_bad_1.env 5 UnorderedKey The DB_NAME key should go before the DEbUG_hTTP key\n
|
||||
...
|
||||
ok 2 - env_good_1.env
|
|
@ -1,13 +1,19 @@
|
|||
# Golang Test Cases
|
||||
|
||||
This folder holds the test cases for **Golang**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/golang/reports/expected-GO.tap.ignored
Normal file
7
.automation/test/golang/reports/expected-GO.tap.ignored
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - golang_bad_01.go
|
||||
---
|
||||
message: level=error msg="[linters context] typechecking error golang/golang_bad_01.go 1 1 expected 'package', found 'if'"\nlevel=warning msg="[runner] Can't run linter goanalysis_metalinter S1005 failed prerequisites [(inspect@command-line-arguments, isgenerated@command-line-arguments) analysis skipped errors in package [- golang/golang_bad_01.go 1 1 expected 'package', found 'if']]"\nlevel=warning msg="[runner] Can't run linter unused buildir analysis skipped errors in package [- golang/golang_bad_01.go 1 1 expected 'package', found 'if']"\nlevel=error msg="Running error buildir analysis skipped errors in package [- golang/golang_bad_01.go 1 1 expected 'package', found 'if']"\n
|
||||
...
|
||||
ok 2 - golang_good_01.go
|
|
@ -1,13 +1,19 @@
|
|||
# HTML Test Cases
|
||||
|
||||
This folder holds the test cases for **HTML**.
|
||||
|
||||
## 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.
|
7
.automation/test/html/reports/expected-HTML.tap.ignored
Normal file
7
.automation/test/html/reports/expected-HTML.tap.ignored
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,13 +1,19 @@
|
|||
# Javascript Test Cases
|
||||
|
||||
This folder holds the test cases for **Javascript**.
|
||||
|
||||
## 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.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - javascript_bad_1.js
|
||||
---
|
||||
message: \n/tmp/lint/.automation/test/javascript/javascript_bad_1.js\n 4 39 error Parsing error Unterminated regular expression literal\n\n✖ 1 problem (1 error, 0 warnings)\n
|
||||
...
|
||||
ok 2 - javascript_good_1.js
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - javascript_bad_1.js
|
||||
---
|
||||
message: standard Use JavaScript Standard Style (https //standardjs.com)\n /tmp/lint/.automation/test/javascript/javascript_bad_1.js 4 40 Parsing error Unterminated regular expression\n
|
||||
...
|
||||
ok 2 - javascript_good_1.js
|
|
@ -1,13 +1,19 @@
|
|||
# Json Test Cases
|
||||
|
||||
This folder holds the test cases for **Json**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/json/reports/expected-JSON.tap
Normal file
7
.automation/test/json/reports/expected-JSON.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - json_bad_1.json
|
||||
---
|
||||
message: Error Parse error on line 6 \n...ng" { "level" 'ignore', "space\n----------------------^\nExpecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'\n at Object.parseError (/node_modules/jsonlint/lib/jsonlint.js 55 11)\n at Object.parse (/node_modules/jsonlint/lib/jsonlint.js 132 22)\n at parse (/node_modules/jsonlint/lib/cli.js 82 14)\n at main (/node_modules/jsonlint/lib/cli.js 135 14)\n at Object.<anonymous> (/node_modules/jsonlint/lib/cli.js 179 1)\n at Module._compile (internal/modules/cjs/loader.js 1138 30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js 1158 10)\n at Module.load (internal/modules/cjs/loader.js 986 32)\n at Function.Module._load (internal/modules/cjs/loader.js 879 14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js 71 12)\n
|
||||
...
|
||||
ok 2 - json_good_1.json
|
|
@ -1,13 +1,19 @@
|
|||
# Kotlin Test Cases
|
||||
|
||||
This folder holds the test cases for **Kotlin**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/kotlin/reports/expected-KOTLIN.tap
Normal file
7
.automation/test/kotlin/reports/expected-KOTLIN.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - kotlin_bad_1.kt
|
||||
---
|
||||
message: /tmp/lint/.automation/test/kotlin/kotlin_bad_1.kt 1 1 File must end with a newline (\n)\n/tmp/lint/.automation/test/kotlin/kotlin_bad_1.kt 2 20 Unnecessary semicolon\n/tmp/lint/.automation/test/kotlin/kotlin_bad_1.kt 3 16 Redundant curly braces\n/tmp/lint/.automation/test/kotlin/kotlin_bad_1.kt 3 27 Unnecessary semicolon\n/tmp/lint/.automation/test/kotlin/kotlin_bad_1.kt 5 15 Unnecessary semicolon\n
|
||||
...
|
||||
ok 2 - kotlint_good_1.kt
|
|
@ -1,13 +1,19 @@
|
|||
# Markdown Test Cases
|
||||
|
||||
This folder holds the test cases for **Markdown**.
|
||||
|
||||
## 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.
|
||||
|
|
8
.automation/test/markdown/reports/expected-MARKDOWN.tap
Normal file
8
.automation/test/markdown/reports/expected-MARKDOWN.tap
Normal file
|
@ -0,0 +1,8 @@
|
|||
TAP version 13
|
||||
1..3
|
||||
ok 1 - README.md
|
||||
not ok 2 - markdown_bad_1.md
|
||||
---
|
||||
message: /tmp/lint/.automation/test/markdown/markdown_bad_1.md 1 MD041/first-line-heading/first-line-h1 First line in file should be a top level heading [Context "## Bad Markdown"]\n/tmp/lint/.automation/test/markdown/markdown_bad_1.md 5 MD001/heading-increment/header-increment Heading levels should only increment by one level at a time [Expected h3; Actual h6]\n/tmp/lint/.automation/test/markdown/markdown_bad_1.md 11 1 MD007/ul-indent Unordered list indentation [Expected 4; Actual 6]\n/tmp/lint/.automation/test/markdown/markdown_bad_1.md 13 MD040/fenced-code-language Fenced code blocks should have a language specified [Context "```"]\n/tmp/lint/.automation/test/markdown/markdown_bad_1.md 20 16 MD034/no-bare-urls Bare URL used [Context "https //github.com"]\n
|
||||
...
|
||||
ok 3 - markdown_good_1.md
|
|
@ -1,14 +1,20 @@
|
|||
# OpenAPI Test Cases
|
||||
|
||||
This folder holds the test cases for **OpenAPI**.
|
||||
|
||||
## Additional Docs
|
||||
|
||||
The `_bad_` tests are valid `.yml`/`.json` but invalid OpenAPI specs.
|
||||
The test extensions used are `.ymlopenapi`/`.jsonopenapi` instead of `.yml`/`.json`. This is to prevent the [YAML] and [JSON] tests from picking them up.
|
||||
|
||||
## 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.
|
||||
|
|
12
.automation/test/openapi/reports/expected-OPENAPI.tap
Normal file
12
.automation/test/openapi/reports/expected-OPENAPI.tap
Normal file
|
@ -0,0 +1,12 @@
|
|||
TAP version 13
|
||||
1..4
|
||||
not ok 1 - openapi_bad_1.ymlopenapi
|
||||
---
|
||||
message: OpenAPI 3.x detected\n\n/tmp/lint/.automation/test/openapi/openapi_bad_1.ymlopenapi\n 1 1 warning info-contact Info object should contain `contact` object.\n 1 1 warning info-description OpenAPI object info `description` must be present and non-empty string.\n 1 1 warning oas3-api-servers OpenAPI `servers` must be present and non-empty array.\n 1 1 error oas3-schema Object should have required property `info`.\n 1 1 warning openapi-tags OpenAPI object should have non-empty `tags` array.\n\n✖ 5 problems (1 error, 4 warnings, 0 infos, 0 hints)\n
|
||||
...
|
||||
not ok 2 - openapi_bad_2.jsonopenapi
|
||||
---
|
||||
message: OpenAPI 3.x detected\n\n/tmp/lint/.automation/test/openapi/openapi_bad_2.jsonopenapi\n 1 1 warning info-contact Info object should contain `contact` object.\n 1 1 warning info-description OpenAPI object info `description` must be present and non-empty string.\n 1 1 warning oas3-api-servers OpenAPI `servers` must be present and non-empty array.\n 1 1 error oas3-schema Object should have required property `info`.\n 1 1 warning openapi-tags OpenAPI object should have non-empty `tags` array.\n\n✖ 5 problems (1 error, 4 warnings, 0 infos, 0 hints)\n
|
||||
...
|
||||
ok 3 - openapi_good_1.ymlopenapi
|
||||
ok 4 - openapi_good_2.jsonopenapi
|
|
@ -1,13 +1,19 @@
|
|||
# Perl Test Cases
|
||||
|
||||
This folder holds the test cases for **Perl**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/perl/reports/expected-PERL.tap
Normal file
7
.automation/test/perl/reports/expected-PERL.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - perl_bad_1.pl
|
||||
---
|
||||
message: Global symbol "$here" requires explicit package name (did you forget to declare "my $here"?) at /tmp/lint/.automation/test/perl/perl_bad_1.pl line 37.\n/tmp/lint/.automation/test/perl/perl_bad_1.pl had compilation errors.\n
|
||||
...
|
||||
ok 2 - perl_good_1.pl
|
|
@ -1,13 +1,19 @@
|
|||
# PHP Test Cases
|
||||
|
||||
This folder holds the test cases for **PHP**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/php/reports/expected-PHP.tap
Normal file
7
.automation/test/php/reports/expected-PHP.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - php_bad_1.php
|
||||
---
|
||||
message: PHP Parse error syntax error, unexpected 'pe98y' (T_STRING) in /tmp/lint/.automation/test/php/php_bad_1.php on line 3\nErrors parsing /tmp/lint/.automation/test/php/php_bad_1.php\n
|
||||
...
|
||||
ok 2 - php_good_1.php
|
|
@ -1,13 +1,19 @@
|
|||
# PowerShell Test Cases
|
||||
|
||||
This folder holds the test cases for **PowerShell**.
|
||||
|
||||
## 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.
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
TAP version 13
|
||||
1..6
|
||||
not ok 1 - powershell_bad_1.ps1
|
||||
---
|
||||
message: \nRuleName Severity ScriptName Line Message\n-------- -------- ---------- ---- -------\nPSAvoidUsingEmptyCatchBlock Warning powershell 12 Empty catch b\n _bad_1.ps1 lock is used.\n Please use W\n rite-Error or\n throw statem\n ents in catch\n blocks.\nPSAvoidUsingUsernameAndPasswordPara Error powershell 4 Function 'Bad\nms _bad_1.ps1 Function' has\n both Usernam\n e and Passwor\n d parameters.\n Either set t\n he type of th\n e Password pa\n rameter to Se\n cureString or\n replace the\n Username and\n Password para\n meters with a\n Credential p\n arameter of t\n ype PSCredent\n ial. If using\n a Credential\n parameter in\n PowerShell 4\n .0 or earlier\n , please defi\n ne a credenti\n al transforma\n tion attribut\n e after the P\n SCredential t\n ype attribute\n .\nPSAvoidTrailingWhitespace Information powershell 11 Line has trai\n _bad_1.ps1 ling whitespa\n ce\nPSAvoidUsingPlainTextForPassword Warning powershell 5 Parameter '$P\n _bad_1.ps1 assword' shou\n ld use Secure\n String, other\n wise this wil\n l expose sens\n itive informa\n tion. See Con\n vertTo-Secure\n String for mo\n re informatio\n n.\nPSUseDeclaredVarsMoreThanAssignment Warning powershell 9 The variable\ns _bad_1.ps1 'VariableThat\n IsNotUsedLate\n r' is assigne\n d but never u\n sed.\n
|
||||
...
|
||||
not ok 2 - powershell_bad_1.psd1
|
||||
---
|
||||
message: \nRuleName Severity ScriptName Line Message\n-------- -------- ---------- ---- -------\nTerminatorExpectedAtEndOfString ParseError powershell 2 The string is\n _bad_1.psd missing the\n 1 terminator '\n .\nMissingEndCurlyBrace ParseError powershell 1 Missing closi\n _bad_1.psd ng '}' in sta\n 1 tement block\n or type defin\n ition.\n
|
||||
...
|
||||
not ok 3 - powershell_bad_1.psm1
|
||||
---
|
||||
message: \nRuleName Severity ScriptName Line Message\n-------- -------- ---------- ---- -------\nTerminatorExpectedAtEndOfString ParseError powershell 1 The string is\n _bad_1.psm missing the\n 1 terminator "\n .\n
|
||||
...
|
||||
ok 4 - powershell_good_1.ps1
|
||||
ok 5 - powershell_good_1.psd1
|
||||
ok 6 - powershell_good_1.psm1
|
7
.automation/test/protobuf/reports/expected-PROTOBUF.tap
Normal file
7
.automation/test/protobuf/reports/expected-PROTOBUF.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - protobuf_bad_1.proto
|
||||
---
|
||||
message: [protobuf/protobuf_bad_1.proto 8 1] The order of Import is invalid. Check if the file is ordered in the correct manner.\n[protobuf/protobuf_bad_1.proto 18 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 19 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 20 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 21 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 24 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 26 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 28 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 25 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 27 7] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 29 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 30 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 31 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 34 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 47 5] Found an incorrect indentation style " ". " " is correct.\n[protobuf/protobuf_bad_1.proto 3 1] The line length is 91, but it must be shorter than 80\n[protobuf/protobuf_bad_1.proto 4 1] Package name "examplePb" must only contains lowercase letters, digits and/or periods.\n[protobuf/protobuf_bad_1.proto 8 1] Imports are not sorted.\n[protobuf/protobuf_bad_1.proto 9 1] Imports are not sorted.\n[protobuf/protobuf_bad_1.proto 14 1] Imports are not sorted.\n[protobuf/protobuf_bad_1.proto 15 1] Imports are not sorted.\n[protobuf/protobuf_bad_1.proto 19 5] EnumField name "UNKNOWN" with zero value should have the suffix "UNSPECIFIED"\n[protobuf/protobuf_bad_1.proto 17 1] Enum name "enumAllowingAlias" must be UpperCamelCase\n[protobuf/protobuf_bad_1.proto 36 3] Field "inner_message" should avoid required for proto3\n[protobuf/protobuf_bad_1.proto 37 3] Group "Result" should be avoided for proto3\n[protobuf/protobuf_bad_1.proto 40 3] Group "Result" should be avoided for proto3\n[protobuf/protobuf_bad_1.proto 43 3] Group "Regular" should be avoided for proto3\n[protobuf/protobuf_bad_1.proto 29 5] Repeated field name "inner_message" must be pluralized name "inner_messages"\n[protobuf/protobuf_bad_1.proto 40 3] Repeated group name "Result" must be pluralized name "Results"\n[protobuf/protobuf_bad_1.proto 42 3] Repeated field name "paper" must be pluralized name "papers"\n[protobuf/protobuf_bad_1.proto 43 3] Repeated group name "Regular" must be pluralized name "Regulars"\n[protobuf/protobuf_bad_1.proto 23 1] Message name "outer" must be UpperCamelCase\n[protobuf/protobuf_bad_1.proto 26 5] Message name "inner" must be UpperCamelCase\n[protobuf/protobuf_bad_1.proto 47 5] RPC name "search" must be UpperCamelCase\n
|
||||
...
|
||||
ok 2 - protobuf_good_1.proto
|
|
@ -1,13 +1,19 @@
|
|||
# Python Test Cases
|
||||
|
||||
This folder holds the test cases for **Python**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/python/reports/expected-PYTHON.tap
Normal file
7
.automation/test/python/reports/expected-PYTHON.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - python_bad_1.py
|
||||
---
|
||||
message: ************* Module python_bad_1\npython/python_bad_1.py 15 24 E0001 invalid syntax (<unknown>, line 15) (syntax-error)\n
|
||||
...
|
||||
ok 2 - python_good_1.py
|
|
@ -1,13 +1,19 @@
|
|||
# Raku Test Cases
|
||||
|
||||
This folder holds the test cases for **Raku**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/raku/reports/expected-RAKU.tap
Normal file
7
.automation/test/raku/reports/expected-RAKU.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - raku_bad_1.raku
|
||||
---
|
||||
message: ===SORRY!=== Error while compiling /tmp/lint/.automation/test/raku/raku_bad_1.raku\nVariable '$foo' is not declared. Did you mean '@foo'?\nat /tmp/lint/.automation/test/raku/raku_bad_1.raku 4\n------> <BOL>⏏$foo[1] = 42\n
|
||||
...
|
||||
ok 2 - raku_good_1.raku
|
|
@ -1,13 +1,19 @@
|
|||
# Ruby Test Cases
|
||||
|
||||
This folder holds the test cases for **Ruby**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/ruby/reports/expected-RUBY.tap
Normal file
7
.automation/test/ruby/reports/expected-RUBY.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - ruby_bad_1.rb
|
||||
---
|
||||
message: Inspecting 1 file\nC\n\nOffenses \n\nruby/ruby_bad_1.rb 1 1 C Style/FrozenStringLiteralComment Missing frozen string literal comment.\nruby/ruby_bad_1.rb 11 11 C Style/StringLiterals Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.\nFile.open('/tmp/urls.txt', " w" ) do | file|\n ^^^^^^^^^^^^^^^\nruby/ruby_bad_1.rb 11 32 C Layout/SpaceInsideParens Space inside parentheses detected.\nFile.open('/tmp/urls.txt', " w" ) do | file|\n ^\nruby/ruby_bad_1.rb 11 39 C Layout/SpaceAroundBlockParameters Space before first block parameter detected.\nFile.open('/tmp/urls.txt', " w" ) do | file|\n ^\nruby/ruby_bad_1.rb 12 24 C Layout/SpaceAroundBlockParameters Space after last block parameter detected.\n Hook.active.map do |h |\n ^\nruby/ruby_bad_1.rb 13 13 C Layout/SpaceInsideArrayLiteralBrackets Do not use space inside array brackets.\n urls = [ ARRAY_OF_URLS_CALLING_INSTANCE]\n ^\n\n1 file inspected, 6 offenses detected\n
|
||||
...
|
||||
ok 2 - ruby_good_1.rb
|
|
@ -1,13 +1,19 @@
|
|||
# Bash Test Cases
|
||||
|
||||
This folder holds the test cases for **Bash**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/shell/reports/expected-BASH.tap
Normal file
7
.automation/test/shell/reports/expected-BASH.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - shell_bad_1.sh
|
||||
---
|
||||
message: \nIn /tmp/lint/.automation/test/shell/shell_bad_1.sh line 10 \nif [ $ERROR_CODE -ne 0]; then\n^-- SC1009 The mentioned syntax error was in this if expression.\n ^-- SC1073 Couldn't parse this test expression. Fix to allow more checks.\n ^-- SC1020 You need a space before the ].\n ^-- SC1072 Missing space before ]. Fix any mentioned problems and try again.\n\nFor more information \n https //www.shellcheck.net/wiki/SC1020 -- You need a space before the ].\n https //www.shellcheck.net/wiki/SC1072 -- Missing space before ]. Fix any m...\n https //www.shellcheck.net/wiki/SC1073 -- Couldn't parse this test expressi...\n
|
||||
...
|
||||
ok 2 - shell_good_1.sh
|
|
@ -7,11 +7,11 @@ HELLO_WORLD=$(echo "Hello World" | cut -f1 -d' ' 2>&1)
|
|||
ERROR_CODE=$?
|
||||
|
||||
# Check the shell
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
echo "We did it!"
|
||||
exit 0
|
||||
else
|
||||
echo "We done goofed it..."
|
||||
echo "$HELLO_WORLD"
|
||||
echo "${HELLO_WORLD}"
|
||||
exit 1
|
||||
fi
|
||||
|
|
19
.automation/test/states/README.md
Normal file
19
.automation/test/states/README.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
# AWS States language Test Cases
|
||||
|
||||
This folder holds the test cases for **AWS States Language**.
|
||||
|
||||
## 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.
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - json_bad_1.json
|
||||
---
|
||||
message: Error Parse error on line 6 \n...ng" { "level" 'ignore', "space\n----------------------^\nExpecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'\n at Object.parseError (/node_modules/jsonlint/lib/jsonlint.js 55 11)\n at Object.parse (/node_modules/jsonlint/lib/jsonlint.js 132 22)\n at parse (/node_modules/jsonlint/lib/cli.js 82 14)\n at main (/node_modules/jsonlint/lib/cli.js 135 14)\n at Object.<anonymous> (/node_modules/jsonlint/lib/cli.js 179 1)\n at Module._compile (internal/modules/cjs/loader.js 1138 30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js 1158 10)\n at Module.load (internal/modules/cjs/loader.js 986 32)\n at Function.Module._load (internal/modules/cjs/loader.js 879 14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js 71 12)\n
|
||||
...
|
||||
ok 2 - json_good_1.json
|
10
.automation/test/states/states_bad_1.json
Normal file
10
.automation/test/states/states_bad_1.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"Comment": "A simple minimal example of the States language",
|
||||
"StartAt": "Hello World",
|
||||
"States": {
|
||||
"Hello World": {
|
||||
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld",
|
||||
"End": true
|
||||
}
|
||||
}
|
||||
}
|
11
.automation/test/states/states_good_1.json
Normal file
11
.automation/test/states/states_good_1.json
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"Comment": "A simple minimal example of the States language",
|
||||
"StartAt": "Hello World",
|
||||
"States": {
|
||||
"Hello World": {
|
||||
"Type": "Task",
|
||||
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld",
|
||||
"End": true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - terraform_bad_1.tf
|
||||
---
|
||||
message: Failed to load configurations. 1 error(s) occurred \n\nError Invalid expression\n\n on /tmp/lint/.automation/test/terraform/bad/terraform_bad_1.tf line 3, in resource "aws_instance" "bad" \n 3 instance_type = # invalid type!\n 4 }\n\nExpected the start of an expression, but found an invalid expression token.\n
|
||||
...
|
||||
ok 2 - terraform_good_1.tf
|
|
@ -1,13 +1,19 @@
|
|||
# Typescript Test Cases
|
||||
|
||||
This folder holds the test cases for **Typescript**.
|
||||
|
||||
## 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.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - typescript_bad_1.ts
|
||||
---
|
||||
message: \n/tmp/lint/.automation/test/typescript/typescript_bad_1.ts\n 5 39 error Parsing error Unterminated regular expression literal\n\n✖ 1 problem (1 error, 0 warnings)\n
|
||||
...
|
||||
ok 2 - typescript_good_1.ts
|
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - typescript_bad_1.ts
|
||||
---
|
||||
message: standard Use JavaScript Standard Style (https //standardjs.com)\n /tmp/lint/.automation/test/typescript/typescript_bad_1.ts 5 39 Parsing error Unterminated regular expression literal.\n
|
||||
...
|
||||
ok 2 - typescript_good_1.ts
|
|
@ -1,13 +1,19 @@
|
|||
# XML Test Cases
|
||||
|
||||
This folder holds the test cases for **XML**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/xml/reports/expected-XML.tap
Normal file
7
.automation/test/xml/reports/expected-XML.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - xml_bad_1.xml
|
||||
---
|
||||
message: /tmp/lint/.automation/test/xml/xml_bad_1.xml 7 parser error EndTag '</' not found\n\n^\n
|
||||
...
|
||||
ok 2 - xml_good_1.xml
|
|
@ -1,13 +1,19 @@
|
|||
# Yml Test Cases
|
||||
|
||||
This folder holds the test cases for **Yml**.
|
||||
|
||||
## 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.
|
||||
|
|
7
.automation/test/yml/reports/expected-YML.tap
Normal file
7
.automation/test/yml/reports/expected-YML.tap
Normal file
|
@ -0,0 +1,7 @@
|
|||
TAP version 13
|
||||
1..2
|
||||
not ok 1 - yml_bad_1.yml
|
||||
---
|
||||
message: /tmp/lint/.automation/test/yml/yml_bad_1.yml\n 10 1 warning missing document start "---" (document-start)\n 11 16 error syntax error mapping values are not allowed here (syntax)\n
|
||||
...
|
||||
ok 2 - yml_good_1.yml
|
|
@ -37,7 +37,7 @@ UPDATE_MAJOR_TAG=0 # Flag to deploy the major tag version as
|
|||
Header() {
|
||||
echo ""
|
||||
echo "-------------------------------------------------------"
|
||||
echo "---- GitHub Actions Upload image to [$REGISTRY] ----"
|
||||
echo "---- GitHub Actions Upload image to [${REGISTRY}] ----"
|
||||
echo "-------------------------------------------------------"
|
||||
echo ""
|
||||
}
|
||||
|
@ -57,46 +57,46 @@ ValidateInput() {
|
|||
#############################
|
||||
# Validate GITHUB_WORKSPACE #
|
||||
#############################
|
||||
if [ -z "$GITHUB_WORKSPACE" ]; then
|
||||
if [ -z "${GITHUB_WORKSPACE}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [GITHUB_WORKSPACE]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$GITHUB_WORKSPACE]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${GITHUB_WORKSPACE}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[GITHUB_WORKSPACE]${F[B]}, value:${F[W]}[$GITHUB_WORKSPACE]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[GITHUB_WORKSPACE]${F[B]}, value:${F[W]}[${GITHUB_WORKSPACE}]${NC}"
|
||||
fi
|
||||
|
||||
#####################
|
||||
# Validate REGISTRY #
|
||||
#####################
|
||||
if [ -z "$REGISTRY" ]; then
|
||||
if [ -z "${REGISTRY}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [REGISTRY]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$REGISTRY]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${REGISTRY}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[REGISTRY]${F[B]}, value:${F[W]}[$REGISTRY]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[REGISTRY]${F[B]}, value:${F[W]}[${REGISTRY}]${NC}"
|
||||
fi
|
||||
|
||||
#####################################################
|
||||
# See if we need values for GitHub package Registry #
|
||||
#####################################################
|
||||
if [[ $REGISTRY == "GPR" ]]; then
|
||||
if [[ ${REGISTRY} == "GPR" ]]; then
|
||||
#########################
|
||||
# Validate GPR_USERNAME #
|
||||
#########################
|
||||
if [ -z "$GPR_USERNAME" ]; then
|
||||
if [ -z "${GPR_USERNAME}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [GPR_USERNAME]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$GPR_USERNAME]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${GPR_USERNAME}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[GPR_USERNAME]${F[B]}, value:${F[W]}[$GPR_USERNAME]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[GPR_USERNAME]${F[B]}, value:${F[W]}[${GPR_USERNAME}]${NC}"
|
||||
fi
|
||||
|
||||
######################
|
||||
# Validate GPR_TOKEN #
|
||||
######################
|
||||
if [ -z "$GPR_TOKEN" ]; then
|
||||
if [ -z "${GPR_TOKEN}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [GPR_TOKEN]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$GPR_TOKEN]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${GPR_TOKEN}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[GPR_TOKEN]${F[B]}, value:${F[W]}[********]${NC}"
|
||||
|
@ -104,24 +104,24 @@ ValidateInput() {
|
|||
########################################
|
||||
# See if we need values for Ducker hub #
|
||||
########################################
|
||||
elif [[ $REGISTRY == "Docker" ]]; then
|
||||
elif [[ ${REGISTRY} == "Docker" ]]; then
|
||||
############################
|
||||
# Validate DOCKER_USERNAME #
|
||||
############################
|
||||
if [ -z "$DOCKER_USERNAME" ]; then
|
||||
if [ -z "${DOCKER_USERNAME}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [DOCKER_USERNAME]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$DOCKER_USERNAME]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${DOCKER_USERNAME}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[DOCKER_USERNAME]${F[B]}, value:${F[W]}[$DOCKER_USERNAME]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[DOCKER_USERNAME]${F[B]}, value:${F[W]}[${DOCKER_USERNAME}]${NC}"
|
||||
fi
|
||||
|
||||
############################
|
||||
# Validate DOCKER_PASSWORD #
|
||||
############################
|
||||
if [ -z "$DOCKER_PASSWORD" ]; then
|
||||
if [ -z "${DOCKER_PASSWORD}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [DOCKER_PASSWORD]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$DOCKER_PASSWORD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${DOCKER_PASSWORD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[DOCKER_PASSWORD]${F[B]}, value:${F[B]}[********]${NC}"
|
||||
|
@ -131,39 +131,39 @@ ValidateInput() {
|
|||
###########################################
|
||||
else
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find a valid registry!${NC}"
|
||||
echo "Registry:[$REGISTRY]"
|
||||
echo "Registry:[${REGISTRY}]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#######################
|
||||
# Validate IMAGE_REPO #
|
||||
#######################
|
||||
if [ -z "$IMAGE_REPO" ]; then
|
||||
if [ -z "${IMAGE_REPO}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [IMAGE_REPO]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$IMAGE_REPO]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${IMAGE_REPO}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[IMAGE_REPO]${F[B]}, value:${F[W]}[$IMAGE_REPO]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[IMAGE_REPO]${F[B]}, value:${F[W]}[${IMAGE_REPO}]${NC}"
|
||||
###############################################
|
||||
# Need to see if GPR registry and update name #
|
||||
###############################################
|
||||
if [[ $REGISTRY == "GPR" ]]; then
|
||||
NAME="docker.pkg.github.com/$IMAGE_REPO/super-linter"
|
||||
IMAGE_REPO="$NAME"
|
||||
echo "Updated [IMAGE_REPO] to:[$IMAGE_REPO] for GPR"
|
||||
if [[ ${REGISTRY} == "GPR" ]]; then
|
||||
NAME="docker.pkg.github.com/${IMAGE_REPO}/super-linter"
|
||||
IMAGE_REPO="${NAME}"
|
||||
echo "Updated [IMAGE_REPO] to:[${IMAGE_REPO}] for GPR"
|
||||
fi
|
||||
fi
|
||||
|
||||
##########################
|
||||
# Validate IMAGE_VERSION #
|
||||
##########################
|
||||
if [ -z "$IMAGE_VERSION" ]; then
|
||||
if [ -z "${IMAGE_VERSION}" ]; then
|
||||
echo -e "${NC}${F[Y]}WARN!${NC} Failed to get [IMAGE_VERSION]!${NC}"
|
||||
echo "Pulling from Branch Name..."
|
||||
##############################
|
||||
# Get the name of the branch #
|
||||
##############################
|
||||
BRANCH_NAME=$(git -C "$GITHUB_WORKSPACE" branch --contains "$GITHUB_SHA" | awk '{print $2}' 2>&1)
|
||||
BRANCH_NAME=$(git -C "${GITHUB_WORKSPACE}" branch --contains "${GITHUB_SHA}" | awk '{print ${2}}' 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -173,24 +173,24 @@ ValidateInput() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get branch name!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$BRANCH_NAME]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${BRANCH_NAME}]${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
##################################
|
||||
# Remove non alpha-numeric chars #
|
||||
##################################
|
||||
BRANCH_NAME=$(echo "$BRANCH_NAME" | tr -cd '[:alnum:]')
|
||||
BRANCH_NAME=$(echo "${BRANCH_NAME}" | tr -cd '[:alnum:]')
|
||||
|
||||
############################################
|
||||
# Set the IMAGE_VERSION to the BRANCH_NAME #
|
||||
############################################
|
||||
IMAGE_VERSION="$BRANCH_NAME"
|
||||
echo "Tag:[$IMAGE_VERSION]"
|
||||
IMAGE_VERSION="${BRANCH_NAME}"
|
||||
echo "Tag:[${IMAGE_VERSION}]"
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[IMAGE_VERSION]${F[B]}, value:${F[W]}[$IMAGE_VERSION]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[IMAGE_VERSION]${F[B]}, value:${F[W]}[${IMAGE_VERSION}]${NC}"
|
||||
fi
|
||||
|
||||
##################################
|
||||
|
@ -201,31 +201,31 @@ ValidateInput() {
|
|||
######################################################################
|
||||
# Check if this is a latest to a versioned release at create new tag #
|
||||
######################################################################
|
||||
if [[ $IMAGE_VERSION =~ $REGEX ]]; then
|
||||
if [[ ${IMAGE_VERSION} =~ ${REGEX} ]]; then
|
||||
# Need to get the major version, and set flag to update
|
||||
|
||||
#####################
|
||||
# Set the major tag #
|
||||
#####################
|
||||
MAJOR_TAG=$(echo "$IMAGE_VERSION" | cut -d '.' -f1)
|
||||
MAJOR_TAG=$(echo "${IMAGE_VERSION}" | cut -d '.' -f1)
|
||||
|
||||
###################################
|
||||
# Set flag for updating major tag #
|
||||
###################################
|
||||
UPDATE_MAJOR_TAG=1
|
||||
|
||||
echo "- Also deploying a major tag of:[$MAJOR_TAG]"
|
||||
echo "- Also deploying a major tag of:[${MAJOR_TAG}]"
|
||||
fi
|
||||
|
||||
############################
|
||||
# Validate DOCKERFILE_PATH #
|
||||
############################
|
||||
if [ -z "$DOCKERFILE_PATH" ]; then
|
||||
if [ -z "${DOCKERFILE_PATH}" ]; then
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get [DOCKERFILE_PATH]!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$DOCKERFILE_PATH]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${DOCKERFILE_PATH}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[DOCKERFILE_PATH]${F[B]}, value:${F[W]}[$DOCKERFILE_PATH]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found:${F[W]}[DOCKERFILE_PATH]${F[B]}, value:${F[W]}[${DOCKERFILE_PATH}]${NC}"
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
|
@ -234,24 +234,24 @@ Authenticate() {
|
|||
################
|
||||
# Pull in Vars #
|
||||
################
|
||||
USERNAME="$1" # Name to auth with
|
||||
PASSWORD="$2" # Password to auth with
|
||||
URL="$3" # Url to auth towards
|
||||
NAME="$4" # name of the service
|
||||
USERNAME="${1}" # Name to auth with
|
||||
PASSWORD="${2}" # Password to auth with
|
||||
URL="${3}" # Url to auth towards
|
||||
NAME="${4}" # name of the service
|
||||
|
||||
################
|
||||
# Print header #
|
||||
################
|
||||
echo ""
|
||||
echo "----------------------------------------------"
|
||||
echo "Login to $NAME..."
|
||||
echo "Login to ${NAME}..."
|
||||
echo "----------------------------------------------"
|
||||
echo ""
|
||||
|
||||
###################
|
||||
# Auth to service #
|
||||
###################
|
||||
LOGIN_CMD=$(docker login "$URL" --username "$USERNAME" --password "$PASSWORD" 2>&1)
|
||||
LOGIN_CMD=$(docker login "${URL}" --username "${USERNAME}" --password "${PASSWORD}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -261,14 +261,14 @@ Authenticate() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to authenticate to $NAME!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$LOGIN_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to authenticate to ${NAME}!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${LOGIN_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# SUCCESS
|
||||
echo -e "${NC}${F[B]}Successfully authenticated to ${F[C]}$NAME${F[B]}!${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully authenticated to ${F[C]}${NAME}${F[B]}!${NC}"
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
|
@ -286,9 +286,9 @@ BuildImage() {
|
|||
################################
|
||||
# Validate the DOCKERFILE_PATH #
|
||||
################################
|
||||
if [ ! -f "$DOCKERFILE_PATH" ]; then
|
||||
if [ ! -f "${DOCKERFILE_PATH}" ]; then
|
||||
# No file found
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to find Dockerfile at:[$DOCKERFILE_PATH]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to find Dockerfile at:[${DOCKERFILE_PATH}]${NC}"
|
||||
echo "Please make sure you give full path!"
|
||||
echo "Example:[/configs/Dockerfile] or [Dockerfile] if at root directory"
|
||||
exit 1
|
||||
|
@ -297,7 +297,7 @@ BuildImage() {
|
|||
###################
|
||||
# Build the image #
|
||||
###################
|
||||
docker build --no-cache -t "$IMAGE_REPO:$IMAGE_VERSION" -f "$DOCKERFILE_PATH" . 2>&1
|
||||
docker build --no-cache -t "${IMAGE_REPO}:${IMAGE_VERSION}" -f "${DOCKERFILE_PATH}" . 2>&1
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -307,7 +307,7 @@ BuildImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to [build] Dockerfile!${NC}"
|
||||
exit 1
|
||||
|
@ -319,9 +319,9 @@ BuildImage() {
|
|||
########################################################
|
||||
# Need to see if we need to tag a major update as well #
|
||||
########################################################
|
||||
if [ $UPDATE_MAJOR_TAG -eq 1 ]; then
|
||||
if [ ${UPDATE_MAJOR_TAG} -eq 1 ]; then
|
||||
# Tag the image with the major tag as well
|
||||
docker build -t "$IMAGE_REPO:$MAJOR_TAG" -f "$DOCKERFILE_PATH" . 2>&1
|
||||
docker build -t "${IMAGE_REPO}:${MAJOR_TAG}" -f "${DOCKERFILE_PATH}" . 2>&1
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -331,7 +331,7 @@ BuildImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to [tag] Dockerfile!${NC}"
|
||||
exit 1
|
||||
|
@ -349,14 +349,14 @@ UploadImage() {
|
|||
################
|
||||
echo ""
|
||||
echo "----------------------------------------------"
|
||||
echo "Uploading the DockerFile image to $REGISTRY..."
|
||||
echo "Uploading the DockerFile image to ${REGISTRY}..."
|
||||
echo "----------------------------------------------"
|
||||
echo ""
|
||||
|
||||
############################################
|
||||
# Upload the docker image that was created #
|
||||
############################################
|
||||
docker push "$IMAGE_REPO:$IMAGE_VERSION" 2>&1
|
||||
docker push "${IMAGE_REPO}:${IMAGE_VERSION}" 2>&1
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -366,20 +366,20 @@ UploadImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to [upload] Dockerfile!${NC}"
|
||||
exit 1
|
||||
else
|
||||
# SUCCESS
|
||||
echo -e "${NC}${F[B]}Successfully Uploaded Docker image:${F[W]}[$IMAGE_VERSION]${F[B]} to ${F[C]}$REGISTRY${F[B]}!${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully Uploaded Docker image:${F[W]}[${IMAGE_VERSION}]${F[B]} to ${F[C]}${REGISTRY}${F[B]}!${NC}"
|
||||
fi
|
||||
|
||||
#########################
|
||||
# Get Image information #
|
||||
#########################
|
||||
IFS=$'\n' # Set the delimit to newline
|
||||
GET_INFO_CMD=$(docker images | grep "$IMAGE_REPO" | grep "$IMAGE_VERSION" 2>&1)
|
||||
GET_INFO_CMD=$(docker images | grep "${IMAGE_REPO}" | grep "${IMAGE_VERSION}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -389,18 +389,18 @@ UploadImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to get information about built Image!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$GET_INFO_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${GET_INFO_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
################
|
||||
# Get the data #
|
||||
################
|
||||
REPO=$(echo "$GET_INFO_CMD" | awk '{print $1}')
|
||||
TAG=$(echo "$GET_INFO_CMD" | awk '{print $2}')
|
||||
IMAGE_ID=$(echo "$GET_INFO_CMD" | awk '{print $3}')
|
||||
REPO=$(echo "${GET_INFO_CMD}" | awk '{print ${1}}')
|
||||
TAG=$(echo "${GET_INFO_CMD}" | awk '{print ${2}}')
|
||||
IMAGE_ID=$(echo "${GET_INFO_CMD}" | awk '{print ${3}}')
|
||||
SIZE="${GET_INFO_CMD##* }"
|
||||
|
||||
###################
|
||||
|
@ -408,21 +408,21 @@ UploadImage() {
|
|||
###################
|
||||
echo "----------------------------------------------"
|
||||
echo "Docker Image Details:"
|
||||
echo "Repository:[$REPO]"
|
||||
echo "Tag:[$TAG]"
|
||||
echo "Image_ID:[$IMAGE_ID]"
|
||||
echo "Size:[$SIZE]"
|
||||
echo "Repository:[${REPO}]"
|
||||
echo "Tag:[${TAG}]"
|
||||
echo "Image_ID:[${IMAGE_ID}]"
|
||||
echo "Size:[${SIZE}]"
|
||||
echo "----------------------------------------------"
|
||||
fi
|
||||
|
||||
###############################################################
|
||||
# Check if we need to upload the major tagged version as well #
|
||||
###############################################################
|
||||
if [ $UPDATE_MAJOR_TAG -eq 1 ]; then
|
||||
if [ ${UPDATE_MAJOR_TAG} -eq 1 ]; then
|
||||
############################################
|
||||
# Upload the docker image that was created #
|
||||
############################################
|
||||
docker push "$IMAGE_REPO:$MAJOR_TAG" 2>&1
|
||||
docker push "${IMAGE_REPO}:${MAJOR_TAG}" 2>&1
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -432,13 +432,13 @@ UploadImage() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# ERROR
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to [upload] MAJOR_TAG:[$MAJOR_TAG] Dockerfile!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} failed to [upload] MAJOR_TAG:[${MAJOR_TAG}] Dockerfile!${NC}"
|
||||
exit 1
|
||||
else
|
||||
# SUCCESS
|
||||
echo -e "${NC}${F[B]}Successfully Uploaded TAGOR_TAG:${F[W]}[$MAJOR_TAG]${F[B]} Docker image to ${F[C]}$REGISTRY${F[B]}!${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully Uploaded TAG:${F[W]}[${MAJOR_TAG}]${F[B]} of Docker image to ${F[C]}${REGISTRY}${F[B]}!${NC}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
@ -473,23 +473,23 @@ BuildImage
|
|||
######################
|
||||
# Login to DockerHub #
|
||||
######################
|
||||
if [[ $REGISTRY == "Docker" ]]; then
|
||||
if [[ ${REGISTRY} == "Docker" ]]; then
|
||||
# Authenticate "Username" "Password" "Url" "Name"
|
||||
Authenticate "$DOCKER_USERNAME" "$DOCKER_PASSWORD" "" "Dockerhub"
|
||||
Authenticate "${DOCKER_USERNAME}" "${DOCKER_PASSWORD}" "" "Dockerhub"
|
||||
|
||||
####################################
|
||||
# Login to GitHub Package Registry #
|
||||
####################################
|
||||
elif [[ $REGISTRY == "GPR" ]]; then
|
||||
elif [[ ${REGISTRY} == "GPR" ]]; then
|
||||
# Authenticate "Username" "Password" "Url" "Name"
|
||||
Authenticate "$GPR_USERNAME" "$GPR_TOKEN" "https://docker.pkg.github.com" "GitHub Package Registry"
|
||||
Authenticate "${GPR_USERNAME}" "${GPR_TOKEN}" "https://docker.pkg.github.com" "GitHub Package Registry"
|
||||
|
||||
else
|
||||
#########
|
||||
# ERROR #
|
||||
#########
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Registry not set correctly!${NC}"
|
||||
echo "Registry:[$REGISTRY]"
|
||||
echo "Registry:[${REGISTRY}]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# Devcontainer
|
||||
|
||||
This file specifies to vscode how to run the container
|
||||
|
||||
For format details, see [documentation](https://aka.ms/vscode-remote/devcontainer.json) or this file's [README](https://github.com/microsoft/vscode-dev-containers/tree/v0.123.0/containers/docker-existing-dockerfile)
|
||||
|
||||
|
||||
context: Sets the run context to one level up instead of the .devcontainer folder.
|
||||
dockerFile: Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
|
||||
settings: Set *default* container specific settings.json values on container create.
|
||||
settings: Set _default_ container specific settings.json values on container create.
|
||||
extensions: Add the IDs of extensions you want installed when the container is created.
|
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
|
@ -1,4 +1,4 @@
|
|||
######################################################################
|
||||
# These owners will be the default owners for everything in the repo #
|
||||
######################################################################
|
||||
* @admiralawkbar @jwiebalk @zkoppert @IAmHughes
|
||||
* @admiralawkbar @jwiebalk @zkoppert @IAmHughes @nemchik @Hanse00
|
||||
|
|
18
.github/CONTRIBUTING.md
vendored
18
.github/CONTRIBUTING.md
vendored
|
@ -1,11 +1,14 @@
|
|||
# Contributing
|
||||
|
||||
:wave: Hi there!
|
||||
We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great.
|
||||
|
||||
## Submitting a pull request
|
||||
|
||||
[Pull Requests][pulls] are used for adding new playbooks, roles, and documents to the repository, or editing the existing ones.
|
||||
|
||||
**With write access**
|
||||
|
||||
1. Clone the repository (only if you have write access)
|
||||
1. Create a new branch: `git checkout -b my-branch-name`
|
||||
1. Make your change
|
||||
|
@ -13,6 +16,7 @@ We're thrilled that you'd like to contribute to this project. Your help is essen
|
|||
1. Pat yourself on the back and wait for your pull request to be reviewed and merged.
|
||||
|
||||
**Without write access**
|
||||
|
||||
1. [Fork][fork] and clone the repository
|
||||
1. Create a new branch: `git checkout -b my-branch-name`
|
||||
1. Make your change
|
||||
|
@ -29,8 +33,21 @@ Draft pull requests are also welcome to get feedback early on, or if there is so
|
|||
- Create a branch with a name that identifies the user and nature of the changes (similar to `user/branch-purpose`)
|
||||
- Open a pull request
|
||||
|
||||
### CI/CT/CD
|
||||
|
||||
The **Super-Linter** has _CI/CT/CD_ configured utilizing **GitHub** Actions.
|
||||
|
||||
- When a branch is created and code is pushed, a **GitHub** Action is triggered for building the new **Docker** container with the new codebase
|
||||
- The **Docker** container is then ran against the _test cases_ to validate all code sanity
|
||||
- `.automation/test` contains all test cases for each language that should be validated
|
||||
- These **GitHub** Actions utilize the Checks API and Protected Branches to help follow the SDLC
|
||||
- When the Pull Request is merged to master, the **Super-Linter** **Docker** container is then updated and deployed with the new codebase
|
||||
- **Note:** The branch's **Docker** container is also removed from **DockerHub** to cleanup after itself
|
||||
|
||||
## Releasing
|
||||
|
||||
If you are the current maintainer of this action:
|
||||
|
||||
1. If a major version number change: Update `README.md` and the wiki to reflect new version number in the example workflow file sections
|
||||
2. Draft [Releases](https://help.github.com/en/github/administering-a-repository/managing-releases-in-a-repository) are created automatically. They just need to be checked over for accuracy before making it official.
|
||||
3. Ensure you check the box for [publishing to the marketplace](https://help.github.com/en/actions/creating-actions/publishing-actions-in-github-marketplace#publishing-an-action)
|
||||
|
@ -39,6 +56,7 @@ If you are the current maintainer of this action:
|
|||
6. Look for approval from [CODEOWNERS](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners)
|
||||
|
||||
## Resources
|
||||
|
||||
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
|
||||
- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/)
|
||||
- [GitHub Help](https://help.github.com)
|
||||
|
|
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -12,6 +12,7 @@ A clear and concise description of what the bug is.
|
|||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
|
|
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
|
@ -21,8 +21,7 @@ updates:
|
|||
directory: "/dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Type: Maintenance"
|
||||
open-pull-requests-limit: 10
|
||||
|
||||
# Maintain dependencies for docker
|
||||
- package-ecosystem: "docker"
|
||||
|
@ -37,3 +36,4 @@ updates:
|
|||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 10
|
||||
|
||||
|
|
57
.github/linters/analysis_options.yaml
vendored
Normal file
57
.github/linters/analysis_options.yaml
vendored
Normal file
|
@ -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
|
10
.github/pull_request-template.md
vendored
10
.github/pull_request-template.md
vendored
|
@ -1,16 +1,20 @@
|
|||
<!-- Please ensure your PR title is brief and descriptive for a good changelog entry -->
|
||||
<!-- Link to issue if there is one -->
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
Fixes #
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
|
||||
<!-- Describe what the changes are -->
|
||||
|
||||
## Proposed Changes
|
||||
|
||||
-
|
||||
-
|
||||
-
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
|
||||
## Readiness Checklist
|
||||
|
||||
- [ ] Label as `breaking` if this is a large fundamental change
|
||||
- [ ] Label as either `automation`, `bug`, `documentation`, `enhancement`, `infrastructure`, or `performance`
|
||||
|
|
47
.github/workflows/automerge-dependabot.yml
vendored
Normal file
47
.github/workflows/automerge-dependabot.yml
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
#######################################
|
||||
#######################################
|
||||
## Dependabot automerge dependencies ##
|
||||
#######################################
|
||||
#######################################
|
||||
|
||||
#
|
||||
# Documentation:
|
||||
# https://medium.com/@toufik.airane/automerge-github-dependabot-alerts-with-github-actions-7cd6f5763750
|
||||
#
|
||||
|
||||
######################
|
||||
# name of the action #
|
||||
######################
|
||||
name: automerge on pull request
|
||||
|
||||
###############
|
||||
# When to run #
|
||||
###############
|
||||
on: [pull_request]
|
||||
|
||||
#################
|
||||
# Start the job #
|
||||
#################
|
||||
jobs:
|
||||
automerge:
|
||||
name: automerge dependabot
|
||||
runs-on: ubuntu-latest
|
||||
if: github.actor == 'dependabot[bot]'
|
||||
steps:
|
||||
- name: merge
|
||||
uses: actions/github-script@v2
|
||||
with:
|
||||
script: |
|
||||
github.pullRequests.createReview({
|
||||
owner: context.payload.repository.owner.login,
|
||||
repo: context.payload.repository.name,
|
||||
pull_number: context.payload.pull_request.number,
|
||||
event: 'APPROVE'
|
||||
})
|
||||
github.pullRequests.merge({
|
||||
owner: context.payload.repository.owner.login,
|
||||
repo: context.payload.repository.name,
|
||||
pull_number: context.payload.pull_request.number
|
||||
})
|
||||
github-token: ${{github.token}}
|
8
.github/workflows/deploy-DEV.yml
vendored
8
.github/workflows/deploy-DEV.yml
vendored
|
@ -18,9 +18,9 @@
|
|||
#############################
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'master'
|
||||
pull_request: []
|
||||
branches-ignore: [master]
|
||||
pull_request:
|
||||
branches-ignore: []
|
||||
|
||||
###############
|
||||
# Set the Job #
|
||||
|
@ -55,4 +55,4 @@ jobs:
|
|||
################################
|
||||
- name: Run Test Cases
|
||||
shell: bash
|
||||
run: docker run -e RUN_LOCAL=true -e TEST_CASE_RUN=true -v ${GITHUB_WORKSPACE}:/tmp/lint github/super-linter:${GITHUB_SHA}
|
||||
run: docker run -e RUN_LOCAL=true -e TEST_CASE_RUN=true -e OUTPUT_FORMAT=tap -e OUTPUT_FOLDER=${GITHUB_SHA} -e OUTPUT_DETAILS=detailed -v ${GITHUB_WORKSPACE}:/tmp/lint github/super-linter:${GITHUB_SHA}
|
||||
|
|
6
.github/workflows/stack-linter.yml
vendored
6
.github/workflows/stack-linter.yml
vendored
|
@ -15,8 +15,9 @@
|
|||
#############################
|
||||
on:
|
||||
push:
|
||||
branches: master
|
||||
pull_request: []
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches-ignore: []
|
||||
|
||||
###############
|
||||
# Set the Job #
|
||||
|
@ -44,3 +45,4 @@ jobs:
|
|||
uses: docker://github/super-linter:latest
|
||||
env:
|
||||
VALIDATE_ALL_CODEBASE: false
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
|
4
.github/workflows/stale.yml
vendored
4
.github/workflows/stale.yml
vendored
|
@ -37,9 +37,9 @@ jobs:
|
|||
days-before-stale: 30
|
||||
days-before-close: 14
|
||||
stale-issue-label: "O: stale 🤖"
|
||||
exempt-issue-label: "O: backlog 🤖"
|
||||
exempt-issue-labels: "O: backlog 🤖"
|
||||
stale-pr-label: "O: stale 🤖"
|
||||
exempt-pr-label: "O: backlog 🤖"
|
||||
exempt-pr-labels: "O: backlog 🤖"
|
||||
|
||||
##################
|
||||
# Mark not stale #
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -62,3 +62,6 @@ typings/
|
|||
|
||||
# clj-kondo cache
|
||||
.cache
|
||||
|
||||
# default output report
|
||||
super-linter.report
|
||||
|
|
6
.vscode/testlinter.sh
vendored
6
.vscode/testlinter.sh
vendored
|
@ -12,9 +12,9 @@ CODE_PATH='/tmp/lint' # Path to code base
|
|||
##################
|
||||
# Check the path #
|
||||
##################
|
||||
if [ ! -L $CODE_PATH ]; then
|
||||
if [ ! -L ${CODE_PATH} ]; then
|
||||
# Create symbolic link
|
||||
ln -s "$PWD"/.automation/test $CODE_PATH
|
||||
ln -s "${PWD}"/.automation/test ${CODE_PATH}
|
||||
fi
|
||||
|
||||
#########################
|
||||
|
@ -23,4 +23,4 @@ fi
|
|||
export RUN_LOCAL=true
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
source "$PWD"/lib/linter.sh
|
||||
source "${PWD}"/lib/linter.sh
|
||||
|
|
161
Dockerfile
161
Dockerfile
|
@ -4,6 +4,17 @@
|
|||
###########################################
|
||||
###########################################
|
||||
|
||||
#########################################
|
||||
# Get dependency images as build stages #
|
||||
#########################################
|
||||
FROM borkdude/clj-kondo:2020.06.21 as clj-kondo
|
||||
FROM dotenvlinter/dotenv-linter:2.1.0 as dotenv-linter
|
||||
FROM mstruebing/editorconfig-checker:2.1.0 as editorconfig-checker
|
||||
FROM golangci/golangci-lint:v1.29.0 as golangci-lint
|
||||
FROM yoheimuta/protolint:v0.25.1 as protolint
|
||||
FROM koalaman/shellcheck:v0.7.1 as shellcheck
|
||||
FROM wata727/tflint:0.18.0 as tflint
|
||||
|
||||
##################
|
||||
# Get base image #
|
||||
##################
|
||||
|
@ -29,10 +40,11 @@ ARG PSSA_VERSION='latest'
|
|||
ARG ARM_TTK_NAME='master.zip'
|
||||
ARG ARM_TTK_URI='https://github.com/Azure/arm-ttk/archive/master.zip'
|
||||
ARG ARM_TTK_DIRECTORY='/opt/microsoft'
|
||||
# Raku Linter
|
||||
ARG RAKU_VER="2020.06"
|
||||
ARG RAKU_INSTALL_PATH=/usr
|
||||
ARG RAKUBREW_HOME=/tmp/rakubrew
|
||||
# Dart Linter
|
||||
## stable dart sdk: https://dart.dev/get-dart#release-channels
|
||||
ARG DART_VERSION='2.8.4'
|
||||
## install alpine-pkg-glibc (glibc compatibility layer package for Alpine Linux)
|
||||
ARG GLIBC_VERSION='2.31-r0'
|
||||
|
||||
####################
|
||||
# Run APK installs #
|
||||
|
@ -83,17 +95,10 @@ RUN npm config set package-lock false \
|
|||
#############################
|
||||
ENV PATH="/node_modules/.bin:${PATH}"
|
||||
|
||||
####################
|
||||
# Run GEM installs #
|
||||
####################
|
||||
RUN gem install rubocop:0.74.0 rubocop-rails rubocop-github:0.13.0
|
||||
|
||||
# Need to fix the version as it installs 'rubocop:0.85.1' as a dep, and forces the default
|
||||
# We then need to promote the correct version, uninstall, and fix deps
|
||||
RUN sh -c 'INCORRECT_VERSION=$(gem list rhc -e rubocop | grep rubocop | awk "{print $2}" | cut -d"(" -f2 | cut -d"," -f1); \
|
||||
gem install --default rubocop:0.74.0; \
|
||||
yes | gem uninstall rubocop:$INCORRECT_VERSION -a -x -I; \
|
||||
gem install rubocop:0.74.0'
|
||||
##############################
|
||||
# Installs ruby dependencies #
|
||||
##############################
|
||||
RUN bundle install
|
||||
|
||||
#########################################
|
||||
# Install Powershell + PSScriptAnalyzer #
|
||||
|
@ -121,37 +126,42 @@ ENV ARM_TTK_PSD1="${ARM_TTK_DIRECTORY}/arm-ttk-master/arm-ttk/arm-ttk.psd1"
|
|||
RUN curl -sLO "${ARM_TTK_URI}" \
|
||||
&& unzip "${ARM_TTK_NAME}" -d "${ARM_TTK_DIRECTORY}" \
|
||||
&& rm "${ARM_TTK_NAME}" \
|
||||
&& ln -sTf "$ARM_TTK_PSD1" /usr/bin/arm-ttk
|
||||
&& ln -sTf "${ARM_TTK_PSD1}" /usr/bin/arm-ttk
|
||||
|
||||
######################
|
||||
# Install shellcheck #
|
||||
######################
|
||||
COPY --from=koalaman/shellcheck:v0.7.1 /bin/shellcheck /usr/bin/
|
||||
COPY --from=shellcheck /bin/shellcheck /usr/bin/
|
||||
|
||||
#####################
|
||||
# Install Go Linter #
|
||||
#####################
|
||||
COPY --from=golangci/golangci-lint:v1.27.0 /usr/bin/golangci-lint /usr/bin/
|
||||
COPY --from=golangci-lint /usr/bin/golangci-lint /usr/bin/
|
||||
|
||||
##################
|
||||
# Install TFLint #
|
||||
##################
|
||||
COPY --from=wata727/tflint:0.16.2 /usr/local/bin/tflint /usr/bin/
|
||||
COPY --from=tflint /usr/local/bin/tflint /usr/bin/
|
||||
|
||||
######################
|
||||
# Install protolint #
|
||||
######################
|
||||
COPY --from=yoheimuta/protolint:v0.25.1 /usr/local/bin/protolint /usr/bin/
|
||||
COPY --from=protolint /usr/local/bin/protolint /usr/bin/
|
||||
|
||||
#########################
|
||||
# Install dotenv-linter #
|
||||
#########################
|
||||
COPY --from=dotenvlinter/dotenv-linter:2.0.0 /dotenv-linter /usr/bin/
|
||||
COPY --from=dotenv-linter /dotenv-linter /usr/bin/
|
||||
|
||||
#####################
|
||||
# Install clj-kondo #
|
||||
#####################
|
||||
COPY --from=borkdude/clj-kondo:2020.06.21 /usr/local/bin/clj-kondo /usr/bin/
|
||||
COPY --from=clj-kondo /usr/local/bin/clj-kondo /usr/bin/
|
||||
|
||||
################################
|
||||
# Install editorconfig-checker #
|
||||
################################
|
||||
COPY --from=editorconfig-checker /usr/bin/ec /usr/bin/editorconfig-checker
|
||||
|
||||
##################
|
||||
# Install ktlint #
|
||||
|
@ -159,68 +169,73 @@ COPY --from=borkdude/clj-kondo:2020.06.21 /usr/local/bin/clj-kondo /usr/bin/
|
|||
RUN curl -sSLO https://github.com/pinterest/ktlint/releases/latest/download/ktlint && chmod a+x ktlint \
|
||||
&& mv "ktlint" /usr/bin/
|
||||
|
||||
####################
|
||||
# Install dart-sdk #
|
||||
####################
|
||||
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 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/ \
|
||||
&& rm -r dart-sdk/
|
||||
|
||||
################
|
||||
# Install Raku #
|
||||
################
|
||||
# Environment
|
||||
ENV PATH="$RAKU_INSTALL_PATH/share/perl6/site/bin:${PATH}"
|
||||
# Basic setup, programs and init
|
||||
RUN mkdir -p $RAKUBREW_HOME/bin \
|
||||
&& curl -sSLo $RAKUBREW_HOME/bin/rakubrew https://rakubrew.org/perl/rakubrew \
|
||||
&& chmod 755 $RAKUBREW_HOME/bin/rakubrew \
|
||||
&& eval "$($RAKUBREW_HOME/bin/rakubrew init Sh)"\
|
||||
&& rakubrew build moar $RAKU_VER --configure-opts='--prefix=$RAKU_INSTALL_PATH' \
|
||||
&& rm -rf $RAKUBREW_HOME/versions/moar-$RAKU_VER \
|
||||
&& rakubrew build-zef \
|
||||
&& rm -rf $RAKUBREW_HOME
|
||||
|
||||
################################
|
||||
# Install editorconfig-checker #
|
||||
################################
|
||||
COPY --from=mstruebing/editorconfig-checker:2.1.0 /usr/bin/ec /usr/bin/editorconfig-checker
|
||||
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing/" >> /etc/apk/repositories \
|
||||
&& apk add --update --no-cache rakudo zef
|
||||
|
||||
###########################################
|
||||
# Load GitHub Env Vars for GitHub Actions #
|
||||
###########################################
|
||||
ENV GITHUB_SHA=${GITHUB_SHA} \
|
||||
GITHUB_EVENT_PATH=${GITHUB_EVENT_PATH} \
|
||||
GITHUB_WORKSPACE=${GITHUB_WORKSPACE} \
|
||||
DEFAULT_BRANCH=${DEFAULT_BRANCH} \
|
||||
VALIDATE_ALL_CODEBASE=${VALIDATE_ALL_CODEBASE} \
|
||||
LINTER_RULES_PATH=${LINTER_RULES_PATH} \
|
||||
VALIDATE_YAML=${VALIDATE_YAML} \
|
||||
VALIDATE_JSON=${VALIDATE_JSON} \
|
||||
VALIDATE_XML=${VALIDATE_XML} \
|
||||
VALIDATE_MD=${VALIDATE_MD} \
|
||||
VALIDATE_BASH=${VALIDATE_BASH} \
|
||||
VALIDATE_PERL=${VALIDATE_PERL} \
|
||||
VALIDATE_RAKU=${VALIDATE_RAKU} \
|
||||
VALIDATE_PHP=${VALIDATE_PHP} \
|
||||
VALIDATE_PYTHON=${VALIDATE_PYTHON} \
|
||||
VALIDATE_RUBY=${VALIDATE_RUBY} \
|
||||
VALIDATE_COFFEE=${VALIDATE_COFFEE} \
|
||||
VALIDATE_ANSIBLE=${VALIDATE_ANSIBLE} \
|
||||
VALIDATE_DOCKER=${VALIDATE_DOCKER} \
|
||||
VALIDATE_JAVASCRIPT_ES=${VALIDATE_JAVASCRIPT_ES} \
|
||||
VALIDATE_JAVASCRIPT_STANDARD=${VALIDATE_JAVASCRIPT_STANDARD} \
|
||||
VALIDATE_TYPESCRIPT_ES=${VALIDATE_TYPESCRIPT_ES} \
|
||||
VALIDATE_TYPESCRIPT_STANDARD=${VALIDATE_TYPESCRIPT_STANDARD} \
|
||||
VALIDATE_GO=${VALIDATE_GO} \
|
||||
VALIDATE_TERRAFORM=${VALIDATE_TERRAFORM} \
|
||||
VALIDATE_CSS=${VALIDATE_CSS} \
|
||||
VALIDATE_ENV=${VALIDATE_ENV} \
|
||||
VALIDATE_CLOJURE=${VALIDATE_CLOJURE} \
|
||||
VALIDATE_KOTLIN=${VALIDATE_KOTLIN} \
|
||||
VALIDATE_POWERSHELL=${VALIDATE_POWERSHELL} \
|
||||
VALIDATE_ARM=${VALIDATE_ARM} \
|
||||
VALIDATE_OPENAPI=${VALIDATE_OPENAPI} \
|
||||
VALIDATE_PROTOBUF=${VALIDATE_PROTOBUF} \
|
||||
VALIDATE_EDITORCONFIG=${VALIDATE_EDITORCONFIG} \
|
||||
ENV ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG} \
|
||||
ANSIBLE_DIRECTORY=${ANSIBLE_DIRECTORY} \
|
||||
DEFAULT_BRANCH=${DEFAULT_BRANCH} \
|
||||
DISABLE_ERRORS=${DISABLE_ERRORS} \
|
||||
GITHUB_EVENT_PATH=${GITHUB_EVENT_PATH} \
|
||||
GITHUB_SHA=${GITHUB_SHA} \
|
||||
GITHUB_TOKEN=${GITHUB_TOKEN} \
|
||||
GITHUB_WORKSPACE=${GITHUB_WORKSPACE} \
|
||||
LINTER_RULES_PATH=${LINTER_RULES_PATH} \
|
||||
OUTPUT_DETAILS=${OUTPUT_DETAILS} \
|
||||
OUTPUT_FOLDER=${OUTPUT_FOLDER} \
|
||||
OUTPUT_FORMAT=${OUTPUT_FORMAT} \
|
||||
RUN_LOCAL=${RUN_LOCAL} \
|
||||
TEST_CASE_RUN=${TEST_CASE_RUN} \
|
||||
ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG} \
|
||||
DISABLE_ERRORS=${DISABLE_ERRORS}
|
||||
VALIDATE_ALL_CODEBASE=${VALIDATE_ALL_CODEBASE} \
|
||||
VALIDATE_ANSIBLE=${VALIDATE_ANSIBLE} \
|
||||
VALIDATE_ARM=${VALIDATE_ARM} \
|
||||
VALIDATE_BASH=${VALIDATE_BASH} \
|
||||
VALIDATE_CLOJURE=${VALIDATE_CLOJURE} \
|
||||
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_KOTLIN=${VALIDATE_KOTLIN} \
|
||||
VALIDATE_MD=${VALIDATE_MD} \
|
||||
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_TYPESCRIPT_ES=${VALIDATE_TYPESCRIPT_ES} \
|
||||
VALIDATE_TYPESCRIPT_STANDARD=${VALIDATE_TYPESCRIPT_STANDARD} \
|
||||
VALIDATE_XML=${VALIDATE_XML} \
|
||||
VALIDATE_YAML=${VALIDATE_YAML}
|
||||
|
||||
#############################
|
||||
# Copy scripts to container #
|
||||
|
|
187
README.md
187
README.md
|
@ -1,8 +1,10 @@
|
|||
# Super-Linter
|
||||
|
||||
This repository is for the **GitHub Action** to run a **Super-Linter**.
|
||||
It is a simple combination of various linters, written in `bash`, to help validate your source code.
|
||||
|
||||
The end goal of this tool:
|
||||
|
||||
- Prevent broken code from being uploaded to the default branch (Usually `master`)
|
||||
- Help establish coding best practices across multiple languages
|
||||
- Build guidelines for code layout and format
|
||||
|
@ -10,16 +12,24 @@ The end goal of this tool:
|
|||
|
||||
## Table of Contents
|
||||
|
||||
- [How it works](#how-it-works)
|
||||
- [Supported linters](#supported-linters)
|
||||
- [Usage](#how-to-use)
|
||||
- [Super-Linter](#super-linter)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [How it Works](#how-it-works)
|
||||
- [Supported Linters](#supported-linters)
|
||||
- [How to use](#how-to-use)
|
||||
- [Example connecting GitHub Action Workflow](#example-connecting-github-action-workflow)
|
||||
- [Environment variables](#environment-variables)
|
||||
- [Disable rules](#disabling-rules)
|
||||
- [Template rules files](#template-rules-files)
|
||||
- [Disabling rules](#disabling-rules)
|
||||
- [Docker Hub](#docker-hub)
|
||||
- [Run Super-Linter locally](#running-super-linter-locally-troubleshootingdebuggingenhancements)
|
||||
- [CI / CT/ CD](#cictcd)
|
||||
- [Run Super-Linter outside GitHub Actions](#run-super-linter-outside-github-actions)
|
||||
- [Local (troubleshooting/debugging/enhancements)](#local-troubleshootingdebuggingenhancements)
|
||||
- [Azure](#azure)
|
||||
- [GitLab](#gitlab)
|
||||
- [Visual Studio Code](#visual-studio-code)
|
||||
- [Limitations](#limitations)
|
||||
- [Contributing](#how-to-contribute)
|
||||
- [How to contribute](#how-to-contribute)
|
||||
- [License](#license)
|
||||
|
||||
## How it Works
|
||||
|
||||
|
@ -31,20 +41,21 @@ The design of the **Super-Linter** is currently to allow linting to occur in **G
|
|||
|
||||
Developers on **GitHub** can call the **GitHub Action** to lint their code base with the following list of linters:
|
||||
|
||||
| *Language* | *Linter* |
|
||||
| --- | --- |
|
||||
| _Language_ | _Linter_ |
|
||||
| -------------------------------- | ------------------------------------------------------------------------------------ |
|
||||
| **Ansible** | [ansible-lint](https://github.com/ansible/ansible-lint) |
|
||||
| **Azure Resource Manager (ARM)** | [arm-ttk](https://github.com/azure/arm-ttk) |
|
||||
| **AWS CloudFormation templates** | [cfn-lint](https://github.com/aws-cloudformation/cfn-python-lint/) |
|
||||
| **CSS** | [stylelint](https://stylelint.io/) |
|
||||
| **Clojure** | [clj-kondo](https://github.com/borkdude/clj-kondo) |
|
||||
| **CoffeeScript** | [coffeelint](https://coffeelint.github.io/) |
|
||||
| **Dart** | [dartanalyzer](https://dart.dev/guides/language/analysis-options) |
|
||||
| **Dockerfile** | [dockerfilelint](https://github.com/replicatedhq/dockerfilelint.git) |
|
||||
| **EDITORCONFIG** | [editorconfig-checker](https://github.com/editorconfig-checker/editorconfig-checker) |
|
||||
| **ENV** | [dotenv-linter](https://github.com/dotenv-linter/dotenv-linter) |
|
||||
| **Golang** | [golangci-lint](https://github.com/golangci/golangci-lint) |
|
||||
| **Groovy** | [npm-groovy-lint](https://github.com/nvuillam/npm-groovy-lint) |
|
||||
| **HTML** | [HTMLHint](https://github.com/htmlhint/HTMLHint) |
|
||||
| **HTMLHint** | [HTMLHint](https://github.com/htmlhint/HTMLHint) |
|
||||
| **JavaScript** | [eslint](https://eslint.org/) [standard js](https://standardjs.com/) |
|
||||
| **JSON** | [jsonlint](https://github.com/zaach/jsonlint) |
|
||||
| **Kotlin** | [ktlint](https://github.com/pinterest/ktlint) |
|
||||
|
@ -64,17 +75,22 @@ Developers on **GitHub** can call the **GitHub Action** to lint their code base
|
|||
| **YAML** | [YamlLint](https://github.com/adrienverge/yamllint) |
|
||||
|
||||
## How to use
|
||||
|
||||
More in-depth [tutorial](https://www.youtube.com/watch?v=EDAmFKO4Zt0&t=118s) available
|
||||
|
||||
To use this **GitHub** Action you will need to complete the following:
|
||||
|
||||
1. Create a new file in your repository called `.github/workflows/linter.yml`
|
||||
2. Copy the example workflow from below into that new file, no extra configuration required
|
||||
3. Commit that file to a new branch
|
||||
4. Open up a pull request and observe the action working
|
||||
5. Enjoy your more *stable*, and *cleaner* code base
|
||||
5. Enjoy your more _stable_, and _cleaner_ code base
|
||||
6. Check out the [Wiki](https://github.com/github/super-linter/wiki) for customization options
|
||||
|
||||
**NOTE:** You will need the _Environment_ variable `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}` set in your workflow file to be able to use the multiple status API returns. There is no need to set the **GitHub** Secret, it only needs to be passed.
|
||||
|
||||
### Example connecting GitHub Action Workflow
|
||||
|
||||
In your repository you should have a `.github/workflows` folder with **GitHub** Action similar to below:
|
||||
|
||||
- `.github/workflows/linter.yml`
|
||||
|
@ -133,17 +149,17 @@ jobs:
|
|||
env:
|
||||
VALIDATE_ALL_CODEBASE: false
|
||||
DEFAULT_BRANCH: master
|
||||
|
||||
...
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
**NOTE:**
|
||||
Using the line:`uses: docker://github/super-linter:v3` will pull the image down from **DockerHub** and run the **GitHub Super-Linter**. Using the line: `uses: github/super-linter@v3` will build and compile the **GitHub Super-Linter** at build time. *This can be far more costly in time...*
|
||||
Using the line:`uses: docker://github/super-linter:v3` will pull the image down from **DockerHub** and run the **GitHub Super-Linter**. Using the line: `uses: github/super-linter@v3` will build and compile the **GitHub Super-Linter** at build time. _This can be far more costly in time..._
|
||||
|
||||
## Environment variables
|
||||
|
||||
The super-linter allows you to pass the following `ENV` variables to be able to trigger different functionality.
|
||||
|
||||
*Note:* All the `VALIDATE_[LANGUAGE]` variables behave in a specific way.
|
||||
_Note:_ All the `VALIDATE_[LANGUAGE]` variables behave in a specific way.
|
||||
If none of them are passed, then they all default to true.
|
||||
However if any one of the variables are set, we default to leaving any unset variable to false.
|
||||
This means that if you run the linter "out of the box", all languages will be checked.
|
||||
|
@ -151,92 +167,109 @@ But if you wish to select specific linters, we give you full control to choose w
|
|||
and won't run anything unexpected.
|
||||
|
||||
| **ENV VAR** | **Default Value** | **Notes** |
|
||||
| --- | --- | --- |
|
||||
| **VALIDATE_ALL_CODEBASE** | `true` | Will parse the entire repository and find all files to validate across all types. **NOTE:** When set to `false`, only **new** or **edited** files will be parsed for validation. |
|
||||
| **DEFAULT_BRANCH** | `master` | The name of the repository default branch. |
|
||||
| **LINTER_RULES_PATH** | `.github/linters` | Directory for all linter configuration rules. |
|
||||
| **VALIDATE_YAML** | `true` |Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_JSON** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_XML** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_MD** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_BASH** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_PERL** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_RAKU** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_PHP** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_PYTHON** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_RUBY** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **RUBY_CONFIG_FILE** | `.ruby-lint.yml` | Filename for [rubocop configuration](https://docs.rubocop.org/rubocop/configuration.html) (ex: `.ruby-lint.yml`, `.rubocop.yml`)|
|
||||
| **VALIDATE_COFFEE** | `true` | Flag to enable or disable the linting process of the language . |
|
||||
| **VALIDATE_ANSIBLE** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_JAVASCRIPT_ES** | `true` | Flag to enable or disable the linting process of the language. (Utilizing: eslint) |
|
||||
| **JAVASCRIPT_ES_CONFIG_FILE** | `.eslintrc.yml` | Filename for [eslint configuration](https://eslint.org/docs/user-guide/configuring#configuration-file-formats) (ex: `.eslintrc.yml`, `.eslintrc.json`)|
|
||||
| **VALIDATE_JAVASCRIPT_STANDARD** | `true` | Flag to enable or disable the linting process of the language. (Utilizing: standard) |
|
||||
| **VALIDATE_JSX** | `true` | Flag to enable or disable the linting process for jsx files (Utilizing: eslint) |
|
||||
| **VALIDATE_TSX** | `true` | Flag to enable or disable the linting process for tsx files (Utilizing: eslint) |
|
||||
| **VALIDATE_TYPESCRIPT_ES** | `true` | Flag to enable or disable the linting process of the language. (Utilizing: eslint) |
|
||||
| **TYPESCRIPT_ES_CONFIG_FILE** | `.eslintrc.yml` | Filename for [eslint configuration](https://eslint.org/docs/user-guide/configuring#configuration-file-formats) (ex: `.eslintrc.yml`, `.eslintrc.json`)|
|
||||
| **VALIDATE_TYPESCRIPT_STANDARD** | `true` | Flag to enable or disable the linting process of the language. (Utilizing: standard) |
|
||||
| **VALIDATE_DOCKER** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_GO** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_GROOVY** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_POWERSHELL** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_ARM** | `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. |
|
||||
| **VALIDATE_CLOJURE** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_HTML** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_KOTLIN** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_OPENAPI** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_CLOUDFORMATION** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_PROTOBUF** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_EDITORCONFIG** | `true` | Flag to enable or disable the linting process with the editorconfig. |
|
||||
| **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. |
|
||||
| **ANSIBLE_DIRECTORY** | `/ansible` | Flag to set the root directory for Ansible file location(s). |
|
||||
| **DEFAULT_BRANCH** | `master` | The name of the repository default branch. |
|
||||
| **DEFAULT_WORKSPACE** | `/tmp/lint` | The location containing files to lint if you are running locally. |
|
||||
| **DISABLE_ERRORS** | `false` | Flag to have the linter complete with exit code 0 even if errors were detected. |
|
||||
| **JAVASCRIPT_ES_CONFIG_FILE** | `.eslintrc.yml` | Filename for [eslint configuration](https://eslint.org/docs/user-guide/configuring#configuration-file-formats) (ex: `.eslintrc.yml`, `.eslintrc.json`) |
|
||||
| **LINTER_RULES_PATH** | `.github/linters` | Directory for all linter configuration rules. |
|
||||
| **MULTI_STATUS** | `true` | A status API is made for each language that is linted to make visual parsing easier. |
|
||||
| **OUTPUT_FORMAT** | `none` | The report format to be generated, besides the stdout one. Output format of tap is currently using v13 of the specification. Supported formats: tap |
|
||||
| **OUTPUT_FOLDER** | `super-linter.report` | The location where the output reporting will be generated to. Output folder must not previously exist. |
|
||||
| **OUTPUT_DETAILS** | `simpler` | What level of details to be reported. Supported formats: simpler or detailed. |
|
||||
| **RUBY_CONFIG_FILE** | `.ruby-lint.yml` | Filename for [rubocop configuration](https://docs.rubocop.org/rubocop/configuration.html) (ex: `.ruby-lint.yml`, `.rubocop.yml`) |
|
||||
| **TYPESCRIPT_ES_CONFIG_FILE** | `.eslintrc.yml` | Filename for [eslint configuration](https://eslint.org/docs/user-guide/configuring#configuration-file-formats) (ex: `.eslintrc.yml`, `.eslintrc.json`) |
|
||||
| **VALIDATE_ALL_CODEBASE** | `true` | Will parse the entire repository and find all files to validate across all types. **NOTE:** When set to `false`, only **new** or **edited** files will be parsed for validation. |
|
||||
| **VALIDATE_ANSIBLE** | `true` | Flag to enable or disable the linting process of the Ansible language. |
|
||||
| **VALIDATE_ARM** | `true` | Flag to enable or disable the linting process of the ARM language. |
|
||||
| **VALIDATE_BASH** | `true` | Flag to enable or disable the linting process of the Bash language. |
|
||||
| **VALIDATE_CLOJURE** | `true` | Flag to enable or disable the linting process of the Clojure language. |
|
||||
| **VALIDATE_CLOUDFORMATION** | `true` | Flag to enable or disable the linting process of the AWS Cloud Formation language. |
|
||||
| **VALIDATE_COFFEE** | `true` | Flag to enable or disable the linting process of the Coffeescript language . |
|
||||
| **VALIDATE_CSS** | `true` | Flag to enable or disable the linting process of the CSS language. |
|
||||
| **VALIDATE_DART** | `true` | Flag to enable or disable the linting process of the Dart language. |
|
||||
| **VALIDATE_DOCKER** | `true` | Flag to enable or disable the linting process of the Docker language. |
|
||||
| **VALIDATE_EDITORCONFIG** | `true` | Flag to enable or disable the linting process with the editorconfig. |
|
||||
| **VALIDATE_ENV** | `true` | Flag to enable or disable the linting process of the ENV language. |
|
||||
| **VALIDATE_GO** | `true` | Flag to enable or disable the linting process of the Golang language. |
|
||||
| **VALIDATE_GROOVY** | `true` | Flag to enable or disable the linting process of the language. |
|
||||
| **VALIDATE_HTML** | `true` | Flag to enable or disable the linting process of the HTML language. |
|
||||
| **VALIDATE_JAVASCRIPT_ES** | `true` | Flag to enable or disable the linting process of the Javascript language. (Utilizing: eslint) |
|
||||
| **VALIDATE_JAVASCRIPT_STANDARD** | `true` | Flag to enable or disable the linting process of the Javascript language. (Utilizing: standard) |
|
||||
| **VALIDATE_JSON** | `true` | Flag to enable or disable the linting process of the JSON language. |
|
||||
| **VALIDATE_JSX** | `true` | Flag to enable or disable the linting process for jsx files (Utilizing: eslint) |
|
||||
| **VALIDATE_KOTLIN** | `true` | Flag to enable or disable the linting process of the Kotlin language. |
|
||||
| **VALIDATE_MD** | `true` | Flag to enable or disable the linting process of the Markdown language. |
|
||||
| **VALIDATE_OPENAPI** | `true` | Flag to enable or disable the linting process of the OpenAPI language. |
|
||||
| **VALIDATE_PERL** | `true` | Flag to enable or disable the linting process of the Perl language. |
|
||||
| **VALIDATE_PHP** | `true` | Flag to enable or disable the linting process of the PHP language. |
|
||||
| **VALIDATE_PROTOBUF** | `true` | Flag to enable or disable the linting process of the Protobuf language. |
|
||||
| **VALIDATE_PYTHON** | `true` | Flag to enable or disable the linting process of the Python language. |
|
||||
| **VALIDATE_POWERSHELL** | `true` | Flag to enable or disable the linting process of the Powershell language. |
|
||||
| **VALIDATE_RAKU** | `true` | Flag to enable or disable the linting process of the Raku language. |
|
||||
| **VALIDATE_RUBY** | `true` | Flag to enable or disable the linting process of the Ruby language. |
|
||||
| **VALIDATE_STATES** | `true` | Flag to enable or disable the linting process for AWS States Language. |
|
||||
| **VALIDATE_TERRAFORM** | `true` | Flag to enable or disable the linting process of the Terraform language. |
|
||||
| **VALIDATE_TSX** | `true` | Flag to enable or disable the linting process for tsx files (Utilizing: eslint) |
|
||||
| **VALIDATE_TYPESCRIPT_ES** | `true` | Flag to enable or disable the linting process of the Typescript language. (Utilizing: eslint) |
|
||||
| **VALIDATE_TYPESCRIPT_STANDARD** | `true` | Flag to enable or disable the linting process of the Typescript language. (Utilizing: standard) |
|
||||
| **VALIDATE_XML** | `true` | Flag to enable or disable the linting process of the XML language. |
|
||||
| **VALIDATE_YAML** | `true` | Flag to enable or disable the linting process of the YAML language. |
|
||||
|
||||
### 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.
|
||||
|
||||
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.
|
||||
|
||||
- Copy **any** or **all** template rules files from `TEMPLATES/` into your repository in the location: `.github/linters/` of your repository
|
||||
- If your repository does not have rules files, they will fall back to defaults in [this repository's `TEMPLATE` folder](https://github.com/github/super-linter/tree/master/TEMPLATES)
|
||||
|
||||
## Disabling rules
|
||||
If you need to disable certain *rules* and *functionality*, you can view [Disable Rules](https://github.com/github/super-linter/blob/master/docs/disabling-linters.md)
|
||||
|
||||
If you need to disable certain _rules_ and _functionality_, you can view [Disable Rules](https://github.com/github/super-linter/blob/master/docs/disabling-linters.md)
|
||||
|
||||
## Docker Hub
|
||||
The **Docker** container that is built from this repository is located at `https://hub.docker.com/r/github/super-linter`
|
||||
|
||||
## Running Super-Linter locally (troubleshooting/debugging/enhancements)
|
||||
The **Docker** container that is built from this repository is located at [github/super-linter](https://hub.docker.com/r/github/super-linter)
|
||||
|
||||
## Run Super-Linter outside GitHub Actions
|
||||
|
||||
### Local (troubleshooting/debugging/enhancements)
|
||||
|
||||
If you find that you need to run super-linter locally, you can follow the documentation at [Running super-linter locally](https://github.com/github/super-linter/blob/master/docs/run-linter-locally.md)
|
||||
|
||||
Check out the [note](#how-it-works) in **How it Works** to understand more about the **Super-Linter** linting locally versus via continuous integration.
|
||||
|
||||
### CI/CT/CD
|
||||
The **Super-Linter** has *CI/CT/CD* configured utilizing **GitHub** Actions.
|
||||
- When a branch is created and code is pushed, a **GitHub** Action is triggered for building the new **Docker** container with the new codebase
|
||||
- The **Docker** container is then ran against the *test cases* to validate all code sanity
|
||||
- `.automation/test` contains all test cases for each language that should be validated
|
||||
- These **GitHub** Actions utilize the Checks API and Protected Branches to help follow the SDLC
|
||||
- When the Pull Request is merged to master, the **Super-Linter** **Docker** container is then updated and deployed with the new codebase
|
||||
- **Note:** The branch's **Docker** container is also removed from **DockerHub** to cleanup after itself
|
||||
### Azure
|
||||
|
||||
## Limitations
|
||||
Below are a list of the known limitations for the **GitHub Super-Linter**:
|
||||
- Due to being completely packaged at run time, you will not be able to update dependencies or change versions of the enclosed linters and binaries
|
||||
- Additional details from `package.json` are not read by the **GitHub Super-Linter**
|
||||
- Downloading additional codebases as dependencies from private repositories will fail due to lack of permissions
|
||||
Check out this [article](http://blog.tyang.org/2020/06/27/use-github-super-linter-in-azure-pipelines/)
|
||||
|
||||
## How to contribute
|
||||
If you would like to help contribute to this **GitHub** Action, please see [CONTRIBUTING](https://github.com/github/super-linter/blob/master/.github/CONTRIBUTING.md)
|
||||
### GitLab
|
||||
|
||||
Check out this [snippet](https://gitlab.com/snippets/1988376)
|
||||
|
||||
### Visual Studio Code
|
||||
|
||||
You can checkout this repository using [Container Remote Development](https://code.visualstudio.com/docs/remote/containers), and debug the linter using the `Test Linter` task.
|
||||
![Example](https://user-images.githubusercontent.com/15258962/85165778-2d2ce700-b21b-11ea-803e-3f6709d8e609.gif)
|
||||
|
||||
We will also support [Github Codespaces](https://github.com/features/codespaces/) once it becomes available
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
## Limitations
|
||||
|
||||
Below are a list of the known limitations for the **GitHub Super-Linter**:
|
||||
|
||||
- Due to being completely packaged at run time, you will not be able to update dependencies or change versions of the enclosed linters and binaries
|
||||
- Additional details from `package.json` are not read by the **GitHub Super-Linter**
|
||||
- Downloading additional codebases as dependencies from private repositories will fail due to lack of permissions
|
||||
|
||||
## How to contribute
|
||||
|
||||
If you would like to help contribute to this **GitHub** Action, please see [CONTRIBUTING](https://github.com/github/super-linter/blob/master/.github/CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
### License
|
||||
|
||||
- [MIT License](https://github.com/github/super-linter/blob/master/LICENSE)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# 'Error'
|
||||
# 'Warning'
|
||||
#)
|
||||
#IncludeDefaultRules=$true
|
||||
#IncludeDefaultRules=${true}
|
||||
#ExcludeRules = @(
|
||||
# 'PSAvoidUsingWriteHost',
|
||||
# 'MyCustomRuleName'
|
||||
|
|
|
@ -3,7 +3,7 @@ author: 'GitHub'
|
|||
description: 'It is a simple combination of various linters, written in bash, to help validate your source code.'
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
image: 'docker://github/super-linter:v3'
|
||||
branding:
|
||||
icon: 'check-square'
|
||||
color: 'white'
|
||||
|
|
10
dependencies/Gemfile
vendored
Normal file
10
dependencies/Gemfile
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source "https://rubygems.org"
|
||||
|
||||
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
||||
|
||||
gem "rubocop", "~> 0.82.0"
|
||||
gem "rubocop-github", "~> 0.16.0"
|
||||
gem "rubocop-performance", "~>1.7.1"
|
||||
gem "rubocop-rails", "~> 2.5"
|
57
dependencies/Gemfile.lock
vendored
Normal file
57
dependencies/Gemfile.lock
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.3.2)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
ast (2.4.1)
|
||||
concurrent-ruby (1.1.6)
|
||||
i18n (1.8.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jaro_winkler (1.5.4)
|
||||
minitest (5.14.1)
|
||||
parallel (1.19.2)
|
||||
parser (2.7.1.4)
|
||||
ast (~> 2.4.1)
|
||||
rack (2.2.3)
|
||||
rainbow (3.0.0)
|
||||
rexml (3.2.4)
|
||||
rubocop (0.82.0)
|
||||
jaro_winkler (~> 1.5.1)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 2.7.0.1)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
rexml
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 2.0)
|
||||
rubocop-github (0.16.0)
|
||||
rubocop (<= 0.82.0)
|
||||
rubocop-performance (~> 1.0)
|
||||
rubocop-rails (~> 2.0)
|
||||
rubocop-performance (1.7.1)
|
||||
rubocop (>= 0.82.0)
|
||||
rubocop-rails (2.6.0)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 0.82.0)
|
||||
ruby-progressbar (1.10.1)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.7)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.7.0)
|
||||
zeitwerk (2.4.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
rubocop (~> 0.82.0)
|
||||
rubocop-github (~> 0.16.0)
|
||||
rubocop-performance (~> 1.7.1)
|
||||
rubocop-rails (~> 2.5)
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
38
dependencies/Pipfile.lock
generated
vendored
38
dependencies/Pipfile.lock
generated
vendored
|
@ -18,17 +18,16 @@
|
|||
"default": {
|
||||
"argcomplete": {
|
||||
"hashes": [
|
||||
"sha256:5ae7b601be17bf38a749ec06aa07fb04e7b6b5fc17906948dc1866e7facf3740",
|
||||
"sha256:890bdd1fcbb973ed73db241763e78b6d958580e588c2910b508c770a59ef37d7"
|
||||
"sha256:2fbe5ed09fd2c1d727d4199feca96569a5b50d44c71b16da9c742201f7cc295c",
|
||||
"sha256:91dc7f9c7f6281d5a0dce5e73d2e33283aaef083495c13974a7dd197a1cdc949"
|
||||
],
|
||||
"version": "==1.11.1"
|
||||
"version": "==1.12.0"
|
||||
},
|
||||
"astroid": {
|
||||
"hashes": [
|
||||
"sha256:2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703",
|
||||
"sha256:bc58d83eb610252fd8de6363e39d4f1d0619c894b0ed24603b881c02e64c7386"
|
||||
],
|
||||
"markers": "python_version >= '3.5'",
|
||||
"version": "==2.4.2"
|
||||
},
|
||||
"attrs": {
|
||||
|
@ -36,7 +35,6 @@
|
|||
"sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
|
||||
"sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==19.3.0"
|
||||
},
|
||||
"aws-sam-translator": {
|
||||
|
@ -49,25 +47,24 @@
|
|||
},
|
||||
"boto3": {
|
||||
"hashes": [
|
||||
"sha256:c2a223f4b48782e8b160b2130265e2a66081df111f630a5a384d6909e29a5aa9",
|
||||
"sha256:ce5a4ab6af9e993d1864209cbbb6f4812f65fbc57ad6b95e5967d8bf38b1dcfb"
|
||||
"sha256:07bd0872e9178b637baefb82aff8abb76197770c9fc60c4d6575564ba878e3e4"
|
||||
],
|
||||
"version": "==1.14.16"
|
||||
"version": "==1.14.22"
|
||||
},
|
||||
"botocore": {
|
||||
"hashes": [
|
||||
"sha256:99d995ef99cf77458a661f3fc64e0c3a4ce77ca30facfdf0472f44b2953dd856",
|
||||
"sha256:fe0c4f7cd6b67eff3b7cb8dff6709a65d6fca10b7b7449a493b2036915e98b4c"
|
||||
"sha256:4d084dfcfcdf21ac2df17d017607ca53d53ac6c2fa17484cdd87ef78daba06b8",
|
||||
"sha256:f491d3c29d7dda8c8907c520bc96d77a67a8953dfed7f55c250799849e213640"
|
||||
],
|
||||
"version": "==1.17.16"
|
||||
"version": "==1.17.22"
|
||||
},
|
||||
"cfn-lint": {
|
||||
"hashes": [
|
||||
"sha256:b29d172a0910f305162e354fd421594ab575ace6431b7b8884c245dfc5064859",
|
||||
"sha256:ff9b566bda43a2e74fdd89b57cbf0f76e209e4e666cc4babe7c96cbd3fb56bfe"
|
||||
"sha256:443e7c1a57a8909050b51873cbf53628e253b6a2ab00fba9d25f89e75f13f1b6",
|
||||
"sha256:b2a7b9a84688d87d0d49d1dad2602382ba2a8be9d20d87278f4d42c59f71eddc"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.33.2"
|
||||
"version": "==0.34.0"
|
||||
},
|
||||
"decorator": {
|
||||
"hashes": [
|
||||
|
@ -82,7 +79,6 @@
|
|||
"sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
|
||||
"sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
|
||||
],
|
||||
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==0.15.2"
|
||||
},
|
||||
"isort": {
|
||||
|
@ -90,7 +86,6 @@
|
|||
"sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1",
|
||||
"sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==4.3.21"
|
||||
},
|
||||
"jmespath": {
|
||||
|
@ -98,7 +93,6 @@
|
|||
"sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9",
|
||||
"sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"
|
||||
],
|
||||
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==0.10.0"
|
||||
},
|
||||
"jsonpatch": {
|
||||
|
@ -114,7 +108,6 @@
|
|||
"sha256:c192ba86648e05fdae4f08a17ec25180a9aef5008d973407b581798a83975362",
|
||||
"sha256:ff379fa021d1b81ab539f5ec467c7745beb1a5671463f9dcc2b2d458bd361c1e"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.0"
|
||||
},
|
||||
"jsonschema": {
|
||||
|
@ -154,7 +147,6 @@
|
|||
"sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4",
|
||||
"sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.4.3"
|
||||
},
|
||||
"mccabe": {
|
||||
|
@ -198,7 +190,6 @@
|
|||
"sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
|
||||
"sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.8.1"
|
||||
},
|
||||
"pyyaml": {
|
||||
|
@ -238,7 +229,6 @@
|
|||
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
|
||||
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.15.0"
|
||||
},
|
||||
"toml": {
|
||||
|
@ -271,11 +261,11 @@
|
|||
},
|
||||
"yamllint": {
|
||||
"hashes": [
|
||||
"sha256:0fa69bf8a86182b7fe14918bdd3a30354c869966bbc7cbfff176af71bda9c806",
|
||||
"sha256:59f3ff77f44e7f46be6aecdb985830f73a1c51e290b7082a7d38c2ae1940f4a9"
|
||||
"sha256:40b68de6bacdccec1585dbd54072731b10da7fc2f9cfd96517a71f066208b61f",
|
||||
"sha256:ad3b0d30317dca005d7af99ff27248d459cae2d931a2ff06a134b67bcd405b30"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.23.0"
|
||||
"version": "==1.24.2"
|
||||
},
|
||||
"yq": {
|
||||
"hashes": [
|
||||
|
|
1547
dependencies/package-lock.json
generated
vendored
1547
dependencies/package-lock.json
generated
vendored
File diff suppressed because it is too large
Load diff
14
dependencies/package.json
vendored
14
dependencies/package.json
vendored
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"name": "super-linter",
|
||||
"dependencies": {
|
||||
"@coffeelint/cli": "^3.2.9",
|
||||
"@coffeelint/cli": "^3.2.10",
|
||||
"@stoplight/spectral": "^5.4.0",
|
||||
"@typescript-eslint/eslint-plugin": "^3.6.1",
|
||||
"@typescript-eslint/parser": "^3.6.1",
|
||||
"@typescript-eslint/eslint-plugin": "^3.7.0",
|
||||
"@typescript-eslint/parser": "^3.7.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"dockerfilelint": "^1.5.0",
|
||||
"eslint": "^7.4.0",
|
||||
"eslint": "^7.5.0",
|
||||
"eslint-config-prettier": "^6.11.0",
|
||||
"eslint-plugin-jest": "^23.18.0",
|
||||
"htmlhint": "^0.14.1",
|
||||
|
@ -18,7 +18,9 @@
|
|||
"standard": "^14.3.4",
|
||||
"stylelint": "^13.6.1",
|
||||
"stylelint-config-standard": "^20.0.0",
|
||||
"typescript": "^3.9.6",
|
||||
"npm-groovy-lint": "^5.5.0"
|
||||
"npm-groovy-lint": "^5.5.0",
|
||||
"typescript": "^3.9.7",
|
||||
"asl-validator": "^1.7.0"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# Disabling linters and Rules
|
||||
|
||||
Linters can often require additional configuration to ensure they work with your codebase and your team's coding style, to avoid flagging false-positives. The **GitHub Super-Linter** has set up some default configurations for each linter which should work reasonably well with common code bases, but many of the linters can be configured to disable certain rules or configure the rules to ignore certain pieces of codes.
|
||||
|
||||
To run with your own configuration for a linter, copy the relevant [`TEMPLATE` configuration file for the linter you are using from this repo](https://github.com/github/super-linter/tree/master/TEMPLATES) into the `.github/linters` folder in your own repository, and then edit it to modify, disable - or even add - rules and configuration to suit how you want your code checked.
|
||||
|
@ -7,11 +8,12 @@ How the changes are made differ for each linter, and also how much the **Github
|
|||
|
||||
Where a configuration file exists in your repo, it will be used in preference to the default one in the **GitHub Super-Linter** `TEMPLATES` directory (not in addition to it), and where one doesn't exist the `TEMPLATES` version will be used. So you should copy the complete configuration file you require to change from the `TEMPLATES` directory and not just the lines of config you want to change.
|
||||
|
||||
It is possible to have custom configurations for some linters, and continue to use the default from `TEMPLATES` directory for others, so if you use `Python` and `JavaScript` and only need to tweak the `Python` rules, then you only need to have a custom configuration for *pylint* and continue to use the default `TEMPLATE` from the main repo for *ESLint*, for example.
|
||||
It is possible to have custom configurations for some linters, and continue to use the default from `TEMPLATES` directory for others, so if you use `Python` and `JavaScript` and only need to tweak the `Python` rules, then you only need to have a custom configuration for _pylint_ and continue to use the default `TEMPLATE` from the main repo for _ESLint_, for example.
|
||||
|
||||
For some linters it is also possible to override rules on a case by case level with directives in your code. Where this is possible we try to note how to do this in the specific linter sections below, but the official linter documentation will likely give more detail on this.
|
||||
|
||||
## Table of Linters
|
||||
|
||||
- [Ruby](#ruby)
|
||||
- [Shell](#shell)
|
||||
- [Ansible](#ansible)
|
||||
|
@ -43,23 +45,27 @@ For some linters it is also possible to override rules on a case by case level w
|
|||
|
||||
<!-- toc -->
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Ruby
|
||||
|
||||
- [RuboCop](https://github.com/rubocop-hq/rubocop)
|
||||
|
||||
### RuboCop Config file
|
||||
|
||||
- `.github/linters/.ruby-lint.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.ruby-lint.yml`
|
||||
- **Note:** We use the Default **GitHub** Rule set from [RuboCop-GitHub](https://github.com/github/rubocop-github)
|
||||
|
||||
### RuboCop disable single line
|
||||
|
||||
```ruby
|
||||
method(argument) # rubocop:disable SomeRule, SomeOtherRule
|
||||
```
|
||||
|
||||
### RuboCop disable code block
|
||||
|
||||
```ruby
|
||||
# rubocop:disable
|
||||
This is a long line
|
||||
|
@ -68,6 +74,7 @@ var="this is some other stuff"
|
|||
```
|
||||
|
||||
### RuboCop disable entire file
|
||||
|
||||
If you need to ignore an entire file, you can update the `.github/linters/.ruby-lint.yml` to ignore certain files and locations
|
||||
|
||||
```yml
|
||||
|
@ -86,27 +93,31 @@ AllCops:
|
|||
TargetRubyVersion: 2.5.1
|
||||
EnabledByDefault: true
|
||||
Exclude:
|
||||
- 'db/**/*'
|
||||
- 'config/**/*'
|
||||
- 'script/**/*'
|
||||
- 'bin/{rails,rake}'
|
||||
- "db/**/*"
|
||||
- "config/**/*"
|
||||
- "script/**/*"
|
||||
- "bin/{rails,rake}"
|
||||
- !ruby/regexp /old_and_unused\.rb$/
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Shell
|
||||
|
||||
- [Shellcheck](https://github.com/koalaman/shellcheck)
|
||||
|
||||
### Shellcheck Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### Shellcheck disable single line
|
||||
|
||||
```bash
|
||||
echo "Terrible stuff" # shellcheck disable=SC2059,SC2086
|
||||
```
|
||||
|
||||
### Shellcheck disable code block
|
||||
|
||||
```bash
|
||||
# shellcheck disable=SC2059,SC2086
|
||||
echo "some hot garbage"
|
||||
|
@ -114,7 +125,9 @@ echo "More garbage code"
|
|||
```
|
||||
|
||||
### Shellcheck disable entire file
|
||||
|
||||
- **Note:** The disable must be on the second line of the code right after the shebang
|
||||
|
||||
```bash
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2059,SC1084
|
||||
|
@ -123,23 +136,28 @@ echo "stuff"
|
|||
moreThings()
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Ansible
|
||||
|
||||
- [ansible-lint](https://github.com/ansible/ansible-lint)
|
||||
|
||||
### Ansible-lint Config file
|
||||
|
||||
- `.github/linters/.ansible-lint.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.ansible-lint.yml`
|
||||
|
||||
### Ansible-lint disable single line
|
||||
|
||||
```yml
|
||||
- name: this would typically fire GitHasVersionRule 401 and BecomeUserWithoutBecomeRule 501
|
||||
become_user: alice # noqa 401 501
|
||||
git: src=/path/to/git/repo dest=checkout
|
||||
```
|
||||
|
||||
### Ansible-lint disable code block
|
||||
|
||||
```yml
|
||||
- name: this would typically fire GitHasVersionRule 401
|
||||
git: src=/path/to/git/repo dest=checkout
|
||||
|
@ -148,28 +166,34 @@ moreThings()
|
|||
```
|
||||
|
||||
### Ansible-lint disable entire file
|
||||
|
||||
```yml
|
||||
- name: this would typically fire GitHasVersionRule 401
|
||||
git: src=/path/to/git/repo dest=checkout
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
```
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
---
|
||||
|
||||
## YAML
|
||||
|
||||
- [YamlLint](https://github.com/adrienverge/yamllint)
|
||||
|
||||
### Yamllint Config file
|
||||
|
||||
- `.github/linters/.yaml-lint.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.yaml-lint.yml`
|
||||
|
||||
### Yamllint disable single line
|
||||
|
||||
```yml
|
||||
This line is waaaaaaaaaay too long # yamllint disable-line
|
||||
```
|
||||
|
||||
### Yamllint disable code block
|
||||
|
||||
```yml
|
||||
# yamllint disable rule:colons
|
||||
- Key: value
|
||||
|
@ -179,7 +203,9 @@ This line is waaaaaaaaaay too long # yamllint disable-line
|
|||
```
|
||||
|
||||
### Yamllint disable entire file
|
||||
|
||||
If you need to ignore an entire file, you can update the `.github/linters/.yaml-lint.yml` to ignore certain files and locations
|
||||
|
||||
```yml
|
||||
# For all rules
|
||||
ignore: |
|
||||
|
@ -198,22 +224,26 @@ rules:
|
|||
/ascii-art/*
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Python3
|
||||
|
||||
- [pylint](https://www.pylint.org/)
|
||||
|
||||
### Pylint Config file
|
||||
|
||||
- `.github/linters/.python-lint`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.python-lint`
|
||||
|
||||
### Pylint disable single line
|
||||
|
||||
```python
|
||||
global VAR # pylint: disable=global-statement
|
||||
```
|
||||
|
||||
### Pylint disable code block
|
||||
|
||||
```python
|
||||
"""pylint option block-disable"""
|
||||
|
||||
|
@ -244,6 +274,7 @@ class Foo(object):
|
|||
```
|
||||
|
||||
### Pylint disable entire file
|
||||
|
||||
```python
|
||||
#!/bin/python3
|
||||
# pylint: skip-file
|
||||
|
@ -251,21 +282,26 @@ class Foo(object):
|
|||
var = "terrible code down here..."
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## AWS CloudFormation templates
|
||||
|
||||
- [cfn-lint](https://github.com/aws-cloudformation/cfn-python-lint/)
|
||||
|
||||
### cfn-lint Config file
|
||||
|
||||
- `.github/linters/.cfnlintrc.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.cfnlintrc.yml`
|
||||
|
||||
### cfn-lint disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### cfn-lint disable code block
|
||||
|
||||
You can disable both [template](https://github.com/aws-cloudformation/cfn-python-lint/#template-based-metadata) or [resource](https://github.com/aws-cloudformation/cfn-python-lint/#resource-based-metadata) via [metadata](https://github.com/aws-cloudformation/cfn-python-lint/#metadata):
|
||||
|
||||
```yaml
|
||||
Resources:
|
||||
myInstance:
|
||||
|
@ -281,142 +317,189 @@ Resources:
|
|||
```
|
||||
|
||||
### cfn-lint disable entire file
|
||||
|
||||
If you need to ignore an entire file, you can update the `.github/linters/.cfnlintrc.yml` to ignore certain files and locations
|
||||
|
||||
```yaml
|
||||
ignore_templates:
|
||||
- codebuild.yaml
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## JSON
|
||||
|
||||
- [jsonlint](https://github.com/zaach/jsonlint)
|
||||
|
||||
### JsonLint Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### JsonLint disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### JsonLint disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### JsonLint disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Markdown
|
||||
|
||||
- [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli#readme)
|
||||
- [markdownlint rule documentation](https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md)
|
||||
- [markdownlint inline comment syntax](https://github.com/DavidAnson/markdownlint#configuration)
|
||||
|
||||
### markdownlint Config file
|
||||
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.markdown-lint.yml`
|
||||
|
||||
### markdownlint disable single line
|
||||
|
||||
```markdown
|
||||
## Here is some document
|
||||
|
||||
Here is some random data
|
||||
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
any violation you want
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
|
||||
Here is more data
|
||||
```
|
||||
|
||||
### markdownlint disable code block
|
||||
|
||||
```markdown
|
||||
## Here is some document
|
||||
|
||||
Here is some random data
|
||||
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
any violations you want
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
|
||||
Here is more data
|
||||
```
|
||||
|
||||
### markdownlint disable entire file
|
||||
- You can encapsulate the entire file with the *code block format* to disable an entire file from being parsed
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
- You can encapsulate the entire file with the _code block format_ to disable an entire file from being parsed
|
||||
|
||||
---
|
||||
|
||||
## Perl
|
||||
|
||||
- [perl](https://pkgs.alpinelinux.org/package/edge/main/x86/perl)
|
||||
|
||||
### Perl Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### Perl disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Perl disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Perl disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Raku
|
||||
|
||||
- [raku](https://raku.org)
|
||||
|
||||
### Raku Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### Raku disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Raku disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Raku disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## PHP
|
||||
|
||||
- [PHP](https://www.php.net/)
|
||||
|
||||
### PHP Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### PHP disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### PHP disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### PHP disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## XML
|
||||
|
||||
- [XML](http://xmlsoft.org/)
|
||||
|
||||
### LibXML Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### LibXML disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### LibXML disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### LibXML disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Coffeescript
|
||||
|
||||
- [coffeelint](https://coffeelint.github.io/)
|
||||
|
||||
### coffeelint Config file
|
||||
|
||||
- `.github/linters/.coffee-lint.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.coffee.yml`
|
||||
|
||||
### coffeelint disable single line
|
||||
|
||||
```Coffeescript
|
||||
# coffeelint: disable=max_line_length
|
||||
foo = "some/huge/line/string/with/embed/#{values}.that/surpasses/the/max/column/width"
|
||||
|
@ -424,6 +507,7 @@ foo = "some/huge/line/string/with/embed/#{values}.that/surpasses/the/max/column/
|
|||
```
|
||||
|
||||
### coffeelint disable code block
|
||||
|
||||
```Coffeescript
|
||||
# coffeelint: disable
|
||||
foo = "some/huge/line/string/with/embed/#{values}.that/surpasses/the/max/column/width"
|
||||
|
@ -434,135 +518,164 @@ taz = "some/huge/line/string/with/embed/#{values}.that/surpasses/the/max/column/
|
|||
```
|
||||
|
||||
### coffeelint disable entire file
|
||||
- You can encapsulate the entire file with the *code block format* to disable an entire file from being parsed
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
- You can encapsulate the entire file with the _code block format_ to disable an entire file from being parsed
|
||||
|
||||
---
|
||||
|
||||
## Javascript eslint
|
||||
|
||||
- [eslint](https://eslint.org/)
|
||||
|
||||
### Javascript eslint Config file
|
||||
|
||||
- `.github/linters/.eslintrc.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.eslintrc.yml`
|
||||
|
||||
### Javascript eslint disable single line
|
||||
|
||||
```javascript
|
||||
var thing = new Thing(); // eslint-disable-line no-use-before-define
|
||||
thing.sayHello();
|
||||
|
||||
function Thing() {
|
||||
|
||||
this.sayHello = function() { console.log("hello"); };
|
||||
|
||||
this.sayHello = function () {
|
||||
console.log("hello");
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Javascript eslint disable code block
|
||||
|
||||
```javascript
|
||||
/*eslint-disable */
|
||||
|
||||
//suppress all warnings between comments
|
||||
alert('foo')
|
||||
alert("foo");
|
||||
|
||||
/*eslint-enable */
|
||||
```
|
||||
|
||||
### Javascript eslint disable entire file
|
||||
|
||||
- Place at the top of the file:
|
||||
|
||||
```javascript
|
||||
/* eslint-disable */
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Javascript standard
|
||||
|
||||
- [standard js](https://standardjs.com/)
|
||||
|
||||
### Javascript standard Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### Javascript standard disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Javascript standard disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Javascript standard disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Typescript eslint
|
||||
|
||||
- [eslint](https://eslint.org/)
|
||||
|
||||
### Typescript eslint Config file
|
||||
|
||||
- `.github/linters/.eslintrc.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.eslintrc.yml`
|
||||
|
||||
### Typescript eslint disable single line
|
||||
|
||||
```typescript
|
||||
var thing = new Thing(); // eslint-disable-line no-use-before-define
|
||||
thing.sayHello();
|
||||
|
||||
function Thing() {
|
||||
|
||||
this.sayHello = function() { console.log("hello"); };
|
||||
|
||||
this.sayHello = function () {
|
||||
console.log("hello");
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Typescript eslint disable code block
|
||||
|
||||
```typescript
|
||||
/*eslint-disable */
|
||||
|
||||
//suppress all warnings between comments
|
||||
alert('foo')
|
||||
alert("foo");
|
||||
|
||||
/*eslint-enable */
|
||||
```
|
||||
|
||||
### Typescript eslint disable entire file
|
||||
|
||||
```typescript
|
||||
/* eslint-disable */
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Typescript standard
|
||||
|
||||
- [standardjs](https://standardjs.com/)
|
||||
|
||||
### Typescript standard Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### Typescript standard disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Typescript standard disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Typescript standard disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Golang
|
||||
|
||||
- [golangci-lint](https://github.com/golangci/golangci-lint)
|
||||
|
||||
### golangci-lint standard Config file
|
||||
|
||||
- `.github/linters/.golangci.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.golangci.yml`
|
||||
|
||||
### golangci-lint disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### golangci-lint disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### golangci-lint disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Groovy
|
||||
- [npm-groovy-lint](https://github.com/nvuillam/npm-groovy-lint)
|
||||
|
@ -603,50 +716,63 @@ def variable = 1;
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
## Dockerfile
|
||||
|
||||
- [dockerfilelint](https://github.com/replicatedhq/dockerfilelint.git)
|
||||
|
||||
### Dockerfilelint standard Config file
|
||||
|
||||
- `.github/linters/.dockerfilelintrc`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.dockerfilelintrc`
|
||||
|
||||
### Dockerfilelint disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Dockerfilelint disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### Dockerfilelint disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Terraform
|
||||
|
||||
- [tflint](https://github.com/terraform-linters/tflint)
|
||||
|
||||
### tflint standard Config file
|
||||
|
||||
- `.github/linters/.tflint.hcl`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.tflint.hcl`
|
||||
|
||||
### tflint disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### tflint disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### tflint disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## CSS
|
||||
|
||||
- [stylelint](https://stylelint.io/)
|
||||
|
||||
### stylelint standard Config file
|
||||
|
||||
- `.github/linters/.stylelintrc.json`
|
||||
|
||||
### stylelint disable single line
|
||||
|
||||
```css
|
||||
#id {
|
||||
/* stylelint-disable-next-line declaration-no-important */
|
||||
|
@ -655,14 +781,18 @@ def variable = 1;
|
|||
```
|
||||
|
||||
### stylelint disable code block
|
||||
|
||||
```css
|
||||
/* stylelint-disable */
|
||||
a {}
|
||||
a {
|
||||
}
|
||||
/* stylelint-enable */
|
||||
```
|
||||
|
||||
### stylelint disable entire file
|
||||
|
||||
- You can disable entire files with the `ignoreFiles` property in `.stylelintrc.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"ignoreFiles": [
|
||||
|
@ -672,39 +802,48 @@ 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
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### dotenv-linter disable single line
|
||||
|
||||
```env
|
||||
# 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)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Kotlin
|
||||
|
||||
- [ktlint](https://github.com/pinterest/ktlint)
|
||||
|
||||
### ktlint Config file
|
||||
- There is no top level *configuration file* available at this time
|
||||
|
||||
- There is no top level _configuration file_ available at this time
|
||||
|
||||
### ktlint disable single line
|
||||
|
||||
```kotlin
|
||||
import package.* // ktlint-disable no-wildcard-imports
|
||||
```
|
||||
|
||||
### ktlint disable code block
|
||||
|
||||
```kotlin
|
||||
/* ktlint-disable no-wildcard-imports */
|
||||
import package.a.*
|
||||
|
@ -713,30 +852,72 @@ import package.b.*
|
|||
```
|
||||
|
||||
### ktlint disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Dart
|
||||
|
||||
- [dartanalyzer](https://dart.dev/tools/dartanalyzer)
|
||||
|
||||
### dartanalyzer standard Config file
|
||||
|
||||
- `.github/linters/.dart-lint.yml`
|
||||
- You can pass multiple rules and overwrite default rules
|
||||
- File should be located at: `.github/linters/.dart-lint.yml`
|
||||
|
||||
### dartanalyzer disable single line
|
||||
|
||||
```dart
|
||||
int x = ''; // ignore: invalid_assignment
|
||||
```
|
||||
|
||||
### dartanalyzer disable code block
|
||||
|
||||
- You can make [rule exceptions](https://dart.dev/guides/language/analysis-options#excluding-code-from-analysis) for the entire file.
|
||||
|
||||
```dart
|
||||
// ignore_for_file: unused_import, unused_local_variable
|
||||
```
|
||||
|
||||
### dartanalyzer disable entire file
|
||||
|
||||
- You can disable entire files with the `analyzer.exclude` property in `.dart-lint.yml`
|
||||
|
||||
```dart
|
||||
analyzer:
|
||||
exclude:
|
||||
- file
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## OpenAPI
|
||||
|
||||
- [spectral](https://github.com/stoplightio/spectral)
|
||||
|
||||
### OpenAPI Config file
|
||||
|
||||
- `.github/linters/.openapirc.yml`
|
||||
- You can add, extend, and disable rules
|
||||
- Documentation at [Spectral Custom Rulesets](https://stoplight.io/p/docs/gh/stoplightio/spectral/docs/guides/4-custom-rulesets.md)
|
||||
- File should be located at: `.github/linters/.openapirc.yml`
|
||||
|
||||
### OpenAPI disable single line
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### OpenAPI disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### OpenAPI disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
- However, you can make [rule exceptions](https://stoplight.io/p/docs/gh/stoplightio/spectral/docs/guides/6-exceptions.md?srn=gh/stoplightio/spectral/docs/guides/6-exceptions.md) in the config for individual file(s).
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
## Protocol Buffers
|
||||
|
||||
|
@ -786,20 +967,25 @@ lint:
|
|||
```
|
||||
|
||||
## Clojure
|
||||
|
||||
- [clj-kondo](https://github.com/borkdude/clj-kondo)
|
||||
- Since clj-kondo approaches static analysis in a very Clojure way, it is advised to read the [configuration docs](https://github.com/borkdude/clj-kondo/blob/master/doc/config.md)
|
||||
|
||||
### clj-kondo standard Config file
|
||||
|
||||
- `.github/linters/.clj-kondo/config.edn`
|
||||
|
||||
### clj-kondo disable single line
|
||||
|
||||
- There is currently **No** way to disable rules in a single line
|
||||
|
||||
### clj-kondo disable code block
|
||||
|
||||
- There is currently **No** way to disable rules in a code block
|
||||
|
||||
### clj-kondo disable entire file
|
||||
```clojure
|
||||
|
||||
````clojure
|
||||
{:output {:exclude-files ["path/to/file"]}}
|
||||
|
||||
## EDITORCONFIG-CHECKER
|
||||
|
@ -818,34 +1004,42 @@ lint:
|
|||
```
|
||||
|
||||
### editorconfig-checker disable code block
|
||||
|
||||
- There is currently **No** way to disable rules inline of the file(s)
|
||||
|
||||
### editorconfig-checker disable entire file
|
||||
|
||||
-
|
||||
|
||||
```js
|
||||
// editorconfig-checker-disable-file
|
||||
```
|
||||
|
||||
- You can disable entire files with the `Exclude` property in `.ecrc`
|
||||
|
||||
```json
|
||||
{
|
||||
"Exclude": [
|
||||
"path/to/file",
|
||||
"^regular\\/expression\\.ext$"
|
||||
]
|
||||
"Exclude": ["path/to/file", "^regular\\/expression\\.ext$"]
|
||||
}
|
||||
```
|
||||
|
||||
## HTML
|
||||
|
||||
- [htmlhint](https://htmlhint.com/)
|
||||
|
||||
### htmlhint standard Config file
|
||||
|
||||
- `.github/linters/.htmlhintrc`
|
||||
|
||||
### htmlhint disable single line
|
||||
|
||||
- There is currently **No** way to disable rules in a single line
|
||||
|
||||
### htmlhint disable code block
|
||||
|
||||
- There is currently **No** way to disable rules in a code block
|
||||
|
||||
### htmlhint disable entire file
|
||||
|
||||
- There is currently **No** way to disable rules in an entire file
|
||||
````
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Run Super-Linter locally to test your branch of code
|
||||
|
||||
If you want to test locally against the **Super-Linter** to test your branch of code, you will need to complete the following:
|
||||
|
||||
- Clone your testing source code to your local environment
|
||||
- Install Docker to your local environment
|
||||
- Pull the container down
|
||||
|
@ -7,15 +9,19 @@ If you want to test locally against the **Super-Linter** to test your branch of
|
|||
- Debug/Troubleshoot
|
||||
|
||||
## Install Docker to your local machine
|
||||
|
||||
You can follow the link below on how to install and configure **Docker** on your local machine
|
||||
|
||||
- [Docker Install Documentation](https://docs.docker.com/install/)
|
||||
|
||||
## Download the latest Super-Linter Docker container
|
||||
|
||||
- Pull the latest **Docker** container down from **DockerHub**
|
||||
- `docker pull github/super-linter:latest`
|
||||
Once the container has been downloaded to your local environment, you can then begin the process, or running the container against your codebase.
|
||||
|
||||
## Run the container Locally
|
||||
|
||||
- You can run the container locally with the following **Base** flags to run your code:
|
||||
- `docker run -e RUN_LOCAL=true -v /path/to/local/codebase:/tmp/lint github/super-linter`
|
||||
- To run against a single file you can use: `docker run -e RUN_LOCAL=true -v /path/to/local/codebase/file:/tmp/lint/file github/super-linter`
|
||||
|
@ -24,14 +30,18 @@ Once the container has been downloaded to your local environment, you can then b
|
|||
- **NOTE:** The flag:`RUN_LOCAL` will set: `VALIDATE_ALL_CODEBASE` to true. This means it will scan **all** the files in the directory you have mapped. If you want to only validate a subset of your codebase, map a folder with only the files you wish to have linted
|
||||
|
||||
### Flags for running Locally
|
||||
|
||||
You can add as many **Additional** flags as needed, documented in [README.md](../README.md#Environment-variables)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Run container and gain access to the command line
|
||||
|
||||
If you need to run the container locally and gain access to its command line, you can run the following command:
|
||||
|
||||
- `docker run -it --entrypoint /bin/bash github/super-linter`
|
||||
- This will drop you in the command line of the docker container for any testing or troubleshooting that may be needed.
|
||||
|
||||
### Found issues
|
||||
If you find a *bug* or *issue*, please open a **GitHub** issue at: `https://github.com/github/super-linter/issues`
|
||||
|
||||
If you find a _bug_ or _issue_, please open a **GitHub** issue at: [github/super-linter/issues](https://github.com/github/super-linter/issues)
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
# Super-Linter Library
|
||||
|
||||
## Main script
|
||||
|
||||
The file `linter.sh` is the main script that is called for the process and loads all other scripts as functions.
|
||||
|
||||
## Functions
|
||||
|
||||
The additional files in the folder are functions to help streamline the main build process and allow for easier maintenance.
|
||||
|
||||
- `possum.sh`
|
||||
- Official mascot of the **Super-Linter**
|
||||
- `buildFileList.sh`
|
||||
|
|
|
@ -16,7 +16,7 @@ function BuildFileList() {
|
|||
################
|
||||
# print header #
|
||||
################
|
||||
if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then
|
||||
if [[ ${ACTIONS_RUNNER_DEBUG} == "true" ]]; then
|
||||
echo ""
|
||||
echo "----------------------------------------------"
|
||||
echo "Pulling in code history and branches..."
|
||||
|
@ -26,8 +26,8 @@ function BuildFileList() {
|
|||
# Switch codebase back to the default branch to get a list of all files changed #
|
||||
#################################################################################
|
||||
SWITCH_CMD=$(
|
||||
git -C "$GITHUB_WORKSPACE" pull --quiet
|
||||
git -C "$GITHUB_WORKSPACE" checkout "$DEFAULT_BRANCH" 2>&1
|
||||
git -C "${GITHUB_WORKSPACE}" pull --quiet
|
||||
git -C "${GITHUB_WORKSPACE}" checkout "${DEFAULT_BRANCH}" 2>&1
|
||||
)
|
||||
|
||||
#######################
|
||||
|
@ -38,26 +38,26 @@ function BuildFileList() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Error
|
||||
echo "Failed to switch to $DEFAULT_BRANCH branch to get files changed!"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$SWITCH_CMD]${NC}"
|
||||
echo "Failed to switch to ${DEFAULT_BRANCH} branch to get files changed!"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${SWITCH_CMD}]${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
################
|
||||
# print header #
|
||||
################
|
||||
if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then
|
||||
if [[ ${ACTIONS_RUNNER_DEBUG} == "true" ]]; then
|
||||
echo ""
|
||||
echo "----------------------------------------------"
|
||||
echo "Generating Diff with:[git diff --name-only '$DEFAULT_BRANCH..$GITHUB_SHA' --diff-filter=d]"
|
||||
echo "Generating Diff with:[git diff --name-only '${DEFAULT_BRANCH}..${GITHUB_SHA}' --diff-filter=d]"
|
||||
fi
|
||||
|
||||
#################################################
|
||||
# Get the Array of files changed in the commits #
|
||||
#################################################
|
||||
mapfile -t RAW_FILE_ARRAY < <(git -C "$GITHUB_WORKSPACE" diff --name-only "$DEFAULT_BRANCH..$GITHUB_SHA" --diff-filter=d 2>&1)
|
||||
mapfile -t RAW_FILE_ARRAY < <(git -C "${GITHUB_WORKSPACE}" diff --name-only "${DEFAULT_BRANCH}..${GITHUB_SHA}" --diff-filter=d 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -67,7 +67,7 @@ function BuildFileList() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Error
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to gain a list of all files changed!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${RAW_FILE_ARRAY[*]}]${NC}"
|
||||
|
@ -86,26 +86,26 @@ function BuildFileList() {
|
|||
###########################
|
||||
# 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)}')
|
||||
FILE_TYPE=$(basename "${FILE}" | rev | cut -f1 -d'.' | rev | awk '{print tolower($0)}')
|
||||
|
||||
##############
|
||||
# Print file #
|
||||
##############
|
||||
echo "File:[$FILE], File_type:[$FILE_TYPE]"
|
||||
echo "File:[${FILE}], File_type:[${FILE_TYPE}]"
|
||||
|
||||
#########
|
||||
# DEBUG #
|
||||
#########
|
||||
#echo "FILE_TYPE:[$FILE_TYPE]"
|
||||
#echo "FILE_TYPE:[${FILE_TYPE}]"
|
||||
|
||||
#####################
|
||||
# Get the CFN files #
|
||||
#####################
|
||||
if [ "$FILE_TYPE" == "yml" ] || [ "$FILE_TYPE" == "yaml" ]; then
|
||||
if [ "${FILE_TYPE}" == "yml" ] || [ "${FILE_TYPE}" == "yaml" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_YML+=("$FILE")
|
||||
FILE_ARRAY_YML+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -114,11 +114,11 @@ function BuildFileList() {
|
|||
#####################################
|
||||
# Check if the file is CFN template #
|
||||
#####################################
|
||||
if DetectCloudFormationFile "$FILE"; then
|
||||
if DetectCloudFormationFile "${FILE}"; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_CFN+=("$FILE")
|
||||
FILE_ARRAY_CFN+=("${FILE}")
|
||||
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
|
@ -128,37 +128,46 @@ function BuildFileList() {
|
|||
######################
|
||||
# Get the JSON files #
|
||||
######################
|
||||
elif [ "$FILE_TYPE" == "json" ]; then
|
||||
elif [ "${FILE_TYPE}" == "json" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_JSON+=("$FILE")
|
||||
FILE_ARRAY_JSON+=("${FILE}")
|
||||
############################
|
||||
# Check if file is OpenAPI #
|
||||
############################
|
||||
if DetectOpenAPIFile "$FILE"; then
|
||||
if DetectOpenAPIFile "${FILE}"; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_OPENAPI+=("$FILE")
|
||||
FILE_ARRAY_OPENAPI+=("${FILE}")
|
||||
fi
|
||||
############################
|
||||
# Check if file is ARM #
|
||||
############################
|
||||
if DetectARMFile "$FILE"; then
|
||||
if DetectARMFile "${FILE}"; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_ARM+=("$FILE")
|
||||
FILE_ARRAY_ARM+=("${FILE}")
|
||||
fi
|
||||
#####################################
|
||||
# Check if the file is CFN template #
|
||||
#####################################
|
||||
if DetectCloudFormationFile "$FILE"; then
|
||||
if DetectCloudFormationFile "${FILE}"; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_CFN+=("$FILE")
|
||||
FILE_ARRAY_CFN+=("${FILE}")
|
||||
fi
|
||||
############################################
|
||||
# Check if the file is AWS States Language #
|
||||
############################################
|
||||
if DetectAWSStatesFIle "${FILE}"; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_STATES+=("${FILE}")
|
||||
fi
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
|
@ -167,11 +176,11 @@ function BuildFileList() {
|
|||
#####################
|
||||
# Get the XML files #
|
||||
#####################
|
||||
elif [ "$FILE_TYPE" == "xml" ]; then
|
||||
elif [ "${FILE_TYPE}" == "xml" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_XML+=("$FILE")
|
||||
FILE_ARRAY_XML+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -179,19 +188,19 @@ function BuildFileList() {
|
|||
##########################
|
||||
# Get the MARKDOWN files #
|
||||
##########################
|
||||
elif [ "$FILE_TYPE" == "md" ]; then
|
||||
elif [ "${FILE_TYPE}" == "md" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_MD+=("$FILE")
|
||||
FILE_ARRAY_MARKDOWN+=("${FILE}")
|
||||
######################
|
||||
# Get the BASH files #
|
||||
######################
|
||||
elif [ "$FILE_TYPE" == "sh" ]; then
|
||||
elif [ "${FILE_TYPE}" == "sh" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_BASH+=("$FILE")
|
||||
FILE_ARRAY_BASH+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -199,11 +208,11 @@ function BuildFileList() {
|
|||
######################
|
||||
# Get the PERL files #
|
||||
######################
|
||||
elif [ "$FILE_TYPE" == "pl" ]; then
|
||||
elif [ "${FILE_TYPE}" == "pl" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_PERL+=("$FILE")
|
||||
FILE_ARRAY_PERL+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -211,13 +220,13 @@ function BuildFileList() {
|
|||
######################
|
||||
# Get the RAKU files #
|
||||
######################
|
||||
elif [ "$FILE_TYPE" == "raku" ] || [ "$FILE_TYPE" == "rakumod" ] \
|
||||
|| [ "$FILE_TYPE" == "rakutest" ] || [ "$FILE_TYPE" == "pm6" ] \
|
||||
|| [ "$FILE_TYPE" == "pl6" ] || [ "$FILE_TYPE" == "p6" ] ; then
|
||||
elif [ "${FILE_TYPE}" == "raku" ] || [ "${FILE_TYPE}" == "rakumod" ] \
|
||||
|| [ "${FILE_TYPE}" == "rakutest" ] || [ "${FILE_TYPE}" == "pm6" ] \
|
||||
|| [ "${FILE_TYPE}" == "pl6" ] || [ "${FILE_TYPE}" == "p6" ] ; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_RAKU+=("$FILE")
|
||||
FILE_ARRAY_RAKU+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -225,11 +234,11 @@ function BuildFileList() {
|
|||
######################
|
||||
# Get the PHP files #
|
||||
######################
|
||||
elif [ "$FILE_TYPE" == "php" ]; then
|
||||
elif [ "${FILE_TYPE}" == "php" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_PHP+=("$FILE")
|
||||
FILE_ARRAY_PHP+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -237,11 +246,11 @@ function BuildFileList() {
|
|||
######################
|
||||
# Get the RUBY files #
|
||||
######################
|
||||
elif [ "$FILE_TYPE" == "rb" ]; then
|
||||
elif [ "${FILE_TYPE}" == "rb" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_RUBY+=("$FILE")
|
||||
FILE_ARRAY_RUBY+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -249,11 +258,11 @@ function BuildFileList() {
|
|||
########################
|
||||
# Get the PYTHON files #
|
||||
########################
|
||||
elif [ "$FILE_TYPE" == "py" ]; then
|
||||
elif [ "${FILE_TYPE}" == "py" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_PYTHON+=("$FILE")
|
||||
FILE_ARRAY_PYTHON+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -261,11 +270,11 @@ function BuildFileList() {
|
|||
########################
|
||||
# Get the COFFEE files #
|
||||
########################
|
||||
elif [ "$FILE_TYPE" == "coffee" ]; then
|
||||
elif [ "${FILE_TYPE}" == "coffee" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_COFFEESCRIPT+=("$FILE")
|
||||
FILE_ARRAY_COFFEESCRIPT+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -273,12 +282,12 @@ function BuildFileList() {
|
|||
############################
|
||||
# Get the JavaScript files #
|
||||
############################
|
||||
elif [ "$FILE_TYPE" == "js" ]; then
|
||||
elif [ "${FILE_TYPE}" == "js" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_JAVASCRIPT_ES+=("$FILE")
|
||||
FILE_ARRAY_JAVASCRIPT_STANDARD+=("$FILE")
|
||||
FILE_ARRAY_JAVASCRIPT_ES+=("${FILE}")
|
||||
FILE_ARRAY_JAVASCRIPT_STANDARD+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -286,11 +295,11 @@ function BuildFileList() {
|
|||
############################
|
||||
# Get the JSX files #
|
||||
############################
|
||||
elif [ "$FILE_TYPE" == "jsx" ]; then
|
||||
elif [ "${FILE_TYPE}" == "jsx" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_JSX+=("$FILE")
|
||||
FILE_ARRAY_JSX+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -298,11 +307,11 @@ function BuildFileList() {
|
|||
############################
|
||||
# Get the TSX files #
|
||||
############################
|
||||
elif [ "$FILE_TYPE" == "tsx" ]; then
|
||||
elif [ "${FILE_TYPE}" == "tsx" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_TSX+=("$FILE")
|
||||
FILE_ARRAY_TSX+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -313,12 +322,12 @@ function BuildFileList() {
|
|||
############################
|
||||
# Get the TypeScript files #
|
||||
############################
|
||||
elif [ "$FILE_TYPE" == "ts" ]; then
|
||||
elif [ "${FILE_TYPE}" == "ts" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_TYPESCRIPT_ES+=("$FILE")
|
||||
FILE_ARRAY_TYPESCRIPT_STANDARD+=("$FILE")
|
||||
FILE_ARRAY_TYPESCRIPT_ES+=("${FILE}")
|
||||
FILE_ARRAY_TYPESCRIPT_STANDARD+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -326,11 +335,11 @@ function BuildFileList() {
|
|||
########################
|
||||
# Get the Golang files #
|
||||
########################
|
||||
elif [ "$FILE_TYPE" == "go" ]; then
|
||||
elif [ "${FILE_TYPE}" == "go" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_GO+=("$FILE")
|
||||
FILE_ARRAY_GO+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -338,11 +347,11 @@ function BuildFileList() {
|
|||
###########################
|
||||
# Get the Terraform files #
|
||||
###########################
|
||||
elif [ "$FILE_TYPE" == "tf" ]; then
|
||||
elif [ "${FILE_TYPE}" == "tf" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_TERRAFORM+=("$FILE")
|
||||
FILE_ARRAY_TERRAFORM+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -350,34 +359,34 @@ function BuildFileList() {
|
|||
###########################
|
||||
# Get the Powershell files #
|
||||
###########################
|
||||
elif [ "$FILE_TYPE" == "ps1" ]; then
|
||||
elif [ "${FILE_TYPE}" == "ps1" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_POWERSHELL+=("$FILE")
|
||||
elif [ "$FILE_TYPE" == "css" ]; then
|
||||
FILE_ARRAY_POWERSHELL+=("${FILE}")
|
||||
elif [ "${FILE_TYPE}" == "css" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_CSS+=("$FILE")
|
||||
FILE_ARRAY_CSS+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [ "$FILE_TYPE" == "env" ]; then
|
||||
elif [ "${FILE_TYPE}" == "env" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_ENV+=("$FILE")
|
||||
FILE_ARRAY_ENV+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [ "$FILE_TYPE" == "kt" ] || [ "$FILE_TYPE" == "kts" ]; then
|
||||
elif [ "${FILE_TYPE}" == "kt" ] || [ "${FILE_TYPE}" == "kts" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_KOTLIN+=("$FILE")
|
||||
FILE_ARRAY_KOTLIN+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -385,38 +394,47 @@ function BuildFileList() {
|
|||
############################
|
||||
# Get the Protocol Buffers files #
|
||||
############################
|
||||
elif [ "$FILE_TYPE" == "proto" ]; then
|
||||
elif [ "${FILE_TYPE}" == "dart" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_PROTOBUF+=("$FILE")
|
||||
FILE_ARRAY_DART+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [ "$FILE" == "dockerfile" ] || [ "$FILE_TYPE" == "dockerfile" ]; then
|
||||
elif [ "${FILE_TYPE}" == "proto" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_DOCKER+=("$FILE")
|
||||
FILE_ARRAY_PROTOBUF+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [ "$FILE_TYPE" == "clj" ] || [ "$FILE_TYPE" == "cljs" ] || [ "$FILE_TYPE" == "cljc" ] || [ "$FILE_TYPE" == "edn" ]; then
|
||||
elif [ "${FILE}" == "dockerfile" ] || [ "${FILE_TYPE}" == "dockerfile" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_CLOJURE+=("$FILE")
|
||||
FILE_ARRAY_DOCKER+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [ "$FILE_TYPE" == "html" ]; then
|
||||
elif [ "${FILE_TYPE}" == "clj" ] || [ "${FILE_TYPE}" == "cljs" ] || [ "${FILE_TYPE}" == "cljc" ] || [ "${FILE_TYPE}" == "edn" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_CLOJURE+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [ "${FILE_TYPE}" == "html" ]; then
|
||||
################################
|
||||
# Append the file to the array #
|
||||
##############################p##
|
||||
FILE_ARRAY_HTML+=("$FILE")
|
||||
FILE_ARRAY_HTML+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -434,12 +452,12 @@ function BuildFileList() {
|
|||
##############################################
|
||||
# Use file to see if we can parse what it is #
|
||||
##############################################
|
||||
GET_FILE_TYPE_CMD=$(file "$FILE" 2>&1)
|
||||
GET_FILE_TYPE_CMD=$(file "${FILE}" 2>&1)
|
||||
|
||||
#################
|
||||
# Check if bash #
|
||||
#################
|
||||
if [[ $GET_FILE_TYPE_CMD == *"Bourne-Again shell script"* ]]; then
|
||||
if [[ ${GET_FILE_TYPE_CMD} == *"Bourne-Again shell script"* ]]; then
|
||||
#######################
|
||||
# It is a bash script #
|
||||
#######################
|
||||
|
@ -448,12 +466,12 @@ function BuildFileList() {
|
|||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_BASH+=("$FILE")
|
||||
FILE_ARRAY_BASH+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
READ_ONLY_CHANGE_FLAG=1
|
||||
elif [[ $GET_FILE_TYPE_CMD == *"Ruby script"* ]]; then
|
||||
elif [[ ${GET_FILE_TYPE_CMD} == *"Ruby script"* ]]; then
|
||||
#######################
|
||||
# It is a Ruby script #
|
||||
#######################
|
||||
|
@ -462,7 +480,7 @@ function BuildFileList() {
|
|||
################################
|
||||
# Append the file to the array #
|
||||
################################
|
||||
FILE_ARRAY_RUBY+=("$FILE")
|
||||
FILE_ARRAY_RUBY+=("${FILE}")
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -471,7 +489,7 @@ function BuildFileList() {
|
|||
############################
|
||||
# Extension was not found! #
|
||||
############################
|
||||
echo -e "${NC}${F[Y]} - WARN!${NC} Failed to get filetype for:[$FILE]!${NC}"
|
||||
echo -e "${NC}${F[Y]} - WARN!${NC} Failed to get filetype for:[${FILE}]!${NC}"
|
||||
##########################################################
|
||||
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
|
||||
##########################################################
|
||||
|
@ -485,7 +503,7 @@ function BuildFileList() {
|
|||
#########################################
|
||||
# Need to switch back to branch of code #
|
||||
#########################################
|
||||
SWITCH2_CMD=$(git -C "$GITHUB_WORKSPACE" checkout --progress --force "$GITHUB_SHA" 2>&1)
|
||||
SWITCH2_CMD=$(git -C "${GITHUB_WORKSPACE}" checkout --progress --force "${GITHUB_SHA}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -495,10 +513,10 @@ function BuildFileList() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Error
|
||||
echo "Failed to switch back to branch!"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$SWITCH2_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${SWITCH2_CMD}]${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
886
lib/linter.sh
886
lib/linter.sh
File diff suppressed because it is too large
Load diff
|
@ -20,17 +20,17 @@ function GetValidationInfo() {
|
|||
###########################################
|
||||
# Skip validation if were running locally #
|
||||
###########################################
|
||||
if [[ $RUN_LOCAL != "true" ]]; then
|
||||
if [[ ${RUN_LOCAL} != "true" ]]; then
|
||||
###############################
|
||||
# Convert string to lowercase #
|
||||
###############################
|
||||
VALIDATE_ALL_CODEBASE=$(echo "$VALIDATE_ALL_CODEBASE" | awk '{print tolower($0)}')
|
||||
VALIDATE_ALL_CODEBASE="${VALIDATE_ALL_CODEBASE,,}"
|
||||
######################################
|
||||
# Validate we should check all files #
|
||||
######################################
|
||||
if [[ $VALIDATE_ALL_CODEBASE != "false" ]]; then
|
||||
if [[ ${VALIDATE_ALL_CODEBASE} != "false" ]]; then
|
||||
# Set to true
|
||||
VALIDATE_ALL_CODEBASE="$DEFAULT_VALIDATE_ALL_CODEBASE"
|
||||
VALIDATE_ALL_CODEBASE="${DEFAULT_VALIDATE_ALL_CODEBASE}"
|
||||
echo "- Validating ALL files in code base..."
|
||||
else
|
||||
# Its false
|
||||
|
@ -46,82 +46,86 @@ function GetValidationInfo() {
|
|||
################################
|
||||
# Convert strings to lowercase #
|
||||
################################
|
||||
VALIDATE_YAML=$(echo "$VALIDATE_YAML" | awk '{print tolower($0)}')
|
||||
VALIDATE_JSON=$(echo "$VALIDATE_JSON" | awk '{print tolower($0)}')
|
||||
VALIDATE_XML=$(echo "$VALIDATE_XML" | awk '{print tolower($0)}')
|
||||
VALIDATE_MD=$(echo "$VALIDATE_MD" | awk '{print tolower($0)}')
|
||||
VALIDATE_BASH=$(echo "$VALIDATE_BASH" | awk '{print tolower($0)}')
|
||||
VALIDATE_PERL=$(echo "$VALIDATE_PERL" | awk '{print tolower($0)}')
|
||||
VALIDATE_RAKU=$(echo "$VALIDATE_RAKU" | awk '{print tolower($0)}')
|
||||
VALIDATE_PHP=$(echo "$VALIDATE_PHP" | awk '{print tolower($0)}')
|
||||
VALIDATE_PYTHON=$(echo "$VALIDATE_PYTHON" | awk '{print tolower($0)}')
|
||||
VALIDATE_RUBY=$(echo "$VALIDATE_RUBY" | awk '{print tolower($0)}')
|
||||
VALIDATE_COFFEE=$(echo "$VALIDATE_COFFEE" | awk '{print tolower($0)}')
|
||||
VALIDATE_ANSIBLE=$(echo "$VALIDATE_ANSIBLE" | awk '{print tolower($0)}')
|
||||
VALIDATE_JAVASCRIPT_ES=$(echo "$VALIDATE_JAVASCRIPT_ES" | awk '{print tolower($0)}')
|
||||
VALIDATE_JAVASCRIPT_STANDARD=$(echo "$VALIDATE_JAVASCRIPT_STANDARD" | awk '{print tolower($0)}')
|
||||
VALIDATE_JSX=$(echo "$VALIDATE_JSX" | awk '{print tolower($0)}')
|
||||
VALIDATE_TSX=$(echo "$VALIDATE_TSX" | awk '{print tolower($0)}')
|
||||
VALIDATE_TYPESCRIPT_ES=$(echo "$VALIDATE_TYPESCRIPT_ES" | awk '{print tolower($0)}')
|
||||
VALIDATE_TYPESCRIPT_STANDARD=$(echo "$VALIDATE_TYPESCRIPT_STANDARD" | awk '{print tolower($0)}')
|
||||
VALIDATE_DOCKER=$(echo "$VALIDATE_DOCKER" | awk '{print tolower($0)}')
|
||||
VALIDATE_GO=$(echo "$VALIDATE_GO" | awk '{print tolower($0)}')
|
||||
VALIDATE_TERRAFORM=$(echo "$VALIDATE_TERRAFORM" | awk '{print tolower($0)}')
|
||||
VALIDATE_POWERSHELL=$(echo "$VALIDATE_POWERSHELL" | awk '{print tolower($0)}')
|
||||
VALIDATE_ARM=$(echo "$VALIDATE_ARM" | awk '{print tolower($0)}')
|
||||
VALIDATE_CSS=$(echo "$VALIDATE_CSS" | awk '{print tolower($0)}')
|
||||
VALIDATE_ENV=$(echo "$VALIDATE_ENV" | awk '{print tolower($0)}')
|
||||
VALIDATE_CLOJURE=$(echo "$VALIDATE_CLOJURE" | awk '{print tolower($0)}')
|
||||
VALIDATE_KOTLIN=$(echo "$VALIDATE_KOTLIN" | awk '{print tolower($0)}')
|
||||
VALIDATE_PROTOBUF=$(echo "$VALIDATE_PROTOBUF" | awk '{print tolower($0)}')
|
||||
VALIDATE_OPENAPI=$(echo "$VALIDATE_OPENAPI" | awk '{print tolower($0)}')
|
||||
VALIDATE_EDITORCONFIG=$(echo "$VALIDATE_EDITORCONFIG" | awk '{print tolower($0)}')
|
||||
VALIDATE_HTML=$(echo "$VALIDATE_HTML" | awk '{print tolower($0)}')
|
||||
VALIDATE_GROOVY=$(echo "$VALIDATE_GROOVY" | awk '{print tolower($0)}')
|
||||
VALIDATE_ANSIBLE="${VALIDATE_ANSIBLE,,}"
|
||||
VALIDATE_ARM="${VALIDATE_ARM,,}"
|
||||
VALIDATE_BASH="${VALIDATE_BASH,,}"
|
||||
VALIDATE_CLOJURE="${VALIDATE_CLOJURE,,}"
|
||||
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_GROOVY="${VALIDATE_GROOVY,,}"
|
||||
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,,}"
|
||||
|
||||
|
||||
################################################
|
||||
# Determine if any linters were explicitly set #
|
||||
################################################
|
||||
ANY_SET="false"
|
||||
if [[ -n $VALIDATE_YAML || -n \
|
||||
$VALIDATE_JSON || -n \
|
||||
$VALIDATE_XML || -n \
|
||||
$VALIDATE_MD || -n \
|
||||
$VALIDATE_BASH || -n \
|
||||
$VALIDATE_PERL || -n \
|
||||
$VALIDATE_RAKU || -n \
|
||||
$VALIDATE_PHP || -n \
|
||||
$VALIDATE_PYTHON || -n \
|
||||
$VALIDATE_RUBY || -n \
|
||||
$VALIDATE_COFFEE || -n \
|
||||
$VALIDATE_ANSIBLE || -n \
|
||||
$VALIDATE_JAVASCRIPT_ES || -n \
|
||||
$VALIDATE_JAVASCRIPT_STANDARD || -n \
|
||||
$VALIDATE_TYPESCRIPT_ES || -n \
|
||||
$VALIDATE_TYPESCRIPT_STANDARD || -n \
|
||||
$VALIDATE_DOCKER || -n \
|
||||
$VALIDATE_GO || -n \
|
||||
$VALIDATE_GROOVY || -n \
|
||||
$VALIDATE_TERRAFORM || -n \
|
||||
$VALIDATE_POWERSHELL || -n \
|
||||
$VALIDATE_ARM || -n \
|
||||
$VALIDATE_CSS || -n \
|
||||
$VALIDATE_ENV || -n \
|
||||
$VALIDATE_CLOJURE || -n \
|
||||
$VALIDATE_PROTOBUF || -n \
|
||||
$VALIDATE_OPENAPI || -n \
|
||||
$VALIDATE_KOTLIN || -n \
|
||||
$VALIDATE_EDITORCONFIG || -n \
|
||||
$VALIDATE_HTML ]]; then
|
||||
if [[ -n ${VALIDATE_ANSIBLE} || -n \
|
||||
${VALIDATE_ARM} || -n \
|
||||
${VALIDATE_BASH} || -n \
|
||||
${VALIDATE_CLOJURE} || -n \
|
||||
${VALIDATE_COFFEE} || -n \
|
||||
${VALIDATE_CSS} || -n \
|
||||
${VALIDATE_DART} || -n \
|
||||
${VALIDATE_DOCKER} || -n \
|
||||
${VALIDATE_EDITORCONFIG} || -n \
|
||||
${VALIDATE_ENV} || -n \
|
||||
${VALIDATE_GO} || -n \
|
||||
${VALIDATE_GROOVY} || -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
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_YAML ]]; then
|
||||
if [[ -z ${VALIDATE_YAML} ]]; then
|
||||
# YAML flag was not set - default to false
|
||||
VALIDATE_YAML="false"
|
||||
fi
|
||||
|
@ -133,9 +137,9 @@ function GetValidationInfo() {
|
|||
####################################
|
||||
# Validate if we should check JSON #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_JSON ]]; then
|
||||
if [[ -z ${VALIDATE_JSON} ]]; then
|
||||
# JSON flag was not set - default to false
|
||||
VALIDATE_JSON="false"
|
||||
fi
|
||||
|
@ -147,9 +151,9 @@ function GetValidationInfo() {
|
|||
###################################
|
||||
# Validate if we should check XML #
|
||||
###################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_XML ]]; then
|
||||
if [[ -z ${VALIDATE_XML} ]]; then
|
||||
# XML flag was not set - default to false
|
||||
VALIDATE_XML="false"
|
||||
fi
|
||||
|
@ -161,23 +165,23 @@ function GetValidationInfo() {
|
|||
########################################
|
||||
# Validate if we should check MARKDOWN #
|
||||
########################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_MD ]]; then
|
||||
if [[ -z ${VALIDATE_MARKDOWN} ]]; then
|
||||
# MD flag was not set - default to false
|
||||
VALIDATE_MD="false"
|
||||
VALIDATE_MARKDOWN="false"
|
||||
fi
|
||||
else
|
||||
# No linter flags were set - default all to true
|
||||
VALIDATE_MD="true"
|
||||
VALIDATE_MARKDOWN="true"
|
||||
fi
|
||||
|
||||
####################################
|
||||
# Validate if we should check BASH #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_BASH ]]; then
|
||||
if [[ -z ${VALIDATE_BASH} ]]; then
|
||||
# BASH flag was not set - default to false
|
||||
VALIDATE_BASH="false"
|
||||
fi
|
||||
|
@ -189,9 +193,9 @@ function GetValidationInfo() {
|
|||
####################################
|
||||
# Validate if we should check PERL #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_PERL ]]; then
|
||||
if [[ -z ${VALIDATE_PERL} ]]; then
|
||||
# PERL flag was not set - default to false
|
||||
VALIDATE_PERL="false"
|
||||
fi
|
||||
|
@ -203,9 +207,9 @@ function GetValidationInfo() {
|
|||
####################################
|
||||
# Validate if we should check RAKU #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_RAKU ]]; then
|
||||
if [[ -z ${VALIDATE_RAKU} ]]; then
|
||||
# RAKU flag was not set - default to false
|
||||
VALIDATE_RAKU="false"
|
||||
fi
|
||||
|
@ -217,9 +221,9 @@ function GetValidationInfo() {
|
|||
####################################
|
||||
# Validate if we should check PHP #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_PHP ]]; then
|
||||
if [[ -z ${VALIDATE_PHP} ]]; then
|
||||
# PHP flag was not set - default to false
|
||||
VALIDATE_PHP="false"
|
||||
fi
|
||||
|
@ -231,9 +235,9 @@ function GetValidationInfo() {
|
|||
######################################
|
||||
# Validate if we should check PYTHON #
|
||||
######################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_PYTHON ]]; then
|
||||
if [[ -z ${VALIDATE_PYTHON} ]]; then
|
||||
# PYTHON flag was not set - default to false
|
||||
VALIDATE_PYTHON="false"
|
||||
fi
|
||||
|
@ -245,9 +249,9 @@ function GetValidationInfo() {
|
|||
####################################
|
||||
# Validate if we should check RUBY #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_RUBY ]]; then
|
||||
if [[ -z ${VALIDATE_RUBY} ]]; then
|
||||
# RUBY flag was not set - default to false
|
||||
VALIDATE_RUBY="false"
|
||||
fi
|
||||
|
@ -256,12 +260,26 @@ function GetValidationInfo() {
|
|||
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
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_COFFEE ]]; then
|
||||
if [[ -z ${VALIDATE_COFFEE} ]]; then
|
||||
# COFFEE flag was not set - default to false
|
||||
VALIDATE_COFFEE="false"
|
||||
fi
|
||||
|
@ -273,9 +291,9 @@ function GetValidationInfo() {
|
|||
#######################################
|
||||
# Validate if we should check ANSIBLE #
|
||||
#######################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_ANSIBLE ]]; then
|
||||
if [[ -z ${VALIDATE_ANSIBLE} ]]; then
|
||||
# ANSIBLE flag was not set - default to false
|
||||
VALIDATE_ANSIBLE="false"
|
||||
fi
|
||||
|
@ -287,9 +305,9 @@ function GetValidationInfo() {
|
|||
#############################################
|
||||
# Validate if we should check JAVASCRIPT_ES #
|
||||
#############################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_JAVASCRIPT_ES ]]; then
|
||||
if [[ -z ${VALIDATE_JAVASCRIPT_ES} ]]; then
|
||||
# JAVASCRIPT_ES flag was not set - default to false
|
||||
VALIDATE_JAVASCRIPT_ES="false"
|
||||
fi
|
||||
|
@ -301,9 +319,9 @@ function GetValidationInfo() {
|
|||
###################################################
|
||||
# Validate if we should check JAVASCRIPT_STANDARD #
|
||||
###################################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_JAVASCRIPT_STANDARD ]]; then
|
||||
if [[ -z ${VALIDATE_JAVASCRIPT_STANDARD} ]]; then
|
||||
# JAVASCRIPT_STANDARD flag was not set - default to false
|
||||
VALIDATE_JAVASCRIPT_STANDARD="false"
|
||||
fi
|
||||
|
@ -315,9 +333,9 @@ function GetValidationInfo() {
|
|||
#############################################
|
||||
# Validate if we should check JSX #
|
||||
#############################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_JSX ]]; then
|
||||
if [[ -z ${VALIDATE_JSX} ]]; then
|
||||
# JSX flag was not set - default to false
|
||||
VALIDATE_JSX="false"
|
||||
fi
|
||||
|
@ -329,9 +347,9 @@ function GetValidationInfo() {
|
|||
#############################################
|
||||
# Validate if we should check TSX #
|
||||
#############################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_TSX ]]; then
|
||||
if [[ -z ${VALIDATE_TSX} ]]; then
|
||||
# TSX flag was not set - default to false
|
||||
VALIDATE_TSX="false"
|
||||
fi
|
||||
|
@ -343,9 +361,9 @@ function GetValidationInfo() {
|
|||
#############################################
|
||||
# Validate if we should check TYPESCRIPT_ES #
|
||||
#############################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_TYPESCRIPT_ES ]]; then
|
||||
if [[ -z ${VALIDATE_TYPESCRIPT_ES} ]]; then
|
||||
# TYPESCRIPT_ES flag was not set - default to false
|
||||
VALIDATE_TYPESCRIPT_ES="false"
|
||||
fi
|
||||
|
@ -357,9 +375,9 @@ function GetValidationInfo() {
|
|||
###################################################
|
||||
# Validate if we should check TYPESCRIPT_STANDARD #
|
||||
###################################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_TYPESCRIPT_STANDARD ]]; then
|
||||
if [[ -z ${VALIDATE_TYPESCRIPT_STANDARD} ]]; then
|
||||
# TYPESCRIPT_STANDARD flag was not set - default to false
|
||||
VALIDATE_TYPESCRIPT_STANDARD="false"
|
||||
fi
|
||||
|
@ -371,9 +389,9 @@ function GetValidationInfo() {
|
|||
######################################
|
||||
# Validate if we should check DOCKER #
|
||||
######################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_DOCKER ]]; then
|
||||
if [[ -z ${VALIDATE_DOCKER} ]]; then
|
||||
# DOCKER flag was not set - default to false
|
||||
VALIDATE_DOCKER="false"
|
||||
fi
|
||||
|
@ -385,9 +403,9 @@ function GetValidationInfo() {
|
|||
##################################
|
||||
# Validate if we should check GO #
|
||||
##################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_GO ]]; then
|
||||
if [[ -z ${VALIDATE_GO} ]]; then
|
||||
# GO flag was not set - default to false
|
||||
VALIDATE_GO="false"
|
||||
fi
|
||||
|
@ -399,9 +417,9 @@ function GetValidationInfo() {
|
|||
#########################################
|
||||
# Validate if we should check TERRAFORM #
|
||||
#########################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_TERRAFORM ]]; then
|
||||
if [[ -z ${VALIDATE_TERRAFORM} ]]; then
|
||||
# TERRAFORM flag was not set - default to false
|
||||
VALIDATE_TERRAFORM="false"
|
||||
fi
|
||||
|
@ -413,9 +431,9 @@ function GetValidationInfo() {
|
|||
#########################################
|
||||
# Validate if we should check POWERSHELL #
|
||||
#########################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_POWERSHELL ]]; then
|
||||
if [[ -z ${VALIDATE_POWERSHELL} ]]; then
|
||||
# POWERSHELL flag was not set - default to false
|
||||
VALIDATE_POWERSHELL="false"
|
||||
fi
|
||||
|
@ -427,9 +445,9 @@ function GetValidationInfo() {
|
|||
###################################
|
||||
# Validate if we should check ARM #
|
||||
###################################
|
||||
if [[ "$ANY_SET" == "true" ]]; then
|
||||
if [[ "${ANY_SET}" == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z "$VALIDATE_ARM" ]]; then
|
||||
if [[ -z "${VALIDATE_ARM}" ]]; then
|
||||
# ARM flag was not set - default to false
|
||||
VALIDATE_ARM="false"
|
||||
fi
|
||||
|
@ -441,9 +459,9 @@ function GetValidationInfo() {
|
|||
###################################
|
||||
# Validate if we should check CSS #
|
||||
###################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_CSS ]]; then
|
||||
if [[ -z ${VALIDATE_CSS} ]]; then
|
||||
# CSS flag was not set - default to false
|
||||
VALIDATE_CSS="false"
|
||||
fi
|
||||
|
@ -455,9 +473,9 @@ function GetValidationInfo() {
|
|||
###################################
|
||||
# Validate if we should check ENV #
|
||||
###################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_ENV ]]; then
|
||||
if [[ -z ${VALIDATE_ENV} ]]; then
|
||||
# ENV flag was not set - default to false
|
||||
VALIDATE_ENV="false"
|
||||
fi
|
||||
|
@ -469,9 +487,9 @@ function GetValidationInfo() {
|
|||
######################################
|
||||
# Validate if we should check KOTLIN #
|
||||
######################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_KOTLIN ]]; then
|
||||
if [[ -z ${VALIDATE_KOTLIN} ]]; then
|
||||
# ENV flag was not set - default to false
|
||||
VALIDATE_KOTLIN="false"
|
||||
fi
|
||||
|
@ -480,12 +498,26 @@ function GetValidationInfo() {
|
|||
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
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_OPENAPI ]]; then
|
||||
if [[ -z ${VALIDATE_OPENAPI} ]]; then
|
||||
# OPENAPI flag was not set - default to false
|
||||
VALIDATE_OPENAPI="false"
|
||||
fi
|
||||
|
@ -497,9 +529,9 @@ function GetValidationInfo() {
|
|||
#######################################
|
||||
# Validate if we should check PROTOBUF #
|
||||
#######################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_PROTOBUF ]]; then
|
||||
if [[ -z ${VALIDATE_PROTOBUF} ]]; then
|
||||
# PROTOBUF flag was not set - default to false
|
||||
VALIDATE_PROTOBUF="false"
|
||||
fi
|
||||
|
@ -511,9 +543,9 @@ function GetValidationInfo() {
|
|||
#######################################
|
||||
# Validate if we should check Clojure #
|
||||
#######################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_CLOJURE ]]; then
|
||||
if [[ -z ${VALIDATE_CLOJURE} ]]; then
|
||||
# Clojure flag was not set - default to false
|
||||
VALIDATE_CLOJURE="false"
|
||||
fi
|
||||
|
@ -525,16 +557,16 @@ function GetValidationInfo() {
|
|||
############################################
|
||||
# Validate if we should check editorconfig #
|
||||
############################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_EDITORCONFIG ]]; then
|
||||
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
|
||||
if [ -f "${GITHUB_WORKSPACE}/.editorconfig" ]; then
|
||||
VALIDATE_EDITORCONFIG="true"
|
||||
fi
|
||||
fi
|
||||
|
@ -542,9 +574,9 @@ function GetValidationInfo() {
|
|||
####################################
|
||||
# Validate if we should check HTML #
|
||||
####################################
|
||||
if [[ $ANY_SET == "true" ]]; then
|
||||
if [[ ${ANY_SET} == "true" ]]; then
|
||||
# Some linter flags were set - only run those set to true
|
||||
if [[ -z $VALIDATE_HTML ]]; then
|
||||
if [[ -z ${VALIDATE_HTML} ]]; then
|
||||
# HTML flag was not set - default to false
|
||||
VALIDATE_HTML="false"
|
||||
fi
|
||||
|
@ -570,147 +602,152 @@ function GetValidationInfo() {
|
|||
#######################################
|
||||
# Print which linters we are enabling #
|
||||
#######################################
|
||||
if [[ $VALIDATE_YAML == "true" ]]; then
|
||||
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
|
||||
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
|
||||
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_MD == "true" ]]; then
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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_ENV == "true" ]]; then
|
||||
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
|
||||
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
|
||||
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
|
||||
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_EDITORCONFIG == "true" ]]; then
|
||||
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
|
||||
if [[ ${VALIDATE_HTML} == "true" ]]; then
|
||||
PRINT_ARRAY+=("- Validating [HTML] files in code base...")
|
||||
else
|
||||
PRINT_ARRAY+=("- Excluding [HTML] files in code base...")
|
||||
|
@ -720,13 +757,18 @@ function GetValidationInfo() {
|
|||
else
|
||||
PRINT_ARRAY+=("- Excluding [GROOVY] 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
|
||||
|
||||
##############################
|
||||
# Validate Ansible Directory #
|
||||
##############################
|
||||
if [ -z "$ANSIBLE_DIRECTORY" ]; then
|
||||
if [ -z "${ANSIBLE_DIRECTORY}" ]; then
|
||||
# No Value, need to default
|
||||
ANSIBLE_DIRECTORY="$DEFAULT_ANSIBLE_DIRECTORY"
|
||||
ANSIBLE_DIRECTORY="${DEFAULT_ANSIBLE_DIRECTORY}"
|
||||
else
|
||||
# Check if first char is '/'
|
||||
if [[ ${ANSIBLE_DIRECTORY:0:1} == "/" ]]; then
|
||||
|
@ -734,70 +776,70 @@ function GetValidationInfo() {
|
|||
ANSIBLE_DIRECTORY="${ANSIBLE_DIRECTORY:1}"
|
||||
fi
|
||||
# Need to give it full path
|
||||
TEMP_ANSIBLE_DIRECTORY="$GITHUB_WORKSPACE/$ANSIBLE_DIRECTORY"
|
||||
TEMP_ANSIBLE_DIRECTORY="${GITHUB_WORKSPACE}/${ANSIBLE_DIRECTORY}"
|
||||
# Set the value
|
||||
ANSIBLE_DIRECTORY="$TEMP_ANSIBLE_DIRECTORY"
|
||||
ANSIBLE_DIRECTORY="${TEMP_ANSIBLE_DIRECTORY}"
|
||||
fi
|
||||
|
||||
###############################
|
||||
# Get the disable errors flag #
|
||||
###############################
|
||||
if [ -z "$DISABLE_ERRORS" ]; then
|
||||
if [ -z "${DISABLE_ERRORS}" ]; then
|
||||
##################################
|
||||
# No flag passed, set to default #
|
||||
##################################
|
||||
DISABLE_ERRORS="$DEFAULT_DISABLE_ERRORS"
|
||||
DISABLE_ERRORS="${DEFAULT_DISABLE_ERRORS}"
|
||||
fi
|
||||
|
||||
###############################
|
||||
# Convert string to lowercase #
|
||||
###############################
|
||||
DISABLE_ERRORS=$(echo "$DISABLE_ERRORS" | awk '{print tolower($0)}')
|
||||
DISABLE_ERRORS="${DISABLE_ERRORS,,}"
|
||||
|
||||
############################
|
||||
# Set to false if not true #
|
||||
############################
|
||||
if [ "$DISABLE_ERRORS" != "true" ]; then
|
||||
if [ "${DISABLE_ERRORS}" != "true" ]; then
|
||||
DISABLE_ERRORS="false"
|
||||
fi
|
||||
|
||||
############################
|
||||
# Get the run verbose flag #
|
||||
############################
|
||||
if [ -z "$ACTIONS_RUNNER_DEBUG" ]; then
|
||||
if [ -z "${ACTIONS_RUNNER_DEBUG}" ]; then
|
||||
##################################
|
||||
# No flag passed, set to default #
|
||||
##################################
|
||||
ACTIONS_RUNNER_DEBUG="$DEFAULT_ACTIONS_RUNNER_DEBUG"
|
||||
ACTIONS_RUNNER_DEBUG="${DEFAULT_ACTIONS_RUNNER_DEBUG}"
|
||||
fi
|
||||
|
||||
###############################
|
||||
# Convert string to lowercase #
|
||||
###############################
|
||||
ACTIONS_RUNNER_DEBUG=$(echo "$ACTIONS_RUNNER_DEBUG" | awk '{print tolower($0)}')
|
||||
ACTIONS_RUNNER_DEBUG="${ACTIONS_RUNNER_DEBUG,,}"
|
||||
|
||||
############################
|
||||
# Set to true if not false #
|
||||
############################
|
||||
if [ "$ACTIONS_RUNNER_DEBUG" != "false" ]; then
|
||||
if [ "${ACTIONS_RUNNER_DEBUG}" != "false" ]; then
|
||||
ACTIONS_RUNNER_DEBUG="true"
|
||||
fi
|
||||
|
||||
###################
|
||||
# Debug on runner #
|
||||
###################
|
||||
if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then
|
||||
if [[ ${ACTIONS_RUNNER_DEBUG} == "true" ]]; then
|
||||
###########################
|
||||
# Print the validate info #
|
||||
###########################
|
||||
for LINE in "${PRINT_ARRAY[@]}"; do
|
||||
echo "$LINE"
|
||||
echo "${LINE}"
|
||||
done
|
||||
|
||||
echo "--- DEBUG INFO ---"
|
||||
echo "---------------------------------------------"
|
||||
RUNNER=$(whoami)
|
||||
echo "Runner:[$RUNNER]"
|
||||
echo "Runner:[${RUNNER}]"
|
||||
echo "ENV:"
|
||||
printenv
|
||||
echo "---------------------------------------------"
|
||||
|
|
485
lib/worker.sh
485
lib/worker.sh
|
@ -13,11 +13,11 @@ function LintCodebase() {
|
|||
####################
|
||||
# Pull in the vars #
|
||||
####################
|
||||
FILE_TYPE="$1" && shift # Pull the variable and remove from array path (Example: JSON)
|
||||
LINTER_NAME="$1" && shift # Pull the variable and remove from array path (Example: jsonlint)
|
||||
LINTER_COMMAND="$1" && shift # Pull the variable and remove from array path (Example: jsonlint -c ConfigFile /path/to/file)
|
||||
FILE_EXTENSIONS="$1" && shift # Pull the variable and remove from array path (Example: *.json)
|
||||
FILE_ARRAY=("$@") # Array of files to validate (Example: $FILE_ARRAY_JSON)
|
||||
FILE_TYPE="${1}" && shift # Pull the variable and remove from array path (Example: JSON)
|
||||
LINTER_NAME="${1}" && shift # Pull the variable and remove from array path (Example: jsonlint)
|
||||
LINTER_COMMAND="${1}" && shift # Pull the variable and remove from array path (Example: jsonlint -c ConfigFile /path/to/file)
|
||||
FILE_EXTENSIONS="${1}" && shift # Pull the variable and remove from array path (Example: *.json)
|
||||
FILE_ARRAY=("$@") # Array of files to validate (Example: ${FILE_ARRAY_JSON})
|
||||
|
||||
######################
|
||||
# Create Print Array #
|
||||
|
@ -30,14 +30,14 @@ function LintCodebase() {
|
|||
PRINT_ARRAY+=("")
|
||||
PRINT_ARRAY+=("----------------------------------------------")
|
||||
PRINT_ARRAY+=("----------------------------------------------")
|
||||
PRINT_ARRAY+=("Linting [$FILE_TYPE] files...")
|
||||
PRINT_ARRAY+=("Linting [${FILE_TYPE}] files...")
|
||||
PRINT_ARRAY+=("----------------------------------------------")
|
||||
PRINT_ARRAY+=("----------------------------------------------")
|
||||
|
||||
#####################################
|
||||
# Validate we have linter installed #
|
||||
#####################################
|
||||
VALIDATE_INSTALL_CMD=$(command -v "$LINTER_NAME" 2>&1)
|
||||
VALIDATE_INSTALL_CMD=$(command -v "${LINTER_NAME}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -47,15 +47,15 @@ function LintCodebase() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Failed
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find [$LINTER_NAME] in system!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$VALIDATE_INSTALL_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find [${LINTER_NAME}] in system!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${VALIDATE_INSTALL_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# Success
|
||||
if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then
|
||||
echo -e "${NC}${F[B]}Successfully found binary for ${F[W]}[$LINTER_NAME]${F[B]} in system location: ${F[W]}[$VALIDATE_INSTALL_CMD]${NC}"
|
||||
if [[ ${ACTIONS_RUNNER_DEBUG} == "true" ]]; then
|
||||
echo -e "${NC}${F[B]}Successfully found binary for ${F[W]}[${LINTER_NAME}]${F[B]} in system location: ${F[W]}[${VALIDATE_INSTALL_CMD}]${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -72,10 +72,10 @@ function LintCodebase() {
|
|||
############################################################
|
||||
# Check to see if we need to go through array or all files #
|
||||
############################################################
|
||||
if [ ${#FILE_ARRAY[@]} -eq 0 ] && [ "$VALIDATE_ALL_CODEBASE" == "false" ]; then
|
||||
if [ ${#FILE_ARRAY[@]} -eq 0 ] && [ "${VALIDATE_ALL_CODEBASE}" == "false" ]; then
|
||||
# No files found in commit and user has asked to not validate code base
|
||||
SKIP_FLAG=1
|
||||
# echo " - No files found in changeset to lint for language:[$FILE_TYPE]"
|
||||
# echo " - No files found in changeset to lint for language:[${FILE_TYPE}]"
|
||||
elif [ ${#FILE_ARRAY[@]} -ne 0 ]; then
|
||||
# We have files added to array of files to check
|
||||
LIST_FILES=("${FILE_ARRAY[@]}") # Copy the array into list
|
||||
|
@ -88,12 +88,12 @@ function LintCodebase() {
|
|||
#################################
|
||||
# Get list of all files to lint #
|
||||
#################################
|
||||
mapfile -t LIST_FILES < <(find "$GITHUB_WORKSPACE" -type f -regex "$FILE_EXTENSIONS" 2>&1)
|
||||
mapfile -t LIST_FILES < <(find "${GITHUB_WORKSPACE}" -type f -regex "${FILE_EXTENSIONS}" 2>&1)
|
||||
|
||||
###########################
|
||||
# Set IFS back to default #
|
||||
###########################
|
||||
IFS="$DEFAULT_IFS"
|
||||
IFS="${DEFAULT_IFS}"
|
||||
|
||||
############################################################
|
||||
# Set it back to empty if loaded with blanks from scanning #
|
||||
|
@ -113,7 +113,7 @@ function LintCodebase() {
|
|||
###############################
|
||||
# Check if any data was found #
|
||||
###############################
|
||||
if [ $SKIP_FLAG -eq 0 ]; then
|
||||
if [ ${SKIP_FLAG} -eq 0 ]; then
|
||||
######################
|
||||
# Print Header array #
|
||||
######################
|
||||
|
@ -121,9 +121,19 @@ function LintCodebase() {
|
|||
#########################
|
||||
# Print the header info #
|
||||
#########################
|
||||
echo "$LINE"
|
||||
echo "${LINE}"
|
||||
done
|
||||
|
||||
########################################
|
||||
# Prepare context if TAP format output #
|
||||
########################################
|
||||
if IsTAP ; then
|
||||
TMPFILE=$(mktemp -q "/tmp/super-linter-${FILE_TYPE}.XXXXXX")
|
||||
INDEX=0
|
||||
mkdir -p "${REPORT_OUTPUT_FOLDER}"
|
||||
REPORT_OUTPUT_FILE="${REPORT_OUTPUT_FOLDER}/super-linter-${FILE_TYPE}.${OUTPUT_FORMAT}"
|
||||
fi
|
||||
|
||||
##################
|
||||
# Lint the files #
|
||||
##################
|
||||
|
@ -131,27 +141,37 @@ function LintCodebase() {
|
|||
#####################
|
||||
# Get the file name #
|
||||
#####################
|
||||
FILE_NAME=$(basename "$FILE" 2>&1)
|
||||
FILE_NAME=$(basename "${FILE}" 2>&1)
|
||||
|
||||
#####################################################
|
||||
# Make sure we dont lint node modules or test cases #
|
||||
#####################################################
|
||||
if [[ $FILE == *"node_modules"* ]]; then
|
||||
if [[ ${FILE} == *"node_modules"* ]]; then
|
||||
# This is a node modules file
|
||||
continue
|
||||
elif [[ $FILE == *"$TEST_CASE_FOLDER"* ]]; then
|
||||
elif [[ ${FILE} == *"${TEST_CASE_FOLDER}"* ]]; then
|
||||
# This is the test cases, we should always skip
|
||||
continue
|
||||
elif [[ $FILE == *".git"* ]]; then
|
||||
elif [[ ${FILE} == *".git"* ]]; then
|
||||
# This is likely the .git folder and shouldnt be parsed
|
||||
continue
|
||||
fi
|
||||
|
||||
##################################
|
||||
# Increase the linted file index #
|
||||
##################################
|
||||
(("INDEX++"))
|
||||
|
||||
##############
|
||||
# File print #
|
||||
##############
|
||||
echo "---------------------------"
|
||||
echo "File:[$FILE]"
|
||||
echo "File:[${FILE}]"
|
||||
|
||||
#################################
|
||||
# Add the language to the array #
|
||||
#################################
|
||||
LINTED_LANGUAGES_ARRAY+=("${FILE_TYPE}")
|
||||
|
||||
####################
|
||||
# Set the base Var #
|
||||
|
@ -163,14 +183,14 @@ function LintCodebase() {
|
|||
# - PowerShell (PSScriptAnalyzer) #
|
||||
# - ARM (arm-ttk) #
|
||||
####################################
|
||||
if [[ $FILE_TYPE == "POWERSHELL" ]] || [[ $FILE_TYPE == "ARM" ]]; then
|
||||
if [[ ${FILE_TYPE} == "POWERSHELL" ]] || [[ ${FILE_TYPE} == "ARM" ]]; then
|
||||
################################
|
||||
# Lint the file with the rules #
|
||||
################################
|
||||
# Need to run PowerShell commands using pwsh -c, also exit with exit code from inner subshell
|
||||
LINT_CMD=$(
|
||||
cd "$GITHUB_WORKSPACE" || exit
|
||||
pwsh -NoProfile -NoLogo -Command "$LINTER_COMMAND $FILE; if (\$Error.Count) { exit 1 }"
|
||||
cd "${GITHUB_WORKSPACE}" || exit
|
||||
pwsh -NoProfile -NoLogo -Command "${LINTER_COMMAND} ${FILE}; if (\${Error}.Count) { exit 1 }"
|
||||
exit $? 2>&1
|
||||
)
|
||||
else
|
||||
|
@ -178,8 +198,8 @@ function LintCodebase() {
|
|||
# Lint the file with the rules #
|
||||
################################
|
||||
LINT_CMD=$(
|
||||
cd "$GITHUB_WORKSPACE" || exit
|
||||
$LINTER_COMMAND "$FILE" 2>&1
|
||||
cd "${GITHUB_WORKSPACE}" || exit
|
||||
${LINTER_COMMAND} "${FILE}" 2>&1
|
||||
)
|
||||
fi
|
||||
|
||||
|
@ -191,21 +211,45 @@ function LintCodebase() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
#########
|
||||
# Error #
|
||||
#########
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [$LINTER_NAME] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$LINT_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [${LINTER_NAME}] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${LINT_CMD}]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC} Linter CMD:[${LINTER_COMMAND} ${FILE}]${NC}"
|
||||
# Increment the error count
|
||||
(("ERRORS_FOUND_$FILE_TYPE++"))
|
||||
(("ERRORS_FOUND_${FILE_TYPE}++"))
|
||||
|
||||
#######################################################
|
||||
# Store the linting as a temporary file in TAP format #
|
||||
#######################################################
|
||||
if IsTAP ; then
|
||||
NotOkTap "${INDEX}" "${FILE}" "${TMPFILE}"
|
||||
AddDetailedMessageIfEnabled "${LINT_CMD}" "${TMPFILE}"
|
||||
fi
|
||||
else
|
||||
###########
|
||||
# Success #
|
||||
###########
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[$FILE_NAME]${F[B]} was linted with ${F[W]}[$LINTER_NAME]${F[B]} successfully${NC}"
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[${FILE_NAME}]${F[B]} was linted with ${F[W]}[${LINTER_NAME}]${F[B]} successfully${NC}"
|
||||
|
||||
#######################################################
|
||||
# Store the linting as a temporary file in TAP format #
|
||||
#######################################################
|
||||
if IsTAP ; then
|
||||
OkTap "${INDEX}" "${FILE}" "${TMPFILE}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
#################################
|
||||
# Generate report in TAP format #
|
||||
#################################
|
||||
if IsTAP && [ ${INDEX} -gt 0 ] ; then
|
||||
HeaderTap "${INDEX}" "${REPORT_OUTPUT_FILE}"
|
||||
cat "${TMPFILE}" >> "${REPORT_OUTPUT_FILE}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
|
@ -214,11 +258,11 @@ function TestCodebase() {
|
|||
####################
|
||||
# Pull in the vars #
|
||||
####################
|
||||
FILE_TYPE="$1" # Pull the variable and remove from array path (Example: JSON)
|
||||
LINTER_NAME="$2" # Pull the variable and remove from array path (Example: jsonlint)
|
||||
LINTER_COMMAND="$3" # Pull the variable and remove from array path (Example: jsonlint -c ConfigFile /path/to/file)
|
||||
FILE_EXTENSIONS="$4" # Pull the variable and remove from array path (Example: *.json)
|
||||
INDVIDUAL_TEST_FOLDER="$5" # Folder for specific tests
|
||||
FILE_TYPE="${1}" # Pull the variable and remove from array path (Example: JSON)
|
||||
LINTER_NAME="${2}" # Pull the variable and remove from array path (Example: jsonlint)
|
||||
LINTER_COMMAND="${3}" # Pull the variable and remove from array path (Example: jsonlint -c ConfigFile /path/to/file)
|
||||
FILE_EXTENSIONS="${4}" # Pull the variable and remove from array path (Example: *.json)
|
||||
INDVIDUAL_TEST_FOLDER="${5}" # Folder for specific tests
|
||||
TESTS_RAN=0 # Incremented when tests are ran, this will help find failed finds
|
||||
|
||||
################
|
||||
|
@ -227,7 +271,7 @@ function TestCodebase() {
|
|||
echo ""
|
||||
echo "----------------------------------------------"
|
||||
echo "----------------------------------------------"
|
||||
echo "Testing Codebase [$FILE_TYPE] files..."
|
||||
echo "Testing Codebase [${FILE_TYPE}] files..."
|
||||
echo "----------------------------------------------"
|
||||
echo "----------------------------------------------"
|
||||
echo ""
|
||||
|
@ -235,7 +279,7 @@ function TestCodebase() {
|
|||
#####################################
|
||||
# Validate we have linter installed #
|
||||
#####################################
|
||||
VALIDATE_INSTALL_CMD=$(command -v "$LINTER_NAME" 2>&1)
|
||||
VALIDATE_INSTALL_CMD=$(command -v "${LINTER_NAME}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -245,14 +289,14 @@ function TestCodebase() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Failed
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find [$LINTER_NAME] in system!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$VALIDATE_INSTALL_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find [${LINTER_NAME}] in system!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${VALIDATE_INSTALL_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# Success
|
||||
echo -e "${NC}${F[B]}Successfully found binary for ${F[W]}[$LINTER_NAME]${F[B]} in system location: ${F[W]}[$VALIDATE_INSTALL_CMD]${NC}"
|
||||
echo -e "${NC}${F[B]}Successfully found binary for ${F[W]}[${LINTER_NAME}]${F[B]} in system location: ${F[W]}[${VALIDATE_INSTALL_CMD}]${NC}"
|
||||
fi
|
||||
|
||||
##########################
|
||||
|
@ -263,7 +307,16 @@ function TestCodebase() {
|
|||
#################################
|
||||
# Get list of all files to lint #
|
||||
#################################
|
||||
mapfile -t LIST_FILES < <(find "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER/$INDVIDUAL_TEST_FOLDER" -type f -regex "$FILE_EXTENSIONS" ! -path "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER/ansible/ghe-initialize/*" 2>&1)
|
||||
mapfile -t LIST_FILES < <(find "${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}/${INDVIDUAL_TEST_FOLDER}" -type f -regex "${FILE_EXTENSIONS}" ! -path "${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}/ansible/ghe-initialize/*" | sort 2>&1)
|
||||
|
||||
########################################
|
||||
# Prepare context if TAP output format #
|
||||
########################################
|
||||
if IsTAP ; then
|
||||
TMPFILE=$(mktemp -q "/tmp/super-linter-${FILE_TYPE}.XXXXXX")
|
||||
mkdir -p "${REPORT_OUTPUT_FOLDER}"
|
||||
REPORT_OUTPUT_FILE="${REPORT_OUTPUT_FOLDER}/super-linter-${FILE_TYPE}.${OUTPUT_FORMAT}"
|
||||
fi
|
||||
|
||||
##################
|
||||
# Lint the files #
|
||||
|
@ -272,18 +325,18 @@ function TestCodebase() {
|
|||
#####################
|
||||
# Get the file name #
|
||||
#####################
|
||||
FILE_NAME=$(basename "$FILE" 2>&1)
|
||||
FILE_NAME=$(basename "${FILE}" 2>&1)
|
||||
|
||||
############################
|
||||
# Get the file pass status #
|
||||
############################
|
||||
# Example: markdown_good_1.md -> good
|
||||
FILE_STATUS=$(echo "$FILE_NAME" | cut -f2 -d'_')
|
||||
FILE_STATUS=$(echo "${FILE_NAME}" | cut -f2 -d'_')
|
||||
|
||||
#########################################################
|
||||
# If not found, assume it should be linted successfully #
|
||||
#########################################################
|
||||
if [ -z "$FILE_STATUS" ] || [[ $FILE == *"README"* ]]; then
|
||||
if [ -z "${FILE_STATUS}" ] || [[ ${FILE} == *"README"* ]]; then
|
||||
##################################
|
||||
# Set to good for proper linting #
|
||||
##################################
|
||||
|
@ -294,7 +347,7 @@ function TestCodebase() {
|
|||
# File print #
|
||||
##############
|
||||
echo "---------------------------"
|
||||
echo "File:[$FILE]"
|
||||
echo "File:[${FILE}]"
|
||||
|
||||
########################
|
||||
# Set the lint command #
|
||||
|
@ -304,8 +357,8 @@ function TestCodebase() {
|
|||
#######################################
|
||||
# Check if docker and get folder name #
|
||||
#######################################
|
||||
if [[ $FILE_TYPE == "DOCKER" ]]; then
|
||||
if [[ $FILE == *"good"* ]]; then
|
||||
if [[ ${FILE_TYPE} == "DOCKER" ]]; then
|
||||
if [[ ${FILE} == *"good"* ]]; then
|
||||
#############
|
||||
# Good file #
|
||||
#############
|
||||
|
@ -321,11 +374,11 @@ function TestCodebase() {
|
|||
#####################
|
||||
# Check for ansible #
|
||||
#####################
|
||||
if [[ $FILE_TYPE == "ANSIBLE" ]]; then
|
||||
if [[ ${FILE_TYPE} == "ANSIBLE" ]]; then
|
||||
########################################
|
||||
# Make sure we dont lint certain files #
|
||||
########################################
|
||||
if [[ $FILE == *"vault.yml"* ]] || [[ $FILE == *"galaxy.yml"* ]]; then
|
||||
if [[ ${FILE} == *"vault.yml"* ]] || [[ ${FILE} == *"galaxy.yml"* ]]; then
|
||||
# This is a file we dont look at
|
||||
continue
|
||||
fi
|
||||
|
@ -334,17 +387,17 @@ function TestCodebase() {
|
|||
# Lint the file with the rules #
|
||||
################################
|
||||
LINT_CMD=$(
|
||||
cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER/$INDVIDUAL_TEST_FOLDER" || exit
|
||||
$LINTER_COMMAND "$FILE" 2>&1
|
||||
cd "${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}/${INDVIDUAL_TEST_FOLDER}" || exit
|
||||
${LINTER_COMMAND} "${FILE}" 2>&1
|
||||
)
|
||||
elif [[ $FILE_TYPE == "POWERSHELL" ]] || [[ $FILE_TYPE == "ARM" ]]; then
|
||||
elif [[ ${FILE_TYPE} == "POWERSHELL" ]] || [[ ${FILE_TYPE} == "ARM" ]]; then
|
||||
################################
|
||||
# Lint the file with the rules #
|
||||
################################
|
||||
# Need to run PowerShell commands using pwsh -c, also exit with exit code from inner subshell
|
||||
LINT_CMD=$(
|
||||
cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit
|
||||
pwsh -NoProfile -NoLogo -Command "$LINTER_COMMAND $FILE; if (\$Error.Count) { exit 1 }"
|
||||
cd "${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}" || exit
|
||||
pwsh -NoProfile -NoLogo -Command "${LINTER_COMMAND} ${FILE}; if (\${Error}.Count) { exit 1 }"
|
||||
exit $? 2>&1
|
||||
)
|
||||
else
|
||||
|
@ -352,8 +405,8 @@ function TestCodebase() {
|
|||
# Lint the file with the rules #
|
||||
################################
|
||||
LINT_CMD=$(
|
||||
cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit
|
||||
$LINTER_COMMAND "$FILE" 2>&1
|
||||
cd "${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}" || exit
|
||||
${LINTER_COMMAND} "${FILE}" 2>&1
|
||||
)
|
||||
fi
|
||||
|
||||
|
@ -362,31 +415,38 @@ function TestCodebase() {
|
|||
#######################
|
||||
ERROR_CODE=$?
|
||||
|
||||
########################################
|
||||
# Increment counter that check was ran #
|
||||
########################################
|
||||
(("TESTS_RAN++"))
|
||||
|
||||
########################################
|
||||
# Check for if it was supposed to pass #
|
||||
########################################
|
||||
if [[ $FILE_STATUS == "good" ]]; then
|
||||
if [[ ${FILE_STATUS} == "good" ]]; then
|
||||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
#########
|
||||
# Error #
|
||||
#########
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [$LINTER_NAME] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$LINT_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC} Linter CMD:[$LINTER_COMMAND $FILE]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [${LINTER_NAME}] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${LINT_CMD}]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC} Linter CMD:[${LINTER_COMMAND} ${FILE}]${NC}"
|
||||
# Increment the error count
|
||||
(("ERRORS_FOUND_$FILE_TYPE++"))
|
||||
# Increment counter that check was ran
|
||||
((TESTS_RAN++))
|
||||
(("ERRORS_FOUND_${FILE_TYPE}++"))
|
||||
else
|
||||
###########
|
||||
# Success #
|
||||
###########
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[$FILE_NAME]${F[B]} was linted with ${F[W]}[$LINTER_NAME]${F[B]} successfully${NC}"
|
||||
# Increment counter that check was ran
|
||||
((TESTS_RAN++))
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[${FILE_NAME}]${F[B]} was linted with ${F[W]}[${LINTER_NAME}]${F[B]} successfully${NC}"
|
||||
fi
|
||||
#######################################################
|
||||
# Store the linting as a temporary file in TAP format #
|
||||
#######################################################
|
||||
if IsTAP ; then
|
||||
OkTap "${TESTS_RAN}" "${FILE_NAME}" "${TMPFILE}"
|
||||
fi
|
||||
else
|
||||
#######################################
|
||||
|
@ -395,37 +455,77 @@ function TestCodebase() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -eq 0 ]; then
|
||||
if [ ${ERROR_CODE} -eq 0 ]; then
|
||||
#########
|
||||
# Error #
|
||||
#########
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [$LINTER_NAME] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [${LINTER_NAME}] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} This file should have failed test case!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$LINT_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC} Linter CMD:[$LINTER_COMMAND $FILE]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}Command run:${NC}[\$${LINT_CMD}]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${LINT_CMD}]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC} Linter CMD:[${LINTER_COMMAND} ${FILE}]${NC}"
|
||||
# Increment the error count
|
||||
(("ERRORS_FOUND_$FILE_TYPE++"))
|
||||
# Increment counter that check was ran
|
||||
((TESTS_RAN++))
|
||||
(("ERRORS_FOUND_${FILE_TYPE}++"))
|
||||
else
|
||||
###########
|
||||
# Success #
|
||||
###########
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[$FILE_NAME]${F[B]} failed test case with ${F[W]}[$LINTER_NAME]${F[B]} successfully${NC}"
|
||||
# Increment counter that check was ran
|
||||
((TESTS_RAN++))
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[${FILE_NAME}]${F[B]} failed test case with ${F[W]}[${LINTER_NAME}]${F[B]} successfully${NC}"
|
||||
fi
|
||||
#######################################################
|
||||
# Store the linting as a temporary file in TAP format #
|
||||
#######################################################
|
||||
if IsTAP ; then
|
||||
NotOkTap "${TESTS_RAN}" "${FILE_NAME}" "${TMPFILE}"
|
||||
AddDetailedMessageIfEnabled "${LINT_CMD}" "${TMPFILE}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
###########################################################################
|
||||
# Generate report in TAP format and validate with the expected TAP output #
|
||||
###########################################################################
|
||||
if IsTAP && [ ${TESTS_RAN} -gt 0 ] ; then
|
||||
HeaderTap "${TESTS_RAN}" "${REPORT_OUTPUT_FILE}"
|
||||
cat "${TMPFILE}" >> "${REPORT_OUTPUT_FILE}"
|
||||
|
||||
########################################################################
|
||||
# If expected TAP report exists then compare with the generated report #
|
||||
########################################################################
|
||||
EXPECTED_FILE="${GITHUB_WORKSPACE}/${TEST_CASE_FOLDER}/${INDVIDUAL_TEST_FOLDER}/reports/expected-${FILE_TYPE}.tap"
|
||||
if [ -e "${EXPECTED_FILE}" ] ; then
|
||||
TMPFILE=$(mktemp -q "/tmp/diff-${FILE_TYPE}.XXXXXX")
|
||||
## Ignore white spaces, case sensitive
|
||||
if ! diff -a -w -i "${EXPECTED_FILE}" "${REPORT_OUTPUT_FILE}" > "${TMPFILE}" 2>&1; then
|
||||
#############################################
|
||||
# We failed to compare the reporting output #
|
||||
#############################################
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to assert TAP output:[${LINTER_NAME}]${NC}"!
|
||||
echo "Please validate the asserts!"
|
||||
cat "${TMPFILE}"
|
||||
exit 1
|
||||
else
|
||||
# Success
|
||||
echo -e "${NC}${F[B]}Successfully validation in the expected TAP format for ${F[W]}[${LINTER_NAME}]${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${NC}${F[Y]}WARN!${NC} No TAP expected file found at:[${EXPECTED_FILE}]${NC}"
|
||||
echo "skipping report assertions"
|
||||
#####################################
|
||||
# Append the file type to the array #
|
||||
#####################################
|
||||
WARNING_ARRAY_TEST+=("${FILE_TYPE}")
|
||||
fi
|
||||
fi
|
||||
|
||||
##############################
|
||||
# Validate we ran some tests #
|
||||
##############################
|
||||
if [ "$TESTS_RAN" -eq 0 ]; then
|
||||
if [ "${TESTS_RAN}" -eq 0 ]; then
|
||||
#################################################
|
||||
# We failed to find files and no tests were ran #
|
||||
#################################################
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find any tests ran for the Linter:[$LINTER_NAME]${NC}"!
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find any tests ran for the Linter:[${LINTER_NAME}]${NC}"!
|
||||
echo "Please validate logic or that tests exist!"
|
||||
exit 1
|
||||
fi
|
||||
|
@ -454,36 +554,39 @@ function RunTestCases() {
|
|||
# Test case languages #
|
||||
#######################
|
||||
# TestCodebase "Language" "Linter" "Linter-command" "Regex to find files" "Test Folder"
|
||||
TestCodebase "YML" "yamllint" "yamllint -c $YAML_LINTER_RULES" ".*\.\(yml\|yaml\)\$" "yml"
|
||||
TestCodebase "JSON" "jsonlint" "jsonlint" ".*\.\(json\)\$" "json"
|
||||
TestCodebase "XML" "xmllint" "xmllint" ".*\.\(xml\)\$" "xml"
|
||||
TestCodebase "MARKDOWN" "markdownlint" "markdownlint -c $MD_LINTER_RULES" ".*\.\(md\)\$" "markdown"
|
||||
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 "PYTHON" "pylint" "pylint --rcfile $PYTHON_LINTER_RULES" ".*\.\(py\)\$" "python"
|
||||
TestCodebase "PERL" "perl" "perl -Mstrict -cw" ".*\.\(pl\)\$" "perl"
|
||||
TestCodebase "RAKU" "raku" "raku -c" ".*\.\(raku\|rakumod\|rakutest\|pm6\|pl6\|p6\)\$" "raku"
|
||||
TestCodebase "PHP" "php" "php -l" ".*\.\(php\)\$" "php"
|
||||
TestCodebase "RUBY" "rubocop" "rubocop -c $RUBY_LINTER_RULES" ".*\.\(rb\)\$" "ruby"
|
||||
TestCodebase "GO" "golangci-lint" "golangci-lint run -c $GO_LINTER_RULES" ".*\.\(go\)\$" "golang"
|
||||
TestCodebase "COFFEESCRIPT" "coffeelint" "coffeelint -f $COFFEESCRIPT_LINTER_RULES" ".*\.\(coffee\)\$" "coffeescript"
|
||||
TestCodebase "JAVASCRIPT_ES" "eslint" "eslint --no-eslintrc -c $JAVASCRIPT_LINTER_RULES" ".*\.\(js\)\$" "javascript"
|
||||
TestCodebase "JAVASCRIPT_STANDARD" "standard" "standard $JAVASCRIPT_STANDARD_LINTER_RULES" ".*\.\(js\)\$" "javascript"
|
||||
TestCodebase "TYPESCRIPT_ES" "eslint" "eslint --no-eslintrc -c $TYPESCRIPT_LINTER_RULES" ".*\.\(ts\)\$" "typescript"
|
||||
TestCodebase "TYPESCRIPT_STANDARD" "standard" "standard --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin $TYPESCRIPT_STANDARD_LINTER_RULES" ".*\.\(ts\)\$" "typescript"
|
||||
TestCodebase "DOCKER" "dockerfilelint" "dockerfilelint -c $DOCKER_LINTER_RULES" ".*\(Dockerfile\)\$" "docker"
|
||||
TestCodebase "ANSIBLE" "ansible-lint" "ansible-lint -v -c $ANSIBLE_LINTER_RULES" ".*\.\(yml\|yaml\)\$" "ansible"
|
||||
TestCodebase "TERRAFORM" "tflint" "tflint -c $TERRAFORM_LINTER_RULES" ".*\.\(tf\)\$" "terraform"
|
||||
TestCodebase "CFN" "cfn-lint" "cfn-lint --config-file $CFN_LINTER_RULES" ".*\.\(json\|yml\|yaml\)\$" "cfn"
|
||||
TestCodebase "POWERSHELL" "pwsh" "Invoke-ScriptAnalyzer -EnableExit -Settings $POWERSHELL_LINTER_RULES -Path" ".*\.\(ps1\|psm1\|psd1\|ps1xml\|pssc\|psrc\|cdxml\)\$" "powershell"
|
||||
TestCodebase "ARM" "arm-ttk" "Import-Module $ARM_TTK_PSD1 ; \$config = \$(Import-PowerShellDataFile -Path $ARM_LINTER_RULES) ; Test-AzTemplate @config -TemplatePath" ".*\.\(json\)\$" "arm"
|
||||
TestCodebase "CSS" "stylelint" "stylelint --config $CSS_LINTER_RULES" ".*\.\(css\)\$" "css"
|
||||
TestCodebase "CFN" "cfn-lint" "cfn-lint --config-file ${CFN_LINTER_RULES}" ".*\.\(json\|yml\|yaml\)\$" "cfn"
|
||||
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"
|
||||
TestCodebase "DART" "dart" "dartanalyzer --fatal-infos --fatal-warnings --options ${DART_LINTER_RULES}" ".*\.\(dart\)\$" "dart"
|
||||
TestCodebase "DOCKER" "dockerfilelint" "dockerfilelint -c ${DOCKER_LINTER_RULES}" ".*\(Dockerfile\)\$" "docker"
|
||||
TestCodebase "EDITORCONFIG" "editorconfig-checker" "editorconfig-checker" ".*\.ext$" "editorconfig-checker"
|
||||
TestCodebase "ENV" "dotenv-linter" "dotenv-linter" ".*\.\(env\)\$" "env"
|
||||
TestCodebase "CLOJURE" "clj-kondo" "clj-kondo --config $CLOJURE_LINTER_RULES --lint" ".*\.\(clj\|cljs\|cljc\|edn\)\$" "clojure"
|
||||
TestCodebase "KOTLIN" "ktlint" "ktlint" ".*\.\(kt\|kts\)\$" "kotlin"
|
||||
TestCodebase "PROTOBUF" "protolint" "protolint lint --config_path $PROTOBUF_LINTER_RULES" ".*\.\(proto\)\$" "protobuf"
|
||||
TestCodebase "OPENAPI" "spectral" "spectral lint -r $OPENAPI_LINTER_RULES" ".*\.\(ymlopenapi\|jsonopenapi\)\$" "openapi"
|
||||
TestCodebase "HTML" "htmlhint" "htmlhint --config $HTML_LINTER_RULES" ".*\.\(html\)\$" "html"
|
||||
TestCodebase "GO" "golangci-lint" "golangci-lint run -c ${GO_LINTER_RULES}" ".*\.\(go\)\$" "golang"
|
||||
TestCodebase "GROOVY" "npm-groovy-lint" "npm-groovy-lint -c $GROOVY_LINTER_RULES -s" ".*\.\(groovy\|jenkinsfile\|gradle\)\$" "groovy"
|
||||
TestCodebase "HTML" "htmlhint" "htmlhint --config ${HTML_LINTER_RULES}" ".*\.\(html\)\$" "html"
|
||||
TestCodebase "JAVASCRIPT_ES" "eslint" "eslint --no-eslintrc -c ${JAVASCRIPT_LINTER_RULES}" ".*\.\(js\)\$" "javascript"
|
||||
TestCodebase "JAVASCRIPT_STANDARD" "standard" "standard ${JAVASCRIPT_STANDARD_LINTER_RULES}" ".*\.\(js\)\$" "javascript"
|
||||
TestCodebase "JSON" "jsonlint" "jsonlint" ".*\.\(json\)\$" "json"
|
||||
TestCodebase "KOTLIN" "ktlint" "ktlint" ".*\.\(kt\|kts\)\$" "kotlin"
|
||||
TestCodebase "MARKDOWN" "markdownlint" "markdownlint -c ${MARKDOWN_LINTER_RULES}" ".*\.\(md\)\$" "markdown"
|
||||
TestCodebase "PERL" "perl" "perl -Mstrict -cw" ".*\.\(pl\)\$" "perl"
|
||||
TestCodebase "PHP" "php" "php -l" ".*\.\(php\)\$" "php"
|
||||
TestCodebase "OPENAPI" "spectral" "spectral lint -r ${OPENAPI_LINTER_RULES}" ".*\.\(ymlopenapi\|jsonopenapi\)\$" "openapi"
|
||||
TestCodebase "POWERSHELL" "pwsh" "Invoke-ScriptAnalyzer -EnableExit -Settings ${POWERSHELL_LINTER_RULES} -Path" ".*\.\(ps1\|psm1\|psd1\|ps1xml\|pssc\|psrc\|cdxml\)\$" "powershell"
|
||||
TestCodebase "PROTOBUF" "protolint" "protolint lint --config_path ${PROTOBUF_LINTER_RULES}" ".*\.\(proto\)\$" "protobuf"
|
||||
TestCodebase "PYTHON" "pylint" "pylint --rcfile ${PYTHON_LINTER_RULES}" ".*\.\(py\)\$" "python"
|
||||
TestCodebase "RAKU" "raku" "raku -c" ".*\.\(raku\|rakumod\|rakutest\|pm6\|pl6\|p6\)\$" "raku"
|
||||
TestCodebase "RUBY" "rubocop" "rubocop -c ${RUBY_LINTER_RULES}" ".*\.\(rb\)\$" "ruby"
|
||||
TestCodebase "STATES" "asl-validator" "asl-validator --json-path" ".*\.\(json\)\$" "states"
|
||||
TestCodebase "TERRAFORM" "tflint" "tflint -c ${TERRAFORM_LINTER_RULES}" ".*\.\(tf\)\$" "terraform"
|
||||
TestCodebase "TYPESCRIPT_ES" "eslint" "eslint --no-eslintrc -c ${TYPESCRIPT_LINTER_RULES}" ".*\.\(ts\)\$" "typescript"
|
||||
TestCodebase "TYPESCRIPT_STANDARD" "standard" "standard --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin ${TYPESCRIPT_STANDARD_LINTER_RULES}" ".*\.\(ts\)\$" "typescript"
|
||||
TestCodebase "XML" "xmllint" "xmllint" ".*\.\(xml\)\$" "xml"
|
||||
TestCodebase "YML" "yamllint" "yamllint -c ${YAML_LINTER_RULES}" ".*\.\(yml\|yaml\)\$" "yml"
|
||||
|
||||
#################
|
||||
# Footer prints #
|
||||
|
@ -518,7 +621,7 @@ function LintAnsibleFiles() {
|
|||
###########################################
|
||||
# Validate we have ansible-lint installed #
|
||||
###########################################
|
||||
VALIDATE_INSTALL_CMD=$(command -v "$LINTER_NAME" 2>&1)
|
||||
VALIDATE_INSTALL_CMD=$(command -v "${LINTER_NAME}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -528,17 +631,17 @@ function LintAnsibleFiles() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
# Failed
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find $LINTER_NAME in system!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$VALIDATE_INSTALL_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Failed to find ${LINTER_NAME} in system!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${VALIDATE_INSTALL_CMD}]${NC}"
|
||||
exit 1
|
||||
else
|
||||
# Success
|
||||
if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then
|
||||
if [[ ${ACTIONS_RUNNER_DEBUG} == "true" ]]; then
|
||||
# Success
|
||||
echo -e "${NC}${F[B]}Successfully found binary in system${NC}"
|
||||
echo "Location:[$VALIDATE_INSTALL_CMD]"
|
||||
echo "Location:[${VALIDATE_INSTALL_CMD}]"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -555,18 +658,18 @@ function LintAnsibleFiles() {
|
|||
######################################################
|
||||
# Only go into ansible linter if we have base folder #
|
||||
######################################################
|
||||
if [ -d "$ANSIBLE_DIRECTORY" ]; then
|
||||
if [ -d "${ANSIBLE_DIRECTORY}" ]; then
|
||||
|
||||
#################################
|
||||
# Get list of all files to lint #
|
||||
#################################
|
||||
mapfile -t LIST_FILES < <(ls "$ANSIBLE_DIRECTORY/*.yml" 2>&1)
|
||||
mapfile -t LIST_FILES < <(ls "${ANSIBLE_DIRECTORY}"/*.{yaml,yml} 2>&1)
|
||||
|
||||
###############################################################
|
||||
# Set the list to empty if only MD and TXT files were changed #
|
||||
###############################################################
|
||||
# No need to run the full ansible checks on read only file changes
|
||||
if [ "$READ_ONLY_CHANGE_FLAG" -eq 0 ]; then
|
||||
if [ "${READ_ONLY_CHANGE_FLAG}" -eq 0 ]; then
|
||||
##########################
|
||||
# Set the array to empty #
|
||||
##########################
|
||||
|
@ -584,15 +687,25 @@ function LintAnsibleFiles() {
|
|||
####################################
|
||||
# Check if we have data to look at #
|
||||
####################################
|
||||
if [ $SKIP_FLAG -eq 0 ]; then
|
||||
if [ ${SKIP_FLAG} -eq 0 ]; then
|
||||
for LINE in "${PRINT_ARRAY[@]}"; do
|
||||
#########################
|
||||
# Print the header line #
|
||||
#########################
|
||||
echo "$LINE"
|
||||
echo "${LINE}"
|
||||
done
|
||||
fi
|
||||
|
||||
########################################
|
||||
# Prepare context if TAP output format #
|
||||
########################################
|
||||
if IsTAP ; then
|
||||
TMPFILE=$(mktemp -q "/tmp/super-linter-${FILE_TYPE}.XXXXXX")
|
||||
INDEX=0
|
||||
mkdir -p "${REPORT_OUTPUT_FOLDER}"
|
||||
REPORT_OUTPUT_FILE="${REPORT_OUTPUT_FOLDER}/super-linter-${FILE_TYPE}.${OUTPUT_FORMAT}"
|
||||
fi
|
||||
|
||||
##################
|
||||
# Lint the files #
|
||||
##################
|
||||
|
@ -601,26 +714,31 @@ function LintAnsibleFiles() {
|
|||
########################################
|
||||
# Make sure we dont lint certain files #
|
||||
########################################
|
||||
if [[ $FILE == *"vault.yml"* ]] || [[ $FILE == *"galaxy.yml"* ]]; then
|
||||
if [[ ${FILE} == *"vault.yml"* ]] || [[ ${FILE} == *"galaxy.yml"* ]]; then
|
||||
# This is a file we dont look at
|
||||
continue
|
||||
fi
|
||||
|
||||
##################################
|
||||
# Increase the linted file index #
|
||||
##################################
|
||||
(("INDEX++"))
|
||||
|
||||
####################
|
||||
# Get the filename #
|
||||
####################
|
||||
FILE_NAME=$(basename "$ANSIBLE_DIRECTORY/$FILE" 2>&1)
|
||||
FILE_NAME=$(basename "${ANSIBLE_DIRECTORY}/${FILE}" 2>&1)
|
||||
|
||||
##############
|
||||
# File print #
|
||||
##############
|
||||
echo "---------------------------"
|
||||
echo "File:[$FILE]"
|
||||
echo "File:[${FILE}]"
|
||||
|
||||
################################
|
||||
# Lint the file with the rules #
|
||||
################################
|
||||
LINT_CMD=$("$LINTER_NAME" -v -c "$ANSIBLE_LINTER_RULES" "$ANSIBLE_DIRECTORY/$FILE" 2>&1)
|
||||
LINT_CMD=$("${LINTER_NAME}" -v -c "${ANSIBLE_LINTER_RULES}" "${ANSIBLE_DIRECTORY}/${FILE}" 2>&1)
|
||||
|
||||
#######################
|
||||
# Load the error code #
|
||||
|
@ -630,31 +748,136 @@ function LintAnsibleFiles() {
|
|||
##############################
|
||||
# Check the shell for errors #
|
||||
##############################
|
||||
if [ $ERROR_CODE -ne 0 ]; then
|
||||
if [ ${ERROR_CODE} -ne 0 ]; then
|
||||
#########
|
||||
# Error #
|
||||
#########
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [$LINTER_NAME] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[$LINT_CMD]${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR!${NC} Found errors in [${LINTER_NAME}] linter!${NC}"
|
||||
echo -e "${NC}${B[R]}${F[W]}ERROR:${NC}[${LINT_CMD}]${NC}"
|
||||
# Increment error count
|
||||
((ERRORS_FOUND_ANSIBLE++))
|
||||
|
||||
#######################################################
|
||||
# Store the linting as a temporary file in TAP format #
|
||||
#######################################################
|
||||
if IsTAP ; then
|
||||
NotOkTap "${INDEX}" "${FILE}" "${TMPFILE}"
|
||||
AddDetailedMessageIfEnabled "${LINT_CMD}" "${TMPFILE}"
|
||||
fi
|
||||
|
||||
else
|
||||
###########
|
||||
# Success #
|
||||
###########
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[$FILE_NAME]${F[B]} was linted with ${F[W]}[$LINTER_NAME]${F[B]} successfully${NC}"
|
||||
echo -e "${NC}${F[B]} - File:${F[W]}[${FILE_NAME}]${F[B]} was linted with ${F[W]}[${LINTER_NAME}]${F[B]} successfully${NC}"
|
||||
|
||||
#######################################################
|
||||
# Store the linting as a temporary file in TAP format #
|
||||
#######################################################
|
||||
if IsTAP ; then
|
||||
OkTap "${INDEX}" "${FILE}" "${TMPFILE}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
#################################
|
||||
# Generate report in TAP format #
|
||||
#################################
|
||||
if IsTAP && [ ${INDEX} -gt 0 ] ; then
|
||||
HeaderTap "${INDEX}" "${REPORT_OUTPUT_FILE}"
|
||||
cat "${TMPFILE}" >> "${REPORT_OUTPUT_FILE}"
|
||||
fi
|
||||
else # No ansible directory found in path
|
||||
###############################
|
||||
# Check to see if debug is on #
|
||||
###############################
|
||||
if [[ $ACTIONS_RUNNER_DEBUG == "true" ]]; then
|
||||
if [[ ${ACTIONS_RUNNER_DEBUG} == "true" ]]; then
|
||||
########################
|
||||
# No Ansible dir found #
|
||||
########################
|
||||
echo -e "${NC}${F[Y]}WARN!${NC} No Ansible base directory found at:[$ANSIBLE_DIRECTORY]${NC}"
|
||||
echo -e "${NC}${F[Y]}WARN!${NC} No Ansible base directory found at:[${ANSIBLE_DIRECTORY}]${NC}"
|
||||
echo "skipping ansible lint"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
#### Function IsTap ############################################################
|
||||
function IsTAP() {
|
||||
if [ "${OUTPUT_FORMAT}" == "tap" ] ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
#### Function TransformTAPDetails ##############################################
|
||||
function TransformTAPDetails() {
|
||||
DATA=${1}
|
||||
if [ -n "${DATA}" ] && [ "${OUTPUT_DETAILS}" == "detailed" ] ; then
|
||||
#########################################################
|
||||
# Transform new lines to \\n, remove colours and colons #
|
||||
#########################################################
|
||||
echo "${DATA}" | awk 'BEGIN{RS="\n";ORS="\\n"}1' | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | tr ':' ' '
|
||||
fi
|
||||
}
|
||||
################################################################################
|
||||
#### Function HeaderTap ########################################################
|
||||
function HeaderTap() {
|
||||
################
|
||||
# Pull in Vars #
|
||||
################
|
||||
INDEX="${1}" # File being validated
|
||||
OUTPUT_FILE="${2}" # Output location
|
||||
|
||||
###################
|
||||
# Print the goods #
|
||||
###################
|
||||
printf "TAP version 13\n1..%s\n" "${INDEX}" > "${OUTPUT_FILE}"
|
||||
}
|
||||
################################################################################
|
||||
#### Function OkTap ############################################################
|
||||
function OkTap() {
|
||||
################
|
||||
# Pull in Vars #
|
||||
################
|
||||
INDEX="${1}" # Location
|
||||
FILE="${2}" # File being validated
|
||||
TEMP_FILE="${3}" # Temp file location
|
||||
|
||||
###################
|
||||
# Print the goods #
|
||||
###################
|
||||
echo "ok ${INDEX} - ${FILE}" >> "${TEMP_FILE}"
|
||||
}
|
||||
################################################################################
|
||||
#### Function NotOkTap #########################################################
|
||||
function NotOkTap() {
|
||||
################
|
||||
# Pull in Vars #
|
||||
################
|
||||
INDEX="${1}" # Location
|
||||
FILE="${2}" # File being validated
|
||||
TEMP_FILE="${3}" # Temp file location
|
||||
|
||||
###################
|
||||
# Print the goods #
|
||||
###################
|
||||
echo "not ok ${INDEX} - ${FILE}" >> "${TEMP_FILE}"
|
||||
}
|
||||
################################################################################
|
||||
#### Function AddDetailedMessageIfEnabled ######################################
|
||||
function AddDetailedMessageIfEnabled() {
|
||||
################
|
||||
# Pull in Vars #
|
||||
################
|
||||
LINT_CMD="${1}" # Linter command
|
||||
TEMP_FILE="${2}" # Temp file
|
||||
|
||||
####################
|
||||
# Check the return #
|
||||
####################
|
||||
DETAILED_MSG=$(TransformTAPDetails "${LINT_CMD}")
|
||||
if [ -n "${DETAILED_MSG}" ] ; then
|
||||
printf " ---\n message: %s\n ...\n" "${DETAILED_MSG}" >> "${TEMP_FILE}"
|
||||
fi
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue