116 lines
3.1 KiB
Bash
Executable File
116 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
FAILED=0
|
||
BUILT=0
|
||
SKIPPED=0
|
||
FAILED_PLUGINS=""
|
||
|
||
report() {
|
||
if [ "$2" -eq 0 ]; then
|
||
echo " ✅ $1"
|
||
else
|
||
echo " ❌ $1"
|
||
FAILED=1
|
||
fi
|
||
}
|
||
|
||
ensure_npm_deps() {
|
||
local dir="$1"
|
||
if [ ! -f "$dir/package.json" ]; then
|
||
return 1
|
||
fi
|
||
if [ ! -d "$dir/node_modules" ]; then
|
||
if [ -f "$dir/package-lock.json" ]; then
|
||
(cd "$dir" && npm ci --no-audit --no-fund)
|
||
else
|
||
(cd "$dir" && npm install --no-audit --no-fund)
|
||
fi
|
||
report "npm install in $(basename "$dir")" $?
|
||
fi
|
||
return 0
|
||
}
|
||
|
||
echo "=== verstak-official-plugins build ==="
|
||
|
||
# ── Dependency checks ──
|
||
echo "[deps]"
|
||
HAS_DEPS=1
|
||
if ! command -v node &>/dev/null; then echo " ❌ node: not found"; HAS_DEPS=0; else echo " ✅ node $(node --version)"; fi
|
||
if ! command -v npm &>/dev/null; then echo " ❌ npm: not found"; HAS_DEPS=0; fi
|
||
if ! command -v go &>/dev/null; then echo " ❌ go: not found"; HAS_DEPS=0; else echo " ✅ go $(go version | grep -oP 'go\S+')"; fi
|
||
if [ "$HAS_DEPS" -eq 0 ]; then
|
||
echo " ⚠️ some deps missing — will skip matching plugin parts"
|
||
fi
|
||
|
||
for plugin_dir in "$ROOT"/plugins/*/; do
|
||
[ -d "$plugin_dir" ] || continue
|
||
plugin_name="$(basename "$plugin_dir")"
|
||
echo ""
|
||
echo "--- [$plugin_name] ---"
|
||
|
||
# Validate plugin.json
|
||
if [ ! -f "$plugin_dir/plugin.json" ]; then
|
||
echo " ❌ plugin.json not found"
|
||
FAILED=1
|
||
FAILED_PLUGINS="$FAILED_PLUGINS $plugin_name"
|
||
continue
|
||
fi
|
||
if command -v python3 &>/dev/null; then
|
||
if python3 -c "import json; json.load(open('$plugin_dir/plugin.json'))" 2>/dev/null; then
|
||
echo " ✅ plugin.json: valid JSON"
|
||
else
|
||
echo " ❌ plugin.json: invalid JSON"
|
||
FAILED=1
|
||
FAILED_PLUGINS="$FAILED_PLUGINS $plugin_name"
|
||
continue
|
||
fi
|
||
else
|
||
echo " ℹ️ python3 not available — skipping JSON validation"
|
||
fi
|
||
|
||
# Frontend build
|
||
if [ -f "$plugin_dir/frontend/package.json" ]; then
|
||
echo " → frontend"
|
||
if command -v npm &>/dev/null; then
|
||
ensure_npm_deps "$plugin_dir/frontend"
|
||
(cd "$plugin_dir/frontend" && npm run build)
|
||
report "frontend build" $?
|
||
BUILT=1
|
||
else
|
||
echo " ⚠️ npm not available — skipping frontend"
|
||
fi
|
||
else
|
||
echo " ℹ️ no frontend/package.json — skipping frontend"
|
||
fi
|
||
|
||
# Backend build (Go)
|
||
if [ -f "$plugin_dir/backend/go.mod" ] || [ -f "$plugin_dir/backend/main.go" ]; then
|
||
echo " → backend"
|
||
if command -v go &>/dev/null; then
|
||
(cd "$plugin_dir/backend" && go mod download 2>/dev/null || true)
|
||
(cd "$plugin_dir/backend" && go build ./...)
|
||
report "backend go build" $?
|
||
BUILT=1
|
||
else
|
||
echo " ⚠️ go not available — skipping backend"
|
||
fi
|
||
else
|
||
echo " ℹ️ no backend/ — skipping backend"
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
echo "=== summary ==="
|
||
echo " plugins found: $(ls -d "$ROOT"/plugins/*/ 2>/dev/null | wc -l)"
|
||
if [ -n "$FAILED_PLUGINS" ]; then
|
||
echo " failed: $FAILED_PLUGINS"
|
||
fi
|
||
if [ "$FAILED" -eq 0 ]; then
|
||
echo "✅ build passed"
|
||
else
|
||
echo "❌ build failed"
|
||
fi
|
||
exit "$FAILED"
|