diff --git a/.github/check-script.yml b/.github/check-script.yml new file mode 100644 index 00000000..560bc396 --- /dev/null +++ b/.github/check-script.yml @@ -0,0 +1,54 @@ +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