|
| 1 | +#!/usr/bin/env bash |
| 2 | +# SPDX-License-Identifier: PMPL-1.0-or-later |
| 3 | +# validate_examples.sh — CRG Grade B: check examples/ .lfe files for syntax errors |
| 4 | +set -euo pipefail |
| 5 | + |
| 6 | +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| 7 | +cd "$REPO_ROOT" |
| 8 | + |
| 9 | +PASS=0 |
| 10 | +FAIL=0 |
| 11 | +SKIP=0 |
| 12 | + |
| 13 | +pass() { echo "PASS: $1"; PASS=$((PASS + 1)); } |
| 14 | +fail() { echo "FAIL: $1"; FAIL=$((FAIL + 1)); } |
| 15 | +skip() { echo "SKIP: $1"; SKIP=$((SKIP + 1)); } |
| 16 | + |
| 17 | +# Grace-degrade if LFE/Erlang toolchain not available |
| 18 | +if ! command -v erlc &>/dev/null; then |
| 19 | + skip "erlc not found — skipping example syntax validation" |
| 20 | + echo "" |
| 21 | + echo "Results: $PASS passed, $FAIL failed, $SKIP skipped" |
| 22 | + exit 0 |
| 23 | +fi |
| 24 | + |
| 25 | +# Find LFE ebin directory for include path |
| 26 | +LFE_EBIN="" |
| 27 | +if [ -d "_build/default/lib/lfe/ebin" ]; then |
| 28 | + LFE_EBIN="-pa _build/default/lib/lfe/ebin" |
| 29 | +fi |
| 30 | + |
| 31 | +EXAMPLES=() |
| 32 | +while IFS= read -r -d '' f; do |
| 33 | + EXAMPLES+=("$f") |
| 34 | +done < <(find examples -maxdepth 1 -name '*.lfe' -print0 2>/dev/null) |
| 35 | + |
| 36 | +if [ "${#EXAMPLES[@]}" -eq 0 ]; then |
| 37 | + skip "No .lfe files found in examples/ — nothing to validate" |
| 38 | + echo "" |
| 39 | + echo "Results: $PASS passed, $FAIL failed, $SKIP skipped" |
| 40 | + exit 0 |
| 41 | +fi |
| 42 | + |
| 43 | +for f in "${EXAMPLES[@]}"; do |
| 44 | + filename="$(basename "$f")" |
| 45 | + # Count error lines; 0 errors = pass |
| 46 | + # shellcheck disable=SC2086 |
| 47 | + error_count=$(erlc $LFE_EBIN "$f" 2>&1 | grep -c "Error" || true) |
| 48 | + if [ "$error_count" -eq 0 ]; then |
| 49 | + pass "examples/$filename — no syntax errors" |
| 50 | + else |
| 51 | + fail "examples/$filename — $error_count error(s) detected" |
| 52 | + fi |
| 53 | +done |
| 54 | + |
| 55 | +echo "" |
| 56 | +echo "Results: $PASS passed, $FAIL failed, $SKIP skipped" |
| 57 | +[ "$FAIL" -eq 0 ] |
0 commit comments