Emit all shellcheck errors using github action toolkit annotations and check for tab indentation #375
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ShellCheck | |
on: | |
pull_request: | |
paths: | |
- 'core/tabs/**/*.sh' | |
workflow_dispatch: | |
jobs: | |
shellcheck: | |
name: Shellcheck | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: git fetch origin ${{ github.base_ref }} | |
- name: Download, setup, and run ShellCheck | |
shell: bash {0} | |
run : | | |
SC_URL="https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.linux.x86_64.tar.xz" | |
curl -fsSL "$SC_URL" | tar -Jx | |
chmod +x "./shellcheck-v0.10.0/shellcheck" | |
error=0 | |
files_to_check=$(git diff --name-only origin/${{ github.base_ref }} HEAD core/tabs) | |
for file in $files_to_check; do | |
if [[ "$file" == *.sh ]] && [[ -f "$file" ]]; then | |
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 | |
done | |
exit $error |