mirror of
https://github.com/ludeeus/action-shellcheck.git
synced 2024-08-16 10:09:53 +02:00
Add scandir option (#28)
This commit is contained in:
parent
c489c81f79
commit
fcee962fee
3 changed files with 26 additions and 7 deletions
19
README.md
19
README.md
|
@ -80,10 +80,23 @@ all files at once:
|
|||
```yaml
|
||||
...
|
||||
- name: Run ShellCheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
check_together: 'yes'
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
check_together: 'yes'
|
||||
```
|
||||
|
||||
This can turn into a problem if you have enough script files to overwhelm the
|
||||
maximum argv length on your system.
|
||||
|
||||
## Run shellcheck only in a single directory
|
||||
|
||||
If you have multiple directories with scripts, but only want to scan
|
||||
one of them, you can use the following configuration:
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Run ShellCheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
scandir: './scripts'
|
||||
```
|
||||
|
|
|
@ -14,6 +14,10 @@ inputs:
|
|||
description: 'Run shellcheck on _all_ files at once, instead of one at a time'
|
||||
required: false
|
||||
default: ''
|
||||
scandir:
|
||||
description: 'Directory to be searched for files. Defaults to .'
|
||||
required: false
|
||||
default: '.'
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
|
|
10
runaction
10
runaction
|
@ -13,6 +13,7 @@ declare -a filepaths
|
|||
declare -a excludes
|
||||
declare -a tmp
|
||||
|
||||
INPUT_SCANDIR="${INPUT_SCANDIR:-.}"
|
||||
statuscode=0
|
||||
shebangregex="^#! */[^ ]*/(env *)?[abkz]*sh"
|
||||
|
||||
|
@ -26,7 +27,7 @@ for path in ${INPUT_IGNORE}; do
|
|||
excludes+=(! -path "*/${path}/*" )
|
||||
done
|
||||
|
||||
readarray -d '' filepaths < <(find . -type f "${excludes[@]}" \
|
||||
readarray -d '' filepaths < <(find "${INPUT_SCANDIR}" -type f "${excludes[@]}" \
|
||||
'(' \
|
||||
\
|
||||
-name '*.bash' \
|
||||
|
@ -59,19 +60,20 @@ readarray -d '' filepaths < <(find . -type f "${excludes[@]}" \
|
|||
\
|
||||
-print0)
|
||||
|
||||
readarray -d '' tmp < <(find . "${excludes[@]}" -type f ! -name '*.*' -perm /111 -print0)
|
||||
|
||||
readarray -d '' tmp < <(find "${INPUT_SCANDIR}" "${excludes[@]}" -type f ! -name '*.*' -perm /111 -print0)
|
||||
for file in "${tmp[@]}"; do
|
||||
head -n1 "$file" | grep -Eqs "$shebangregex" || continue
|
||||
filepaths+=("$file")
|
||||
done
|
||||
|
||||
if find . "${excludes[@]}" -path '*bin/*/*' -type f -perm /111 -print |
|
||||
if find "${INPUT_SCANDIR}" "${excludes[@]}" -path '*bin/*/*' -type f -perm /111 -print |
|
||||
grep .
|
||||
then
|
||||
echo >&2 "::warning:: subdirectories of bin directories are not usable via PATH"
|
||||
fi
|
||||
|
||||
if find . "${excludes[@]}" -path '*bin/*' -name '*.*' -type f -perm /111 -perm /444 -print |
|
||||
if find "${INPUT_SCANDIR}" "${excludes[@]}" -path '*bin/*' -name '*.*' -type f -perm /111 -perm /444 -print |
|
||||
grep .
|
||||
then
|
||||
echo >&2 "::warning:: programs in PATH should not have a filename suffix"
|
||||
|
|
Loading…
Reference in a new issue