Add modular JavaScript and TypeScript checks
pauljd/davidson-ci: Davidson CI / detect (push) Successful in 2s
pauljd/davidson-ci: Davidson CI / detect (push) Successful in 2s
This commit is contained in:
Executable
+124
@@ -0,0 +1,124 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "===================================="
|
||||
echo " Davidson CI - JavaScript/TypeScript"
|
||||
echo "===================================="
|
||||
|
||||
JS_COUNT="${DAVIDSON_JS_COUNT:-0}"
|
||||
TS_COUNT="${DAVIDSON_TS_COUNT:-0}"
|
||||
TOTAL=$((JS_COUNT + TS_COUNT))
|
||||
|
||||
if [ "$TOTAL" -eq 0 ]; then
|
||||
echo "No JavaScript or TypeScript detected - skipping module"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "JavaScript files: $JS_COUNT"
|
||||
echo "TypeScript files: $TS_COUNT"
|
||||
echo
|
||||
|
||||
# -------------------------
|
||||
# Dependencies
|
||||
# -------------------------
|
||||
|
||||
echo "→ Node dependencies"
|
||||
|
||||
if [ -f package-lock.json ]; then
|
||||
npm ci
|
||||
elif [ -f package.json ]; then
|
||||
echo "package.json found but no package-lock.json"
|
||||
else
|
||||
echo "No package.json found"
|
||||
fi
|
||||
|
||||
# -------------------------
|
||||
# JavaScript syntax
|
||||
# -------------------------
|
||||
|
||||
echo
|
||||
echo "→ JavaScript syntax"
|
||||
|
||||
if [ "$JS_COUNT" -gt 0 ]; then
|
||||
find . \
|
||||
-type f \
|
||||
\( -name "*.js" -o -name "*.mjs" -o -name "*.cjs" \) \
|
||||
-not -path "./node_modules/*" \
|
||||
-print0 |
|
||||
while IFS= read -r -d '' file; do
|
||||
echo "Checking $file"
|
||||
node --check "$file"
|
||||
done
|
||||
else
|
||||
echo "No JavaScript files - skipping syntax check"
|
||||
fi
|
||||
|
||||
# -------------------------
|
||||
# TypeScript
|
||||
# -------------------------
|
||||
|
||||
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
|
||||
npm run typecheck
|
||||
elif [ -x node_modules/.bin/tsc ]; then
|
||||
npx tsc --noEmit
|
||||
else
|
||||
echo "TypeScript detected but no TypeScript checker configured"
|
||||
fi
|
||||
else
|
||||
echo "No TypeScript files - skipping"
|
||||
fi
|
||||
|
||||
# -------------------------
|
||||
# ESLint
|
||||
# -------------------------
|
||||
|
||||
echo
|
||||
echo "→ ESLint"
|
||||
|
||||
if [ -f package.json ] && \
|
||||
node -e "let p=require('./package.json'); process.exit(p.scripts?.lint ? 0 : 1)"
|
||||
then
|
||||
npm run lint
|
||||
else
|
||||
echo "No lint script - skipping"
|
||||
fi
|
||||
|
||||
# -------------------------
|
||||
# Tests
|
||||
# -------------------------
|
||||
|
||||
echo
|
||||
echo "→ JavaScript tests"
|
||||
|
||||
if [ -f package.json ] && \
|
||||
node -e "let p=require('./package.json'); process.exit(p.scripts?.test ? 0 : 1)"
|
||||
then
|
||||
npm test
|
||||
else
|
||||
echo "No test script - skipping"
|
||||
fi
|
||||
|
||||
# -------------------------
|
||||
# Build
|
||||
# -------------------------
|
||||
|
||||
echo
|
||||
echo "→ Frontend build"
|
||||
|
||||
if [ -f package.json ] && \
|
||||
node -e "let p=require('./package.json'); process.exit(p.scripts?.build ? 0 : 1)"
|
||||
then
|
||||
npm run build
|
||||
else
|
||||
echo "No build script - skipping"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "JavaScript/TypeScript module completed successfully"
|
||||
Reference in New Issue
Block a user