132 lines
2.7 KiB
Bash
Executable File
132 lines
2.7 KiB
Bash
Executable File
#!/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 |