feat: Add DSS infrastructure, remove legacy admin-ui code
Some checks failed
DSS Project Analysis / dss-context-update (push) Has been cancelled
Some checks failed
DSS Project Analysis / dss-context-update (push) Has been cancelled
- Remove legacy admin-ui/js/ vanilla JS components - Add .dss/ directory with core tokens, skins, themes - Add Storybook configuration and generated stories - Add DSS management scripts (dss-services, dss-init, dss-setup, dss-reset) - Add MCP command definitions for DSS plugin - Add Figma sync architecture and scripts - Update pre-commit hooks with documentation validation - Fix JSON trailing commas in skin files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
311
scripts/dss-services.sh
Executable file
311
scripts/dss-services.sh
Executable file
@@ -0,0 +1,311 @@
|
||||
#!/bin/bash
|
||||
# DSS Services Manager
|
||||
# Start, stop, and manage all DSS development services
|
||||
#
|
||||
# Usage: scripts/dss-services.sh <action> [--service NAME]
|
||||
#
|
||||
# Actions:
|
||||
# start - Start all services (or specific service)
|
||||
# stop - Stop all services (or specific service)
|
||||
# status - Show status of all services
|
||||
# restart - Restart all services (or specific service)
|
||||
# logs - Show service logs
|
||||
|
||||
set -e
|
||||
|
||||
DSS_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$DSS_ROOT"
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Service configuration
|
||||
declare -A SERVICES=(
|
||||
["api"]="8000"
|
||||
["admin-ui"]="3456"
|
||||
["storybook"]="6006"
|
||||
)
|
||||
|
||||
declare -A SERVICE_CMDS=(
|
||||
["api"]="uvicorn apps.api.server:app --host 0.0.0.0 --port 8000 --reload"
|
||||
["admin-ui"]="npm run dev"
|
||||
["storybook"]="npm run storybook"
|
||||
)
|
||||
|
||||
declare -A SERVICE_DIRS=(
|
||||
["api"]="$DSS_ROOT"
|
||||
["admin-ui"]="$DSS_ROOT/admin-ui"
|
||||
["storybook"]="$DSS_ROOT/admin-ui"
|
||||
)
|
||||
|
||||
declare -A SERVICE_LOGS=(
|
||||
["api"]="/tmp/dss-api.log"
|
||||
["admin-ui"]="/tmp/dss-admin-ui.log"
|
||||
["storybook"]="/tmp/dss-storybook.log"
|
||||
)
|
||||
|
||||
# Logging
|
||||
log_info() { echo -e "${CYAN}[INFO]${NC} $1"; }
|
||||
log_ok() { echo -e "${GREEN}[OK]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
|
||||
# Check if port is in use
|
||||
is_port_active() {
|
||||
local port=$1
|
||||
lsof -i ":$port" &>/dev/null
|
||||
}
|
||||
|
||||
# Get PID using port
|
||||
get_port_pid() {
|
||||
local port=$1
|
||||
lsof -ti ":$port" 2>/dev/null | head -1
|
||||
}
|
||||
|
||||
# Start a single service
|
||||
start_service() {
|
||||
local service=$1
|
||||
local port=${SERVICES[$service]}
|
||||
local cmd=${SERVICE_CMDS[$service]}
|
||||
local dir=${SERVICE_DIRS[$service]}
|
||||
local log=${SERVICE_LOGS[$service]}
|
||||
|
||||
if is_port_active "$port"; then
|
||||
log_warn "$service already running on port $port"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "Starting $service on port $port..."
|
||||
|
||||
cd "$dir"
|
||||
|
||||
if [ "$service" = "api" ]; then
|
||||
# Activate venv for API server
|
||||
source "$DSS_ROOT/.venv/bin/activate"
|
||||
nohup $cmd > "$log" 2>&1 &
|
||||
else
|
||||
nohup $cmd > "$log" 2>&1 &
|
||||
fi
|
||||
|
||||
local pid=$!
|
||||
cd "$DSS_ROOT"
|
||||
|
||||
# Wait for service to start
|
||||
local max_wait=30
|
||||
local waited=0
|
||||
while [ $waited -lt $max_wait ]; do
|
||||
if is_port_active "$port"; then
|
||||
log_ok "$service started (PID: $(get_port_pid $port), port: $port)"
|
||||
return 0
|
||||
fi
|
||||
sleep 1
|
||||
((waited++))
|
||||
done
|
||||
|
||||
log_error "$service failed to start (check $log)"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Stop a single service
|
||||
stop_service() {
|
||||
local service=$1
|
||||
local port=${SERVICES[$service]}
|
||||
|
||||
if ! is_port_active "$port"; then
|
||||
log_info "$service not running"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local pid=$(get_port_pid "$port")
|
||||
log_info "Stopping $service (PID: $pid)..."
|
||||
|
||||
kill "$pid" 2>/dev/null || true
|
||||
sleep 1
|
||||
|
||||
# Force kill if still running
|
||||
if is_port_active "$port"; then
|
||||
kill -9 "$(get_port_pid $port)" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
log_ok "$service stopped"
|
||||
}
|
||||
|
||||
# Show status of all services
|
||||
show_status() {
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ DSS SERVICES STATUS ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
printf " %-12s %-8s %-8s %-30s\n" "SERVICE" "PORT" "STATUS" "URL"
|
||||
echo " ──────────────────────────────────────────────────────────────"
|
||||
|
||||
for service in api admin-ui storybook; do
|
||||
local port=${SERVICES[$service]}
|
||||
local status="STOPPED"
|
||||
local color=$RED
|
||||
local url="-"
|
||||
|
||||
if is_port_active "$port"; then
|
||||
status="RUNNING"
|
||||
color=$GREEN
|
||||
url="http://localhost:$port"
|
||||
fi
|
||||
|
||||
printf " %-12s %-8s ${color}%-8s${NC} %-30s\n" "$service" "$port" "$status" "$url"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo " Logs:"
|
||||
for service in api admin-ui storybook; do
|
||||
echo " $service: ${SERVICE_LOGS[$service]}"
|
||||
done
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Show logs for a service
|
||||
show_logs() {
|
||||
local service=$1
|
||||
local log=${SERVICE_LOGS[$service]}
|
||||
|
||||
if [ -z "$log" ]; then
|
||||
log_error "Unknown service: $service"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$log" ]; then
|
||||
log_warn "No log file found: $log"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "=== $service logs ($log) ==="
|
||||
tail -50 "$log"
|
||||
}
|
||||
|
||||
# Main command handling
|
||||
ACTION=${1:-status}
|
||||
SPECIFIC_SERVICE=""
|
||||
|
||||
# Parse arguments
|
||||
shift || true
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--service|-s)
|
||||
SPECIFIC_SERVICE="$2"
|
||||
shift 2
|
||||
;;
|
||||
api|admin-ui|storybook)
|
||||
SPECIFIC_SERVICE="$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case $ACTION in
|
||||
start)
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ STARTING DSS SERVICES ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
if [ -n "$SPECIFIC_SERVICE" ]; then
|
||||
start_service "$SPECIFIC_SERVICE"
|
||||
else
|
||||
for service in api admin-ui storybook; do
|
||||
start_service "$service"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
show_status
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ STOPPING DSS SERVICES ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
if [ -n "$SPECIFIC_SERVICE" ]; then
|
||||
stop_service "$SPECIFIC_SERVICE"
|
||||
else
|
||||
for service in api admin-ui storybook; do
|
||||
stop_service "$service"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
show_status
|
||||
;;
|
||||
|
||||
restart)
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ RESTARTING DSS SERVICES ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
if [ -n "$SPECIFIC_SERVICE" ]; then
|
||||
stop_service "$SPECIFIC_SERVICE"
|
||||
sleep 1
|
||||
start_service "$SPECIFIC_SERVICE"
|
||||
else
|
||||
for service in api admin-ui storybook; do
|
||||
stop_service "$service"
|
||||
done
|
||||
sleep 2
|
||||
for service in api admin-ui storybook; do
|
||||
start_service "$service"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
show_status
|
||||
;;
|
||||
|
||||
status)
|
||||
show_status
|
||||
;;
|
||||
|
||||
logs)
|
||||
if [ -n "$SPECIFIC_SERVICE" ]; then
|
||||
show_logs "$SPECIFIC_SERVICE"
|
||||
else
|
||||
for service in api admin-ui storybook; do
|
||||
show_logs "$service"
|
||||
echo ""
|
||||
done
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "DSS Services Manager"
|
||||
echo ""
|
||||
echo "Usage: $0 <action> [--service NAME]"
|
||||
echo ""
|
||||
echo "Actions:"
|
||||
echo " start Start all services (or specific service)"
|
||||
echo " stop Stop all services (or specific service)"
|
||||
echo " status Show status of all services"
|
||||
echo " restart Restart all services (or specific service)"
|
||||
echo " logs Show service logs"
|
||||
echo ""
|
||||
echo "Services: api, admin-ui, storybook"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 start # Start all services"
|
||||
echo " $0 start --service api # Start only API server"
|
||||
echo " $0 stop storybook # Stop Storybook"
|
||||
echo " $0 logs admin-ui # Show admin-ui logs"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user