name: Check Shell Scripts

on:
  pull_request:
    paths:
      - '**/*.sh'  # Führt den Check nur für Shell-Skripte aus

jobs:
  check-scripts:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout Code
      uses: actions/checkout@v3

    - name: Check `source` Line in Scripts
      shell: bash
      run: |
        set -e
        ERROR_COUNT=0
        FILES=$(find . -name "*.sh")

        for FILE in $FILES; do
          # Check for exact match of the source line in line 2
          if [[ $(sed -n '2p' "$FILE") =~ ^source[[:space:]]+<(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) ]]; then
            echo "Check passed for: $FILE"
          else
            echo "Error in $FILE: Line 2 must be exactly 'source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)' if a source line is used."
            ERROR_COUNT=$((ERROR_COUNT + 1))
          fi

          # Check for shebang line at the top
          if [[ $(head -n 1 "$FILE") != "#!/usr/bin/env bash" ]]; then
            echo "Error in $FILE: The first line must be '#!/usr/bin/env bash'."
            ERROR_COUNT=$((ERROR_COUNT + 1))
          fi

          # Check for executable permissions
          if [[ ! -x "$FILE" ]]; then
            echo "Warning in $FILE: This script is not executable. Consider running 'chmod +x $FILE'."
          fi

          # Check for empty lines at the beginning of the script
          if [[ $(head -n 10 "$FILE" | grep -c '^$') -gt 0 ]]; then
            echo "Warning in $FILE: There are empty lines at the beginning of the script. Consider removing them."
          fi
        done

        if [[ "$ERROR_COUNT" -gt 0 ]]; then
          echo "$ERROR_COUNT script(s) failed validation."
          exit 1
        else
          echo "All scripts passed."
        fi
