#!/bin/bash set -u echo "====================================" echo " Davidson CI - JavaScript/TypeScript" echo "====================================" JS_COUNT="${DAVIDSON_JS_COUNT:-0}" TS_COUNT="${DAVIDSON_TS_COUNT:-0}" TOTAL=$((JS_COUNT + TS_COUNT)) set_status() { echo "DAVIDSON_JS_STATUS=$1" >> "${GITHUB_ENV:-/dev/null}" } if [ "$TOTAL" -eq 0 ]; then echo "No JavaScript or TypeScript detected - skipping module" set_status "SKIP" exit 0 fi echo echo "JavaScript files: $JS_COUNT" echo "TypeScript files: $TS_COUNT" echo FAIL=0 echo "→ Node dependencies" if [ -f package-lock.json ]; then if ! npm ci; then FAIL=1 fi elif [ -f package.json ]; then echo "package.json found but no package-lock.json" else echo "No package.json found" fi echo echo "→ JavaScript syntax" if [ "$JS_COUNT" -gt 0 ]; then while IFS= read -r -d '' file; do echo "Checking $file" if ! node --check "$file"; then FAIL=1 fi done < <( find . \ -type f \ \( -name "*.js" -o -name "*.mjs" -o -name "*.cjs" \) \ -not -path "./node_modules/*" \ -print0 ) else echo "No JavaScript files - skipping syntax check" fi echo echo "→ TypeScript" if [ "$TS_COUNT" -gt 0 ]; then if [ -f package.json ] && \ node -e "let p=require('./package.json'); process.exit(p.scripts?.typecheck ? 0 : 1)" then if ! npm run typecheck; then FAIL=1 fi elif [ -x node_modules/.bin/tsc ]; then if ! npx tsc --noEmit; then FAIL=1 fi else echo "TypeScript detected but no TypeScript checker configured" fi else echo "No TypeScript files - skipping" fi echo echo "→ ESLint" if [ -f package.json ] && \ node -e "let p=require('./package.json'); process.exit(p.scripts?.lint ? 0 : 1)" then if ! npm run lint; then FAIL=1 fi else echo "No lint script - skipping" fi echo echo "→ JavaScript tests" if [ -f package.json ] && \ node -e "let p=require('./package.json'); process.exit(p.scripts?.test ? 0 : 1)" then if ! npm test; then FAIL=1 fi else echo "No test script - skipping" fi echo echo "→ Frontend build" if [ -f package.json ] && \ node -e "let p=require('./package.json'); process.exit(p.scripts?.build ? 0 : 1)" then if ! npm run build; then FAIL=1 fi else echo "No build script - skipping" fi if [ "$FAIL" -eq 0 ]; then set_status "PASS" echo echo "JavaScript/TypeScript module completed successfully" exit 0 else set_status "FAIL" echo echo "JavaScript/TypeScript module failed" exit 1 fi