name: Shell Script Linter permissions: contents: read on: push: branches: [ "main", "test", "dev"] pull_request: branches: [ "main" ] jobs: shellcheck: name: Shellcheck runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install ShellCheck run: sudo apt-get update && sudo apt-get install -y shellcheck - name: Run Shellcheck run: | set -o pipefail files_to_check=$(find . -type f -name "*.sh" -not -path "./.git/*") if [ -z "$files_to_check" ]; then echo "No .sh files found to check." exit 0 fi echo "--- Checking for all warnings and style issues ---" echo "$files_to_check" | xargs shellcheck -f gcc | while IFS= read -r line; do file=$(echo "$line" | cut -d: -f1) line_no=$(echo "$line" | cut -d: -f2) message=$(echo "$line" | cut -d: -f4-) echo "::warning file=$file,line=$line_no::$message" done || true echo "--- Checking for critical errors ---" echo "$files_to_check" | xargs shellcheck --severity=error