mirror of
https://github.com/ludeeus/action-shellcheck.git
synced 2024-08-16 10:09:53 +02:00
Merge pull request #13 from ludeeus/testfiles
Add exclude and testfiles
This commit is contained in:
commit
f22efe748c
10 changed files with 76 additions and 23 deletions
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
* text=auto eol=lf
|
11
.github/workflows/push.yml
vendored
11
.github/workflows/push.yml
vendored
|
@ -2,9 +2,12 @@ on: push
|
|||
name: 'Trigger: Push'
|
||||
jobs:
|
||||
shellcheck:
|
||||
name: Shellcheck
|
||||
name: ShellCheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Shellcheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Run ShellCheck
|
||||
uses: ./
|
||||
with:
|
||||
ignore: ignore
|
||||
|
|
10
Dockerfile
10
Dockerfile
|
@ -3,12 +3,4 @@ FROM alpine:3.11.6
|
|||
RUN apk add --no-cache shellcheck bash
|
||||
|
||||
COPY runaction.sh /action/runaction.sh
|
||||
ENTRYPOINT ["bash", "/action/runaction.sh"]
|
||||
|
||||
LABEL "name"="ShellCheck"
|
||||
LABEL "maintainer"="Ludeeus <hi@ludeeus.dev>"
|
||||
LABEL "version"="0.1.0"
|
||||
LABEL "com.github.actions.name"="ShellCheck"
|
||||
LABEL "com.github.actions.description"="GitHub action for ShellCheck."
|
||||
LABEL "com.github.actions.icon"="terminal"
|
||||
LABEL "com.github.actions.color"="black"
|
||||
ENTRYPOINT ["bash", "/action/runaction.sh"]
|
24
README.md
24
README.md
|
@ -22,8 +22,6 @@ jobs:
|
|||
uses: ludeeus/action-shellcheck@master
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Globally disable checks
|
||||
|
||||
To disable specific checks add it to a `SHELLCHECK_OPTS` env key in the job definition.
|
||||
|
@ -37,3 +35,25 @@ example:
|
|||
env:
|
||||
SHELLCHECK_OPTS: -e SC2059 -e SC2034 -e SC1090
|
||||
```
|
||||
|
||||
## Ignore paths
|
||||
|
||||
You can use the `ignore` input to disable specific directories.
|
||||
|
||||
```text
|
||||
sample structure:
|
||||
sample/directory/with/files/toignore/test.sh
|
||||
sample/directory/with/files/test.sh
|
||||
```
|
||||
|
||||
example:
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Run ShellCheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
ignore: toignore
|
||||
```
|
||||
|
||||
This will skip `sample/directory/with/files/toignore/test.sh`
|
||||
|
|
14
action.yaml
Normal file
14
action.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
name: "ShellCheck"
|
||||
author: "Ludeeus <hi@ludeeus.dev>"
|
||||
description: "GitHub action for ShellCheck."
|
||||
inputs:
|
||||
ignore:
|
||||
description: 'Paths to ignore when running ShellCheck'
|
||||
required: false
|
||||
default: ''
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
branding:
|
||||
icon: 'terminal'
|
||||
color: 'gray-dark'
|
25
runaction.sh
25
runaction.sh
|
@ -2,13 +2,22 @@
|
|||
|
||||
cd "$GITHUB_WORKSPACE" || exit 1
|
||||
|
||||
declare err
|
||||
declare statuscode
|
||||
declare -a filepaths
|
||||
declare -a excludes
|
||||
declare -a tmp
|
||||
|
||||
err=0
|
||||
statuscode=0
|
||||
|
||||
readarray -d '' filepaths < <(find . '(' \
|
||||
excludes+=( ! -path *./.git/* )
|
||||
for path in ${INPUT_IGNORE}; do
|
||||
echo "::debug:: Adding '${path}' to excludes"
|
||||
excludes+=(! -path "*./${path}/*" )
|
||||
excludes+=(! -path "*/${path}/*" )
|
||||
done
|
||||
|
||||
readarray -d '' filepaths < <(find . "${excludes[@]}" \
|
||||
'(' \
|
||||
\
|
||||
-name '*.bash' \
|
||||
-o -path '*/.bash*' \
|
||||
|
@ -37,19 +46,19 @@ readarray -d '' filepaths < <(find . '(' \
|
|||
-print0)
|
||||
|
||||
|
||||
readarray -d '' tmp < <(find . -type f ! -name '*.*' -perm /111 -print0)
|
||||
readarray -d '' tmp < <(find . "${excludes[@]}" -type f ! -name '*.*' -perm /111 -print0)
|
||||
for file in "${tmp[@]}"; do
|
||||
head -n1 "$file" | grep -Eqs "^#! */[^ ]*/[abkz]*sh" || continue
|
||||
filepaths+=("$file")
|
||||
done
|
||||
|
||||
if find . -path '*bin/*/*' -type f -perm /111 -print |
|
||||
if find . "${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 . -path '*bin/*' -name '*.*' -type f -perm /111 -perm /444 -print |
|
||||
if find . "${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"
|
||||
|
@ -57,7 +66,7 @@ fi
|
|||
|
||||
for file in "${filepaths[@]}"; do
|
||||
echo "::debug:: Checking $file"
|
||||
shellcheck "$file" || err=$?
|
||||
shellcheck "$file" || statuscode=$?
|
||||
done
|
||||
|
||||
exit "$err"
|
||||
exit "$statuscode"
|
3
testfiles/ignore/ignore.sh
Normal file
3
testfiles/ignore/ignore.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo $test
|
4
testfiles/test
Normal file
4
testfiles/test
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
test="test"
|
||||
echo "$test"
|
3
testfiles/test.bash
Normal file
3
testfiles/test.bash
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
test="test"
|
||||
echo "$test"
|
4
testfiles/test.sh
Normal file
4
testfiles/test.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/sh
|
||||
|
||||
test="test"
|
||||
echo "$test"
|
Loading…
Reference in a new issue