make shellcheck emit all errors found and check for tab indentation

This commit is contained in:
Carter Canedy 2024-09-24 09:08:05 -07:00
parent 3c4a5dcecd
commit 6bec5f8283
No known key found for this signature in database
GPG Key ID: 41011788A157FED2

View File

@ -14,17 +14,42 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- run: git fetch origin ${{ github.base_ref }} - run: git fetch origin ${{ github.base_ref }}
- name: Download and set up shellcheck - name: Download, setup, and run ShellCheck
shell: bash {0}
run : | run : |
wget https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.linux.x86_64.tar.xz SC_URL="https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.linux.x86_64.tar.xz"
tar -xf shellcheck-v0.10.0.linux.x86_64.tar.xz curl -fsSL "$SC_URL" | tar -Jx
cd shellcheck-v0.10.0 chmod +x "./shellcheck-v0.10.0/shellcheck"
chmod +x shellcheck
- name: Run shellcheck error=0
run: | files_to_check=$(git diff --name-only origin/${{ github.base_ref }} HEAD core/tabs)
for file in $(git diff --name-only origin/${{ github.base_ref }} HEAD core/tabs); do
for file in $files_to_check; do
if [[ "$file" == *.sh ]] && [[ -f "$file" ]]; then if [[ "$file" == *.sh ]] && [[ -f "$file" ]]; then
./shellcheck-v0.10.0/shellcheck -S error "$file" sc_output=$(./shellcheck-v0.10.0/shellcheck -fgcc -Serror "$file")
iter_safe_parsed_errors=$(echo -e "$sc_output" | sed -n 's/\(.\+\)\:\([0-9]\+\)\:\([0-9]\+\)\: \(.*\)/::error file=\1,line=\2,col=\3::\4/p' | sed 's/ /:space:/g')
for error in $iter_safe_parsed_errors; do
echo "$error" | sed 's/:space:/ /g'
error=1
done
tabs_detected=$(grep -nP '^\t+\S+' "$file")
# fast fail on the action runner would fail immediately if there weren't any tabs found
# this check makes sure that we don't continue if there's something really weird going on
if [ "$?" = "2" ]; then
echo "::error file=$file::There was a critical while grepping $file, aborting"
exit 1
fi
iter_safe_parsed_tabs_detected=$(echo "$tabs_detected" | sed -n 's,\([0-9]\+\).*,::error file='"$file"'\,line=\1::Found tab indentations,p' | sed 's/ /:space:/g')
for error in $iter_safe_parsed_tabs_detected; do
echo "$error" | sed 's/:space:/ /g'
error=1
done
fi fi
done done
exit $error