Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 94 additions & 2 deletions ci/deploy-k8s-aws/scripts/cleanup-orphaned.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@
# Orphaned resources are those that:
# - Have the label 'managed-by=github-action'
# - Do NOT have corresponding services in docker-compose.yml
# - Are NOT in the exclusion list (special deployments managed separately)
#
# Excluded deployments:
# - uni-resolver-frontend: Web UI deployed separately, not in docker-compose.yml
#
# The script removes:
# - Orphaned Deployments
# - Orphaned Services
# - Orphaned Deployments (not in docker-compose.yml and not excluded)
# - Orphaned Services (not in docker-compose.yml AND no matching deployment)
# - Service-specific ConfigMaps (not the global app-config)
#
# Prerequisites:
Expand Down Expand Up @@ -41,6 +45,10 @@ echo "===================================================================="
echo "Checking for orphaned deployments in namespace: $NAMESPACE"
echo "===================================================================="

# Deployments that are not in docker-compose.yml but should be kept
# These are special deployments managed separately
EXCLUDED_DEPLOYMENTS="uni-resolver-frontend"

# Get all deployments managed by this GitHub Action
kubectl get deployments -n "$NAMESPACE" -l managed-by=github-action -o json 2>/dev/null | \
jq -r '.items[].metadata.name' > managed_deployments.txt || touch managed_deployments.txt
Expand Down Expand Up @@ -69,6 +77,13 @@ orphans_found=0

# Find and remove orphaned deployments
while read -r deployment; do
# Check if this deployment is in the exclusion list
if echo "$EXCLUDED_DEPLOYMENTS" | grep -qw "$deployment"; then
echo ""
echo "ℹ Skipping deployment: $deployment (excluded from cleanup)"
continue
fi

# Check if this deployment exists in docker-compose.yml
if ! grep -q "^${deployment}$" compose_services.txt; then
echo ""
Expand Down Expand Up @@ -113,3 +128,80 @@ else
echo "✓ Cleanup completed: $orphans_found orphaned deployment(s) removed"
fi
echo "===================================================================="

echo ""
echo "===================================================================="
echo "Checking for orphaned services in namespace: $NAMESPACE"
echo "===================================================================="

# Get all services managed by this GitHub Action
kubectl get services -n "$NAMESPACE" -l managed-by=github-action -o json 2>/dev/null | \
jq -r '.items[].metadata.name' > managed_services.txt || touch managed_services.txt

# Check if there are any managed services
if [ ! -s managed_services.txt ]; then
echo "No managed services found in namespace"
echo "===================================================================="
exit 0
fi

echo "Managed services in cluster:"
cat managed_services.txt

echo ""
echo "Services in docker-compose.yml:"
cat compose_services.txt

echo ""
echo "Comparing services with docker-compose.yml and deployments..."

# Track orphaned services
orphaned_services=0

# Find and remove orphaned services
while read -r service; do
# Check if this service is in the exclusion list
if echo "$EXCLUDED_DEPLOYMENTS" | grep -qw "$service"; then
echo ""
echo "ℹ Skipping service: $service (excluded from cleanup)"
continue
fi

# Check if service exists in docker-compose.yml OR has a matching deployment
service_in_compose=false
deployment_exists=false

if grep -q "^${service}$" compose_services.txt; then
service_in_compose=true
fi

if kubectl get deployment "$service" -n "$NAMESPACE" &>/dev/null; then
deployment_exists=true
fi

# Service is orphaned if it's not in compose AND has no matching deployment
if [ "$service_in_compose" = false ] && [ "$deployment_exists" = false ]; then
echo ""
echo "⚠ Found orphaned service: $service"
echo " This service is not defined in docker-compose.yml and has no matching deployment"
echo " Removing service..."

orphaned_services=$((orphaned_services + 1))

if kubectl delete service "$service" -n "$NAMESPACE" --ignore-not-found=true; then
echo " ✓ Service '$service' deleted"
else
echo " ✗ Failed to delete service '$service'"
fi
fi
done < managed_services.txt

echo ""
echo "===================================================================="
if [ $orphaned_services -eq 0 ]; then
echo "✓ No orphaned services found"
echo " All managed services match docker-compose.yml or have deployments"
else
echo "✓ Cleanup completed: $orphaned_services orphaned service(s) removed"
fi
echo "===================================================================="
170 changes: 170 additions & 0 deletions ci/deploy-k8s-aws/scripts/deploy-frontend.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
#!/bin/bash

################################################################################
# Deploy Universal Resolver Frontend
#
# This script deploys the uni-resolver-frontend application which provides
# the web UI for the Universal Resolver. This is separate from the services
# defined in docker-compose.yml.
#
# Components deployed:
# - ConfigMap: uni-resolver-frontend (contains backend URL)
# - Deployment: uni-resolver-frontend (web UI container)
# - Service: uni-resolver-frontend (NodePort service)
#
# Prerequisites:
# - kubectl must be configured and authenticated
# - NAMESPACE environment variable must be set
#
# Usage:
# NAMESPACE=uni-resolver ./deploy-frontend.sh
################################################################################

set -e

# Validate prerequisites
if [ -z "$NAMESPACE" ]; then
echo "Error: NAMESPACE environment variable is not set"
exit 1
fi

# Configuration
BACKEND_URL="https://dev.uniresolver.io/"

echo "===================================================================="
echo "Deploying Universal Resolver Frontend"
echo "===================================================================="
echo ""

################################################################################
# Step 1: Deploy ConfigMap
################################################################################

echo "Step 1: Creating/updating ConfigMap..."

cat > configmap-uni-resolver-frontend.yaml << EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: uni-resolver-frontend
namespace: ${NAMESPACE}
labels:
app: uni-resolver-frontend
managed-by: github-action
data:
backend_url: ${BACKEND_URL}
EOF

if kubectl apply -f configmap-uni-resolver-frontend.yaml; then
echo "✓ ConfigMap created/updated"
else
echo "✗ Failed to create ConfigMap"
exit 1
fi

echo ""

################################################################################
# Step 2: Deploy Frontend Application
################################################################################

echo "Step 2: Creating/updating Deployment and Service..."

cat > deployment-uni-resolver-frontend.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: uni-resolver-frontend
namespace: ${NAMESPACE}
labels:
app: uni-resolver-frontend
type: frontend
managed-by: github-action
spec:
replicas: 1
selector:
matchLabels:
app: uni-resolver-frontend
template:
metadata:
labels:
app: uni-resolver-frontend
spec:
containers:
- name: uni-resolver-frontend
image: universalresolver/universal-resolver-frontend
imagePullPolicy: Always
ports:
- containerPort: 7081
env:
- name: BACKEND_URL
valueFrom:
configMapKeyRef:
name: uni-resolver-frontend
key: backend_url
---
apiVersion: v1
kind: Service
metadata:
name: uni-resolver-frontend
namespace: ${NAMESPACE}
labels:
app: uni-resolver-frontend
managed-by: github-action
spec:
type: NodePort
selector:
app: uni-resolver-frontend
ports:
- protocol: TCP
port: 7081
targetPort: 7081
EOF

if kubectl apply -f deployment-uni-resolver-frontend.yaml; then
echo "✓ Deployment and Service created/updated"
else
echo "✗ Failed to create Deployment and Service"
exit 1
fi

echo ""

################################################################################
# Step 3: Wait for Deployment to be Ready
################################################################################

echo "Step 3: Waiting for deployment to become ready..."

if kubectl rollout status deployment/uni-resolver-frontend -n "$NAMESPACE" --timeout=300s; then
echo "✓ Frontend deployment is ready"
else
echo "⚠ Frontend deployment rollout timed out"
echo " Continuing with deployment process..."
fi

echo ""

################################################################################
# Summary
################################################################################

echo "===================================================================="
echo "Frontend Deployment Summary"
echo "===================================================================="
echo ""

# Show deployment status
echo "Deployment:"
kubectl get deployment uni-resolver-frontend -n "$NAMESPACE" -o wide

echo ""
echo "Service:"
kubectl get service uni-resolver-frontend -n "$NAMESPACE" -o wide

echo ""
echo "Pods:"
kubectl get pods -n "$NAMESPACE" -l app=uni-resolver-frontend -o wide

echo ""
echo "✓ Frontend deployment complete"
Loading