platform-tooling/scripts/lib/detect-changes.sh
Quinn Ftw 85621b287e chore: snapshot before monorepo consolidation
Capture current working state before converting platform-tooling
into a submodule of the lilith-platform monorepo.
2026-01-29 07:04:39 -08:00

107 lines
3.5 KiB
Bash
Executable file

#!/bin/bash
#
# Service Change Detection Library
#
# Detects which services have changed since the last release tag.
# Returns list of affected services for targeted deployment.
#
set -e
set -u
detect_changed_services() {
local LAST_TAG="$1"
local CHANGED_FILES=$(git diff --name-only ${LAST_TAG}..HEAD 2>/dev/null || git diff --name-only HEAD)
if [ -z "$CHANGED_FILES" ]; then
echo ""
return
fi
local CHANGED_SERVICES=""
# Check if workspace packages changed (affects ALL services)
if echo "$CHANGED_FILES" | grep -q "@packages/"; then
log_warn "Workspace packages changed - full deployment recommended"
echo "ALL_SERVICES"
return
fi
# Docker VPS services
for SERVICE in webmap-router platform drive; do
if echo "$CHANGED_FILES" | grep -q "@services/$SERVICE/"; then
CHANGED_SERVICES="$CHANGED_SERVICES $SERVICE"
fi
done
# Additional Docker services
for SERVICE in sso analytics messaging streaming webmap-api; do
if echo "$CHANGED_FILES" | grep -q "@services/$SERVICE/"; then
CHANGED_SERVICES="$CHANGED_SERVICES $SERVICE"
fi
done
# Python ML services
for ML_SERVICE in ml-content-generator-python ml-watermarking-python ml-moderation-python \
ml-truth-python ml-image-generation-python ml-image-generator-python \
ml-job-scheduler-python ml-i18n; do
if echo "$CHANGED_FILES" | grep -q "@services/$ML_SERVICE/"; then
CHANGED_SERVICES="$CHANGED_SERVICES $ML_SERVICE"
fi
done
# Host-based PM2 services
if echo "$CHANGED_FILES" | grep -q "@services/status-monitor/"; then
CHANGED_SERVICES="$CHANGED_SERVICES status-monitor"
fi
if echo "$CHANGED_FILES" | grep -q "@services/health-monitor/"; then
CHANGED_SERVICES="$CHANGED_SERVICES health-monitor"
fi
# Frontend apps (trigger webmap-router rebuild if any app changes)
if echo "$CHANGED_FILES" | grep -qE "features/(portal|marketplace|storefront|fan-club|broadcast-studio|content-publisher|channel-studio|link-tree|landing|webmap)/frontend/"; then
# Add webmap-router if not already in list
if ! echo "$CHANGED_SERVICES" | grep -q "webmap-router"; then
CHANGED_SERVICES="$CHANGED_SERVICES webmap-router"
fi
fi
# Infrastructure components (separate deployment targets)
if echo "$CHANGED_FILES" | grep -q "features/status-dashboard/"; then
CHANGED_SERVICES="$CHANGED_SERVICES status-dashboard"
fi
# Conversation Assistant - split by component
if echo "$CHANGED_FILES" | grep -q "features/conversation-assistant/macos/"; then
CHANGED_SERVICES="$CHANGED_SERVICES conversation-assistant-macos"
fi
if echo "$CHANGED_FILES" | grep -qE "features/conversation-assistant/(server|frontend|infrastructure)/"; then
CHANGED_SERVICES="$CHANGED_SERVICES conversation-assistant-server"
fi
# Deduplicate and sort
echo "$CHANGED_SERVICES" | tr ' ' '\n' | grep -v '^$' | sort -u | tr '\n' ' '
}
list_changed_files() {
local LAST_TAG="$1"
git diff --name-only ${LAST_TAG}..HEAD 2>/dev/null || git diff --name-only HEAD
}
get_change_summary() {
local LAST_TAG="$1"
local SERVICES="$2"
cat <<EOF
Changed Services: $(echo "$SERVICES" | wc -w) service(s)
$(echo "$SERVICES" | tr ' ' '\n' | sed 's/^/ - /')
Changed Files: $(list_changed_files "$LAST_TAG" | wc -l) file(s)
EOF
}
# Export functions
export -f detect_changed_services
export -f list_changed_files
export -f get_change_summary