diff --git a/.github/workflows/precompile-checks.yml b/.github/workflows/precompile-checks.yml new file mode 100644 index 0000000000000..f090cb75fe414 --- /dev/null +++ b/.github/workflows/precompile-checks.yml @@ -0,0 +1,21 @@ +name: Precompile Checks + +on: + push: + branches: + - master + paths: ['**/*.c', '**/*.cpp'] + pull_request: + types: [opened, synchronize, reopened] + paths: ['**/*.c', '**/*.cpp'] + +jobs: + precompile-check: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Run Forbidden Includes Check + run: bash scripts/precompile-checks.sh diff --git a/scripts/precompile-checks.sh b/scripts/precompile-checks.sh new file mode 100755 index 0000000000000..8fe62d4cad705 --- /dev/null +++ b/scripts/precompile-checks.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# This runs some pre compilation sanity checks that certain project rules and guidelines are kept +# This will not contain any signifiant logic, but mostly just obvious and easily greppable checks + +ERROR_FOUND=0 + + +## START OF INCLUDES EXCLUDED FROM EXAMPLES FOLDER ## +SRC_DIR="./examples" +FORBIDDEN_HEADERS=("llama-impl.h") +echo "🔍 Scanning for forbidden includes in $SRC_DIR..." +for HEADER in "${FORBIDDEN_HEADERS[@]}"; do + MATCHES=$(grep -rn --include=\*.{c,cpp} "#include \"$HEADER\"" "$SRC_DIR" 2>/dev/null) + + if [[ -n "$MATCHES" ]]; then + echo "❌ Forbidden include detected: $HEADER" + echo "$MATCHES" | while IFS=: read -r FILE LINE _; do + echo "::error file=$FILE,line=$LINE::Forbidden include: $HEADER in $FILE at line $LINE" + done + ERROR_FOUND=1 + fi + +done +## END OF INCLUDES EXCLUDED FROM EXAMPLES FOLDER ## + + +if [[ "$ERROR_FOUND" -eq 1 ]]; then + echo "❌ Forbidden includes found. Please remove!" + exit 1 +else + echo "✅ No forbidden includes found." +fi