Merge branch 'master' into OpenAPI

This commit is contained in:
Lukas Gravley 2020-06-26 08:19:10 -05:00 committed by GitHub
commit 625841f40f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
38 changed files with 619 additions and 39 deletions

View file

@ -8,7 +8,7 @@
# Its based on being built from a GitHub Action, but could be easily updated # Its based on being built from a GitHub Action, but could be easily updated
# To be ran in a different medium. # To be ran in a different medium.
# #
# PRE-Reqs: # PRE-Requirements:
# - Dockerfile # - Dockerfile
# - System with Docker installed # - System with Docker installed
# - Global variables met # - Global variables met

View file

@ -35,7 +35,7 @@ CheckGHEPid()
################################################ ################################################
if [ ! -f "$GHE_CONFIG_PID" ]; then if [ ! -f "$GHE_CONFIG_PID" ]; then
# File not found # File not found
echo "Were 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 else
# Found the pid running, need to sleep # 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..."
@ -189,10 +189,10 @@ CheckGHEProcess
#################### ####################
RunConfigApply RunConfigApply
########################################## ###########################################
# Were going to run it again after a nap # # We're going to run it again after a nap #
# to make sure there is no crazy actions # # to make sure there is no crazy actions #
########################################## ###########################################
sleep 300s sleep 300s
###################### ######################

View file

@ -0,0 +1,13 @@
# 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.

View file

@ -0,0 +1,64 @@
(ns foo
(:require
[clojure.string :as str]
;; We're never using this namespace. Also, the namespaces aren't sorted.
[clojure.set :as set]))
;; Here we made a typo, so the symbol is unresolved:
(but-last [1 2 3])
;; Clj-kondo knows about arities of clojure namespaces, but you can also teach
;; it about your libraries or own namespaces
(str/join)
;; foo has an arity of 2, but we're not actually using y
(defn foo-fn [x y]
;; this do is redundant:
(do
;; this is handy for debugging, but please remove it before pushing your code:
(def tmp_x x)
(let [y (fn [] (inc x))]
;; the next let can be squashed together with the previous:
(let [z y]
;; whoopsy, calling a local function with an incorrect number of args:
(y x)
;; also wrong:
(recur)))))
(letfn
[(f [] (h 1))
(h [] (f 1))])
(defn- private-fn [])
;; redefining it...
(defn- private-fn [])
(defn foo [] :foo)
;; Type error, because foo doesn't return a number!
(inc (foo))
;; I'm tired now, let's sleep...
;; Oops, not happening because of wrong amount of args:
(Thread/sleep 1000 1 2)
;; Here we switch to another namespace and require the previous:
(ns bar (:require [foo :as f]))
;; Wrong arity when calling a function from the previous namespace:
(f/foo-fn)
;; private:
(f/private-fn)
;; this won't pass the reader:
{:a 1 :a 2}
;; and neither will this:
#{1 1}
;; nor this:
{:a 1 :b}
(ns bar-test (:require [clojure.test :as t]))
(t/deftest my-tests
;; you're not actually testing something here:
(odd? (inc 1)))

View file

@ -0,0 +1,34 @@
(ns foo
(:require
[clojure.string :as str]))
(butlast [1 2 3])
(str/join "" "")
(defn foo-fn [x]
(let [y (fn [] (inc x))]
(y)))
(letfn
[(f [g] (h g))
(h [i] (f i))])
(defn foo [] 1)
(inc (foo))
(Thread/sleep 1000 1)
;; Here we switch to another namespace and require the previous:
(ns bar (:require [foo :as f]))
(f/foo-fn 1)
{:a 1 :b 2}
#{1 2}
{:a 1 :b 2}
(ns bar-test (:require [clojure.test :as t]))
(t/deftest my-tests
(t/is (odd? (inc 1))))

View file

@ -6,7 +6,7 @@
# `mona echo *` - repeats what you say # `mona echo *` - repeats what you say
# #
# Author: # Author:
# admiralAwkbar@github.com # admiralawkbar@github.com
############################### ###############################
# Drop Hammer array of images # # Drop Hammer array of images #

View file

@ -6,7 +6,7 @@
# `mona echo *` - repeats what you say # `mona echo *` - repeats what you say
# #
# Author: # Author:
# admiralAwkbar@github.com # admiralawkbar@github.com
############################### ###############################
# Drop Hammer array of images # # Drop Hammer array of images #

View file

@ -1,5 +1,5 @@
/* Bad */ /* Bad */
/* Multiline */ /* Multi-line */
/* Comment */ /* Comment */
.selector-3[type="text"] { .selector-3[type="text"] {
background: linear-gradient(#FFFFFF, rgba(0, 0, 0, 0.8)); background: linear-gradient(#FFFFFF, rgba(0, 0, 0, 0.8));

View file

@ -16,5 +16,5 @@ ls -la
# Walk away # Walk away
Were all done **here**. We're all done **here**.
- [Link Action]https://github.com - [Link Action]https://github.com

View file

@ -16,5 +16,5 @@ ls -la
### Walk away ### Walk away
Were all done **here**. We're all done **here**.
- [Link Action](https://github.com) - [Link Action](https://github.com)

View file

@ -1,7 +1,7 @@
#!/usr/bin/perl #!/usr/bin/perl
################################################################################ ################################################################################
################################################################################ ################################################################################
######### Script action @admiralAwkbar ######################################### ######### Script action @admiralawkbar #########################################
################################################################################ ################################################################################
############# #############

View file

@ -1,7 +1,7 @@
#!/usr/bin/perl #!/usr/bin/perl
################################################################################ ################################################################################
################################################################################ ################################################################################
######### Script action @admiralAwkbar ######################################### ######### Script action @admiralawkbar #########################################
################################################################################ ################################################################################
############# #############

View file

@ -9,7 +9,7 @@
# Its based on being built from a GitHub Action, but could be easily updated # Its based on being built from a GitHub Action, but could be easily updated
# To be ran in a different medium. # To be ran in a different medium.
# #
# PRE-Reqs: # PRE-Requirements:
# - Dockerfile # - Dockerfile
# - System with Docker installed # - System with Docker installed
# - Global variables met # - Global variables met

View file

@ -0,0 +1,7 @@
musl
nvq
rdoc
setuptools
uninstall
wget
WORKDIR

View file

@ -0,0 +1 @@
alnum

View file

@ -0,0 +1,3 @@
noqa
toc
todo

View file

@ -0,0 +1,48 @@
abcd
bangbang
bento
bullettrain
busstop
cn
couplekiss
dango
dvd
facepunch
feelsgood
finnadie
fuelpump
gb
goberserk
godmode
gua
hankey
heartpulse
hocho
hurtrealbad
icecream
inbox
iphone
izakaya
jp
keycap
mega
minidisc
moyai
neckbeard
octocat
oden
ramen
ru
scorpius
shipit
snowboarder
tada
tanabata
thumbsdown
thumbsup
tophat
trollface
tshirt
uk
vhs
zzz

View file

@ -0,0 +1,2 @@
configcheck
nohup

View file

@ -0,0 +1,2 @@
args
pid

View file

@ -0,0 +1 @@
initialconfig

View file

@ -0,0 +1,2 @@
ldapconfig
openldap

View file

@ -0,0 +1,8 @@
cov
eslintcache
jscoverage
jspm
nyc
tgz
typings
wscript

View file

@ -0,0 +1,7 @@
cw
Mstrict
printenv
rcfile
tf
tolower
whoami

View file

@ -0,0 +1,8 @@
Autobots
basemap
cas
cn
crt
rsa
tlsv
tmp

View file

@ -0,0 +1,4 @@
dotcom
identicons
oauth
timezone

158
.github/actions/spelling/allow/words.txt vendored Normal file
View file

@ -0,0 +1,158 @@
admiralawkbar
ansible
api
apk
aws
baz
beardofedu
certs
changeset
codebase
CODEOWNERS
coffeelint
coffeescript
collectd
concat
config
configs
css
dest
devops
dirname
dockerfile
dockerfilelint
dockerfilelintrc
dotenv
elif
emails
entrypoint
Errorf
eslint
eslintrc
filetype
func
gcc
getenv
ghe
GHES
ghl
github
globals
golang
golangci
Google
gpg
gql
Grafana
graphql
grep
homepage
hookshot
hostname
hostvars
http
https
hubot
idp
ip
Jani
javascript
jq
json
jsonlint
jwiebalk
JWT
ldap
len
lfs
libxml
linted
linting
loadbalancer
localhost
loglevel
markdownlint
millis
mkdir
nodejs
NONINFRINGEMENT
noproxy
noreply
npm
ntp
opensource
opensourcefriday
perl
plugin
posix
pprint
Prego
prettyjson
Println
probot
px
py
pylint
rb
readlines
README
regex
regexp
resqued
rgba
rien
Rubo
rubocop
saml
screenshots
shellcheck
signup
smtp
snmp
socio
splunk
src
ssh
ssl
sso
stackoverflow
stacktraces
standardjs
stringify
stylelint
stylelintrc
subdomain
subfolders
sudo
sys
syslog
taz
terraform
tflint
tileserver
tls
typeof
ubuntu
udp
uid
undef
uniq
uri
url
urlencode
username
usr
utils
Vape
vnd
webhook
wiki
wildcards
workflow
xml
xmllint
yaml
yamllint
yml
yq
zkoppert

2
.github/actions/spelling/excludes.txt vendored Normal file
View file

@ -0,0 +1,2 @@
^\.github/linters/
^TEMPLATES/\.\S*

39
.github/actions/spelling/expect.txt vendored Normal file
View file

@ -0,0 +1,39 @@
cdxml
changelog
chmod
Dockerhub
EOL
GPR
IAm
icu
jre
kotlin
krb
ktlint
libgcc
libintl
libssl
libstdc
linux
lttng
microsoft
ncurses
nq
openjdk
php
powershell
println
psd
psm
psrc
pssc
psscriptanalyzer
pwsh
rcu
rhc
ry
terminfo
tzdata
userspace
xargs
zlib

7
.github/actions/spelling/patterns.txt vendored Normal file
View file

@ -0,0 +1,7 @@
https?:\S*
# ignore long runs of a single character:
([A-Za-z])\1{3,}
# Any CLI args (-xzf -aef)
\ -\w+\b
# Hex colors (dummy group to not be treated as comment)
(?:#)([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})

2
.github/linters/.clj-kondo/config.edn vendored Normal file
View file

@ -0,0 +1,2 @@
{:linters {:unresolved-symbol {:exclude [(compojure.api.sweet/defroutes)]}
:refer-all {:exclude [clj-time.jdbc]}}}

48
.github/workflows/check-spelling.yml vendored Normal file
View file

@ -0,0 +1,48 @@
---
####################
## Check spelling ##
####################
#
# Documentation:
# https://help.github.com/en/articles/workflow-syntax-for-github-actions
#
name: Spell checking
#############################
# Start the job on all push #
#############################
on:
push:
branches-ignore:
- 'master'
###############
# Set the Job #
###############
jobs:
build:
# Name the Job
name: Spell checking
# Set the agent to run on
runs-on: ubuntu-latest
##################
# Load all steps #
##################
steps:
##########################
# Checkout the code base #
##########################
- name: Checkout Code
uses: actions/checkout@v2
#############################
# Run check spelling action #
#############################
- name: Check spelling
uses: check-spelling/check-spelling@0.0.16-alpha
with:
bucket: .github/actions
project: spelling
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -0,0 +1,13 @@
name: Greetings
on: [pull_request, issues]
jobs:
greeting:
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: 'Thanks for opening your first issue in the **super-linter** repo! :tada:'
pr-message: 'Thanks for opening your first pr in the **super-linter** repo! :tada: This project is built on contributions just like this.'

5
.gitignore vendored
View file

@ -29,7 +29,7 @@ bower_components
# node-waf configuration # node-waf configuration
.lock-wscript .lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html) # Compiled binary add-ons (https://nodejs.org/api/addons.html)
build/Release build/Release
# Dependency directories # Dependency directories
@ -59,3 +59,6 @@ typings/
# next.js build output # next.js build output
.next .next
# clj-kondo cache
.cache

View file

@ -132,6 +132,15 @@ RUN curl -Ls "$(curl -Ls https://api.github.com/repos/terraform-linters/tflint/r
RUN wget "https://github.com/dotenv-linter/dotenv-linter/releases/latest/download/dotenv-linter-alpine-x86_64.tar.gz" -O - -q | tar -xzf - \ RUN wget "https://github.com/dotenv-linter/dotenv-linter/releases/latest/download/dotenv-linter-alpine-x86_64.tar.gz" -O - -q | tar -xzf - \
&& mv "dotenv-linter" /usr/bin && mv "dotenv-linter" /usr/bin
#####################
# Install clj-kondo #
#####################
ARG CLJ_KONDO_VERSION='2020.06.12'
RUN curl -sLO https://github.com/borkdude/clj-kondo/releases/download/v${CLJ_KONDO_VERSION}/clj-kondo-${CLJ_KONDO_VERSION}-linux-static-amd64.zip \
&& unzip clj-kondo-${CLJ_KONDO_VERSION}-linux-static-amd64.zip \
&& rm clj-kondo-${CLJ_KONDO_VERSION}-linux-static-amd64.zip \
&& mv clj-kondo /usr/bin/
################## ##################
# Install ktlint # # Install ktlint #
################## ##################
@ -167,6 +176,7 @@ ENV GITHUB_SHA=${GITHUB_SHA} \
VALIDATE_TERRAFORM=${VALIDATE_TERRAFORM} \ VALIDATE_TERRAFORM=${VALIDATE_TERRAFORM} \
VALIDATE_CSS=${VALIDATE_CSS} \ VALIDATE_CSS=${VALIDATE_CSS} \
VALIDATE_ENV=${VALIDATE_ENV} \ VALIDATE_ENV=${VALIDATE_ENV} \
VALIDATE_CLOJURE=${VALIDATE_CLOJURE} \
VALIDATE_KOTLIN=${VALIDATE_KOTLIN} \ VALIDATE_KOTLIN=${VALIDATE_KOTLIN} \
VALIDATE_POWERSHELL=${VALIDATE_POWERSHELL} \ VALIDATE_POWERSHELL=${VALIDATE_POWERSHELL} \
VALIDATE_OPENAPI=${VALIDATE_OPENAPI} \ VALIDATE_OPENAPI=${VALIDATE_OPENAPI} \

View file

@ -8,10 +8,26 @@ The end goal of this tool:
- Build guidelines for code layout and format - Build guidelines for code layout and format
- Automate the process to help streamline code reviews - Automate the process to help streamline code reviews
## Table of Contents
- [How it works](#how-it-works)
- [Supported linters](#supported-linters)
- [Usage](#how-to-use)
- [Environment variables](#environment-variables)
- [Disable rules](#disabling-rules)
- [Docker Hub](#docker-hub)
- [Run Super-Linter locally](#running-super-linter-locally-troubleshootingdebuggingenhancements)
- [CI / CT/ CD](#cictcd)
- [Limitations](#limitations)
- [Contributing](#how-to-contribute)
## How it Works ## How it Works
The super-linter finds issues and reports them to the console output. Fixes are suggested in the console output but not automatically fixed, and a status check will show up as failed on the pull request. The super-linter finds issues and reports them to the console output. Fixes are suggested in the console output but not automatically fixed, and a status check will show up as failed on the pull request.
The design of the **Super-Linter** is currently to allow linting to occur in **GitHub Actions** as a part of continuous integration occurring on pull requests as the commits get pushed. It works best when commits are being pushed early and often to a branch with an open or draft pull request. There is some desire to move this closer to local development for faster feedback on linting errors but this is not yet supported.
## Supported Linters ## Supported Linters
Developers on **GitHub** can call the **GitHub Action** to lint their code base with the following list of linters: Developers on **GitHub** can call the **GitHub Action** to lint their code base with the following list of linters:
@ -20,6 +36,7 @@ Developers on **GitHub** can call the **GitHub Action** to lint their code base
| --- | --- | | --- | --- |
| **Ansible** | [ansible-lint](https://github.com/ansible/ansible-lint) | | **Ansible** | [ansible-lint](https://github.com/ansible/ansible-lint) |
| **CSS** | [stylelint](https://stylelint.io/) | | **CSS** | [stylelint](https://stylelint.io/) |
| **Clojure** | [clj-kondo](https://github.com/borkdude/clj-kondo) |
| **CoffeeScript** | [coffeelint](https://coffeelint.github.io/) | | **CoffeeScript** | [coffeelint](https://coffeelint.github.io/) |
| **Dockerfile** | [dockerfilelint](https://github.com/replicatedhq/dockerfilelint.git) | | **Dockerfile** | [dockerfilelint](https://github.com/replicatedhq/dockerfilelint.git) |
| **Golang** | [golangci-lint](https://github.com/golangci/golangci-lint) | | **Golang** | [golangci-lint](https://github.com/golangci/golangci-lint) |
@ -144,6 +161,7 @@ and won't run anything unexpected.
| **VALIDATE_TERRAFORM** | `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_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_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_KOTLIN** | `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_OPENAPI** | `true` | Flag to enable or disable the linting process of the language. |
| **ANSIBLE_DIRECTORY** | `/ansible` | Flag to set the root directory for Ansible file location(s). | | **ANSIBLE_DIRECTORY** | `/ansible` | Flag to set the root directory for Ansible file location(s). |
@ -165,6 +183,8 @@ The **Docker** container that is built from this repository is located at `https
## Running Super-Linter locally (troubleshooting/debugging/enhancements) ## Running Super-Linter locally (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) 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 ### CI/CT/CD
The **Super-Linter** has *CI/CT/CD* configured utilizing **GitHub** Actions. 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 - When a branch is created and code is pushed, a **GitHub** Action is triggered for building the new **Docker** container with the new codebase

View file

@ -0,0 +1,2 @@
{:linters {:unresolved-symbol {:exclude [(compojure.api.sweet/defroutes)]}
:refer-all {:exclude [clj-time.jdbc]}}}

View file

@ -157,9 +157,9 @@ This line is waaaaaaaaaay too long # yamllint disable-line
### Yamllint disable code block ### Yamllint disable code block
```yml ```yml
# yamllint disable rule:colons # yamllint disable rule:colons
- Lorem : ipsum - Key : value
dolor : sit amet, dolor : sit,
consectetur : adipiscing elit foo : bar
# yamllint enable # yamllint enable
``` ```
@ -223,9 +223,9 @@ class Foo(object):
def meth3(self): def meth3(self):
"""test one line disabling""" """test one line disabling"""
# no error # no error
print(self.bla) # pylint: disable=no-member print(self.baz) # pylint: disable=no-member
# error # error
print(self.blop) print(self.baz)
``` ```
### Pylint disable entire file ### Pylint disable entire file
@ -629,3 +629,23 @@ import package.b.*
### OpenAPI disable entire file ### OpenAPI disable entire file
- There is currently **No** way to disable rules inline of the file(s) - 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). - 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).
--------------------------------------------------------------------------------
## 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
{:output {:exclude-files ["path/to/file"]}}
```

View file

@ -3,7 +3,7 @@
################################################################################ ################################################################################
################################################################################ ################################################################################
########### Super-Linter (Lint all the code) @AdmiralAwkbar #################### ########### Super-Linter (Lint all the code) @admiralawkbar ####################
################################################################################ ################################################################################
################################################################################ ################################################################################
@ -27,7 +27,7 @@ RUBY_FILE_NAME='.ruby-lint.yml' # Name of th
RUBY_LINTER_RULES="$DEFAULT_RULES_LOCATION/$RUBY_FILE_NAME" # Path to the ruby lint rules RUBY_LINTER_RULES="$DEFAULT_RULES_LOCATION/$RUBY_FILE_NAME" # Path to the ruby lint rules
# Coffee Vars # Coffee Vars
COFFEE_FILE_NAME='.coffee-lint.json' # Name of the file COFFEE_FILE_NAME='.coffee-lint.json' # Name of the file
COFFEESCRIPT_LINTER_RULES="$DEFAULT_RULES_LOCATION/$COFFEE_FILE_NAME" # Path to the coffescript lint rules COFFEESCRIPT_LINTER_RULES="$DEFAULT_RULES_LOCATION/$COFFEE_FILE_NAME" # Path to the coffeescript lint rules
# Javascript Vars # Javascript Vars
JAVASCRIPT_FILE_NAME='.eslintrc.yml' # Name of the file JAVASCRIPT_FILE_NAME='.eslintrc.yml' # Name of the file
JAVASCRIPT_LINTER_RULES="$DEFAULT_RULES_LOCATION/$JAVASCRIPT_FILE_NAME" # Path to the Javascript lint rules JAVASCRIPT_LINTER_RULES="$DEFAULT_RULES_LOCATION/$JAVASCRIPT_FILE_NAME" # Path to the Javascript lint rules
@ -57,6 +57,9 @@ CSS_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CSS_FILE_NAME" # Path to th
# OpenAPI Vars # OpenAPI Vars
OPENAPI_FILE_NAME='.openapirc.yml' # Name of the file OPENAPI_FILE_NAME='.openapirc.yml' # Name of the file
OPENAPI_LINTER_RULES="$DEFAULT_RULES_LOCATION/$OPENAPI_FILE_NAME" # Path to the OpenAPI lint rules OPENAPI_LINTER_RULES="$DEFAULT_RULES_LOCATION/$OPENAPI_FILE_NAME" # Path to the OpenAPI lint rules
# Clojure Vars
CLOJURE_FILE_NAME='.clj-kondo/config.edn'
CLOJURE_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CLOJURE_FILE_NAME"
####################################### #######################################
# Linter array for information prints # # Linter array for information prints #
@ -64,7 +67,7 @@ OPENAPI_LINTER_RULES="$DEFAULT_RULES_LOCATION/$OPENAPI_FILE_NAME" # Path to th
LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck" LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck"
"pylint" "perl" "rubocop" "coffeelint" "eslint" "standard" "pylint" "perl" "rubocop" "coffeelint" "eslint" "standard"
"ansible-lint" "/dockerfilelint/bin/dockerfilelint" "golangci-lint" "tflint" "ansible-lint" "/dockerfilelint/bin/dockerfilelint" "golangci-lint" "tflint"
"stylelint" "dotenv-linter" "powershell" "ktlint" "spectral") "stylelint" "dotenv-linter" "powershell" "ktlint" "clj-kondo" "spectral")
############################# #############################
# Language array for prints # # Language array for prints #
@ -72,7 +75,7 @@ LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck"
LANGUAGE_ARRAY=('YML' 'JSON' 'XML' 'MARKDOWN' 'BASH' 'PERL' 'PHP' 'RUBY' 'PYTHON' LANGUAGE_ARRAY=('YML' 'JSON' 'XML' 'MARKDOWN' 'BASH' 'PERL' 'PHP' 'RUBY' 'PYTHON'
'COFFEESCRIPT' 'ANSIBLE' 'JAVASCRIPT_STANDARD' 'JAVASCRIPT_ES' 'COFFEESCRIPT' 'ANSIBLE' 'JAVASCRIPT_STANDARD' 'JAVASCRIPT_ES'
'TYPESCRIPT_STANDARD' 'TYPESCRIPT_ES' 'DOCKER' 'GO' 'TERRAFORM' 'TYPESCRIPT_STANDARD' 'TYPESCRIPT_ES' 'DOCKER' 'GO' 'TERRAFORM'
'ENV' 'POWERSHELL' 'KOTLIN' 'OPENAPI') 'CSS' 'ENV' 'POWERSHELL' 'KOTLIN' 'CLOJURE' 'OPENAPI')
################### ###################
# GitHub ENV Vars # # GitHub ENV Vars #
@ -102,6 +105,7 @@ VALIDATE_DOCKER="${VALIDATE_DOCKER}" # Boolean to validate lang
VALIDATE_GO="${VALIDATE_GO}" # Boolean to validate language VALIDATE_GO="${VALIDATE_GO}" # Boolean to validate language
VALIDATE_CSS="${VALIDATE_CSS}" # Boolean to validate language VALIDATE_CSS="${VALIDATE_CSS}" # Boolean to validate language
VALIDATE_ENV="${VALIDATE_ENV}" # Boolean to validate language VALIDATE_ENV="${VALIDATE_ENV}" # Boolean to validate language
VALIDATE_CLOJURE="${VALIDATE_CLOJURE}" # Boolean to validate language
VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM}" # Boolean to validate language VALIDATE_TERRAFORM="${VALIDATE_TERRAFORM}" # Boolean to validate language
VALIDATE_POWERSHELL="${VALIDATE_POWERSHELL}" # Boolean to validate language VALIDATE_POWERSHELL="${VALIDATE_POWERSHELL}" # Boolean to validate language
VALIDATE_KOTLIN="${VALIDATE_KOTLIN}" # Boolean to validate language VALIDATE_KOTLIN="${VALIDATE_KOTLIN}" # Boolean to validate language
@ -118,16 +122,16 @@ ACTIONS_RUNNER_DEBUG="${ACTIONS_RUNNER_DEBUG}" # Boolean to see even more info
################ ################
# Default Vars # # Default Vars #
################ ################
DEFAULT_VALIDATE_ALL_CODEBASE='true' # Default value for validate all files DEFAULT_VALIDATE_ALL_CODEBASE='true' # Default value for validate all files
DEFAULT_WORKSPACE="${DEFAULT_WORKSPACE:-/tmp/lint}" # Default workspace if running locally DEFAULT_WORKSPACE="${DEFAULT_WORKSPACE:-/tmp/lint}" # Default workspace if running locally
DEFAULT_ANSIBLE_DIRECTORY="$GITHUB_WORKSPACE/ansible" # Default Ansible Directory DEFAULT_ANSIBLE_DIRECTORY="$GITHUB_WORKSPACE/ansible" # Default Ansible Directory
DEFAULT_RUN_LOCAL='false' # Default value for debugging locally DEFAULT_RUN_LOCAL='false' # Default value for debugging locally
DEFAULT_TEST_CASE_RUN='false' # Flag to tell code to run only test cases DEFAULT_TEST_CASE_RUN='false' # Flag to tell code to run only test cases
DEFAULT_ACTIONS_RUNNER_DEBUG='false' # Default value for debugging output DEFAULT_ACTIONS_RUNNER_DEBUG='false' # Default value for debugging output
RAW_FILE_ARRAY=() # Array of all files that were changed RAW_FILE_ARRAY=() # Array of all files that were changed
READ_ONLY_CHANGE_FLAG=0 # Flag set to 1 if files changed are not txt or md READ_ONLY_CHANGE_FLAG=0 # Flag set to 1 if files changed are not txt or md
TEST_CASE_FOLDER='.automation/test' # Folder for test cases we should always ignore TEST_CASE_FOLDER='.automation/test' # Folder for test cases we should always ignore
DEFAULT_DISABLE_ERRORS='false' # Default to enabling errors DEFAULT_DISABLE_ERRORS='false' # Default to enabling errors
########################## ##########################
# Array of changed files # # Array of changed files #
@ -152,6 +156,7 @@ FILE_ARRAY_TERRAFORM=() # Array of files to check
FILE_ARRAY_POWERSHELL=() # Array of files to check FILE_ARRAY_POWERSHELL=() # Array of files to check
FILE_ARRAY_CSS=() # Array of files to check FILE_ARRAY_CSS=() # Array of files to check
FILE_ARRAY_ENV=() # Array of files to check FILE_ARRAY_ENV=() # Array of files to check
FILE_ARRAY_CLOJURE=() # Array of files to check
FILE_ARRAY_KOTLIN=() # Array of files to check FILE_ARRAY_KOTLIN=() # Array of files to check
FILE_ARRAY_OPENAPI=() # Array of files to check FILE_ARRAY_OPENAPI=() # Array of files to check
@ -179,6 +184,7 @@ ERRORS_FOUND_TERRAFORM=0 # Count of errors found
ERRORS_FOUND_POWERSHELL=0 # Count of errors found ERRORS_FOUND_POWERSHELL=0 # Count of errors found
ERRORS_FOUND_CSS=0 # Count of errors found ERRORS_FOUND_CSS=0 # Count of errors found
ERRORS_FOUND_ENV=0 # Count of errors found ERRORS_FOUND_ENV=0 # Count of errors found
ERRORS_FOUND_CLOJURE=0 # Count of errors found
ERRORS_FOUND_KOTLIN=0 # Count of errors found ERRORS_FOUND_KOTLIN=0 # Count of errors found
ERRORS_FOUND_OPENAPI=0 # Count of errors found ERRORS_FOUND_OPENAPI=0 # Count of errors found
@ -774,6 +780,7 @@ GetValidationInfo()
VALIDATE_POWERSHELL=$(echo "$VALIDATE_POWERSHELL" | awk '{print tolower($0)}') VALIDATE_POWERSHELL=$(echo "$VALIDATE_POWERSHELL" | awk '{print tolower($0)}')
VALIDATE_CSS=$(echo "$VALIDATE_CSS" | awk '{print tolower($0)}') VALIDATE_CSS=$(echo "$VALIDATE_CSS" | awk '{print tolower($0)}')
VALIDATE_ENV=$(echo "$VALIDATE_ENV" | 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_KOTLIN=$(echo "$VALIDATE_KOTLIN" | awk '{print tolower($0)}')
VALIDATE_OPENAPI=$(echo "$VALIDATE_OPENAPI" | awk '{print tolower($0)}') VALIDATE_OPENAPI=$(echo "$VALIDATE_OPENAPI" | awk '{print tolower($0)}')
@ -802,8 +809,9 @@ GetValidationInfo()
-n "$VALIDATE_POWERSHELL" || \ -n "$VALIDATE_POWERSHELL" || \
-n "$VALIDATE_CSS" || \ -n "$VALIDATE_CSS" || \
-n "$VALIDATE_ENV" || \ -n "$VALIDATE_ENV" || \
-n "$VALIDATE_KOTLIN" || \ -n "$VALIDATE_CLOJURE" || \
-n "$VALIDATE_OPENAPI" ]]; then -n "$VALIDATE_OPENAPI" ]] \
-n "$VALIDATE_KOTLIN" ]]; then
ANY_SET="true" ANY_SET="true"
fi fi
@ -1129,6 +1137,20 @@ GetValidationInfo()
VALIDATE_OPENAPI="true" VALIDATE_OPENAPI="true"
fi fi
#######################################
# Validate if we should check Clojure #
#######################################
if [[ "$ANY_SET" == "true" ]]; then
# Some linter flags were set - only run those set to true
if [[ -z "$VALIDATE_CLOJURE" ]]; then
# Clojure flag was not set - default to false
VALIDATE_CLOJURE="false"
fi
else
# No linter flags were set - default all to true
VALIDATE_CLOJURE="true"
fi
####################################### #######################################
# Print which linters we are enabling # # Print which linters we are enabling #
####################################### #######################################
@ -1232,6 +1254,11 @@ GetValidationInfo()
else else
PRINT_ARRAY+=("- Excluding [CSS] files in code base...") PRINT_ARRAY+=("- Excluding [CSS] files in code base...")
fi fi
if [[ "$VALIDATE_CLOJURE" == "true" ]]; then
PRINT_ARRAY+=("- Validating [CLOJURE] files in code base...")
else
PRINT_ARRAY+=("- Excluding [CLOJURE] files in code base...")
fi
if [[ "$VALIDATE_ENV" == "true" ]]; then if [[ "$VALIDATE_ENV" == "true" ]]; then
PRINT_ARRAY+=("- Validating [ENV] files in code base...") PRINT_ARRAY+=("- Validating [ENV] files in code base...")
else else
@ -1644,6 +1671,15 @@ BuildFileList()
# Set the READ_ONLY_CHANGE_FLAG since this could be exec # # Set the READ_ONLY_CHANGE_FLAG since this could be exec #
########################################################## ##########################################################
READ_ONLY_CHANGE_FLAG=1 READ_ONLY_CHANGE_FLAG=1
elif [ "$FILE" == "clj" ] || [ "$FILE" == "cljs" ] || [ "$FILE" == "cljc" ] || [ "$FILE" == "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
else else
############################################## ##############################################
# Use file to see if we can parse what it is # # Use file to see if we can parse what it is #
@ -1873,7 +1909,7 @@ LintCodebase()
# Lint the file with the rules # # Lint the file with the rules #
################################ ################################
# Need to append "'" to make the pwsh call syntax correct, also exit with exit code from inner subshell # Need to append "'" to make the pwsh call syntax correct, also exit with exit code from inner subshell
LINT_CMD=$(cd "$GITHUB_WORKSPACE/$TEST_CASE_FOLDER" || exit; $LINTER_COMMAND "$FILE"; exit $? 2>&1) LINT_CMD=$(cd "$GITHUB_WORKSPACE" || exit; $LINTER_COMMAND "$FILE"; exit $? 2>&1)
else else
################################ ################################
# Lint the file with the rules # # Lint the file with the rules #
@ -2173,8 +2209,9 @@ Footer()
[ "$ERRORS_FOUND_RUBY" -ne 0 ] || \ [ "$ERRORS_FOUND_RUBY" -ne 0 ] || \
[ "$ERRORS_FOUND_CSS" -ne 0 ] || \ [ "$ERRORS_FOUND_CSS" -ne 0 ] || \
[ "$ERRORS_FOUND_ENV" -ne 0 ] || \ [ "$ERRORS_FOUND_ENV" -ne 0 ] || \
[ "$ERRORS_FOUND_KOTLIN" -ne 0 ] || \ [ "$ERRORS_FOUND_OPENAPI" -ne 0 ] \
[ "$ERRORS_FOUND_OPENAPI" -ne 0 ]; then [ "$ERRORS_FOUND_CLOJURE" -ne 0 ] || \
[ "$ERRORS_FOUND_KOTLIN" -ne 0 ]; then
# Failed exit # Failed exit
echo "Exiting with errors found!" echo "Exiting with errors found!"
exit 1 exit 1
@ -2235,6 +2272,7 @@ RunTestCases()
TestCodebase "POWERSHELL" "pwsh" "pwsh -c Invoke-ScriptAnalyzer -EnableExit -Settings $POWERSHELL_LINTER_RULES -Path" ".*\.\(ps1\|psm1\|psd1\|ps1xml\|pssc\|psrc\|cdxml\)\$" TestCodebase "POWERSHELL" "pwsh" "pwsh -c Invoke-ScriptAnalyzer -EnableExit -Settings $POWERSHELL_LINTER_RULES -Path" ".*\.\(ps1\|psm1\|psd1\|ps1xml\|pssc\|psrc\|cdxml\)\$"
TestCodebase "CSS" "stylelint" "stylelint --config $CSS_LINTER_RULES" ".*\.\(css\)\$" TestCodebase "CSS" "stylelint" "stylelint --config $CSS_LINTER_RULES" ".*\.\(css\)\$"
TestCodebase "ENV" "dotenv-linter" "dotenv-linter" ".*\.\(env\)\$" TestCodebase "ENV" "dotenv-linter" "dotenv-linter" ".*\.\(env\)\$"
TestCodebase "CLOJURE" "clj-kondo" "clj-kondo --config $CLOJURE_LINTER_RULES --lint" ".*\.\(clj\|cljs\|cljc\|edn\)\$"
TestCodebase "KOTLIN" "ktlint" "ktlint" ".*\.\(kt\|kts\)\$" TestCodebase "KOTLIN" "ktlint" "ktlint" ".*\.\(kt\|kts\)\$"
TestCodebase "OPENAPI" "spectral" "spectral lint -r $OPENAPI_LINTER_RULES" ".*\.\(ymlopenapi\|jsonopenapi\)\$" TestCodebase "OPENAPI" "spectral" "spectral lint -r $OPENAPI_LINTER_RULES" ".*\.\(ymlopenapi\|jsonopenapi\)\$"
@ -2568,6 +2606,20 @@ if [ "$VALIDATE_DOCKER" == "true" ]; then
LintCodebase "DOCKER" "/dockerfilelint/bin/dockerfilelint" "/dockerfilelint/bin/dockerfilelint" ".*\(Dockerfile\)\$" "${FILE_ARRAY_DOCKER[@]}" LintCodebase "DOCKER" "/dockerfilelint/bin/dockerfilelint" "/dockerfilelint/bin/dockerfilelint" ".*\(Dockerfile\)\$" "${FILE_ARRAY_DOCKER[@]}"
fi fi
###################
# CLOJURE LINTING #
###################
if [ "$VALIDATE_CLOJURE" == "true" ]; then
#################################
# Get Clojure standard rules #
#################################
GetStandardRules "clj-kondo"
#########################
# Lint the Clojure files #
#########################
LintCodebase "CLOJURE" "clj-kondo" "clj-kondo --config $CLOJURE_LINTER_RULES --lint" ".*\.\(clj\|cljs\|cljc\|edn\)\$" "${FILE_ARRAY_CLOJURE[@]}"
fi
###################### ######################
# POWERSHELL LINTING # # POWERSHELL LINTING #
###################### ######################