Skip to content

Commit

Permalink
Add syntax checkers for Bash and Python
Browse files Browse the repository at this point in the history
  • Loading branch information
TimoWilken committed Feb 16, 2024
1 parent bda1a37 commit 8f5321c
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 37 deletions.
37 changes: 0 additions & 37 deletions .github/workflows/check-json-syntax.yml

This file was deleted.

88 changes: 88 additions & 0 deletions .github/workflows/syntax-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
name: Validate syntax

'on':
- push
- pull_request

permissions: {}

jobs:
json-syntax:
name: JSON
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Validate syntax for JSON files
run: |
error=0
readarray -d '' json_files < \
<(find . \( -path ./.git -or -path ./DATA/testing/private \) -prune -false -or -type f -name '*.json' -print0)
for jsonf in "${json_files[@]}"; do
echo "::debug::Checking $jsonf..."
if ! errmsg=$(jq . "$jsonf" 2>&1 >/dev/null); then
error=1
echo "Invalid JSON syntax found in $jsonf:" >&2
printf '::error file=%s,title=%s::%s\n' "$jsonf" 'Invalid JSON syntax' "$errmsg"
fi
done
exit "$error"
bash-syntax:
name: Bash
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Validate syntax with bash -n
run: |
error=0
readarray -d '' files < \
<(find . -path ./.git -prune -false -or -type f -name '*.sh' -print0)
for bashf in "${files[@]}"; do
echo "::debug::Checking $bashf..."
if ! errmsg=$(bash -n "$bashf" 2>&1 >/dev/null); then
error=1
echo "Invalid Bash syntax found in $bashf:" >&2
printf '::error file=%s,title=%s::%s\n' "$bashf" 'Invalid syntax' "$errmsg"
fi
done
exit "$error"
shellcheck:
name: Shellcheck
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Run Shellcheck to find errors
run: |
find . -path ./.git -prune -false -or -type f -name '*.sh' -print0 |
# Scripts run with "-o pipefail", so an error here isn't ignored.
xargs -0 shellcheck -xf json1 -S error -s bash |
# Produce code annotations in GitHub's format.
jq -r '.comments[] | "Error found in \(.file):\n::error file=\(.file),line=\(.line),endLine=\(.endLine),col=\(.column),endColumn=\(.endColumn)::\(.message)"'
pylint:
name: Pylint
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Run Pylint to find errors
run: |
find . -path ./.git -prune -false -or -type f -name '*.py' -print0 |
# Scripts run with "-o pipefail", so an error here isn't ignored.
# "import-errors" are shown for valid modules like ROOT, so ignore them.
xargs -0 pylint -E -f json --disable import-error |
# Produce code annotations in GitHub's format.
jq -r '.[] | "Error found in \(.path):\n::error file=\(.path),line=\(.line),endLine=\(.endLine),col=\(.column),endColumn=\(.endColumn),title=Pylint \(.type) \(.symbol)::\(.message)"'

0 comments on commit 8f5321c

Please sign in to comment.