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