fetch_ml/scripts/maintenance/cleanup.sh
Jeremie Fraeys 5a19358d00 Organize configs and scripts, create testing protocol
- Reorganize configs into environments/, workers/, deprecated/ folders
- Reorganize scripts into testing/, deployment/, maintenance/, benchmarks/ folders
- Add comprehensive testing guide documentation
- Add new Makefile targets: test-full, test-auth, test-status
- Update script paths in Makefile to match new organization
- Create testing protocol documentation
- Add cleanup status checking functionality

Testing framework now includes:
- Quick authentication tests (make test-auth)
- Full test suite runner (make test-full)
- Cleanup status monitoring (make test-status)
- Comprehensive documentation and troubleshooting guides
2025-12-06 13:08:15 -05:00

219 lines
5.6 KiB
Bash
Executable file

#!/bin/bash
# Self-cleaning script for fetch_ml Docker resources
# Usage: ./scripts/cleanup.sh [--dry-run] [--force] [--all]
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Default options
DRY_RUN=false
FORCE=false
ALL=false
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--dry-run)
DRY_RUN=true
shift
;;
--force)
FORCE=true
shift
;;
--all)
ALL=true
shift
;;
--help|-h)
echo "Usage: $0 [--dry-run] [--force] [--all]"
echo ""
echo "Options:"
echo " --dry-run Show what would be cleaned without actually doing it"
echo " --force Skip confirmation prompts"
echo " --all Clean everything including images"
echo ""
exit 0
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
# Helper functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Docker check
if ! command -v docker &> /dev/null; then
log_error "Docker is not installed or not in PATH"
exit 1
fi
# Check if Docker is running
if ! docker info &> /dev/null; then
log_error "Docker daemon is not running"
exit 1
fi
log_info "Starting cleanup of fetch_ml Docker resources..."
# Function to count resources
count_resources() {
local containers=$(docker ps -a --filter "name=ml-" --format "{{.Names}}" | wc -l)
local images=$(docker images --filter "reference=fetch_ml-*" --format "{{.Repository}}" | wc -l)
local networks=$(docker network ls --filter "name=ml-" --format "{{.Name}}" | wc -l)
local volumes=$(docker volume ls --filter "name=ml-" --format "{{.Name}}" | wc -l)
echo "Containers: $containers, Images: $images, Networks: $networks, Volumes: $volumes"
}
# Show current state
log_info "Current resources: $(count_resources)"
# Dry run mode
if [ "$DRY_RUN" = true ]; then
log_info "DRY RUN MODE - No actual cleanup will be performed"
echo ""
log_info "Containers that would be stopped and removed:"
docker ps -a --filter "name=ml-" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" || echo "No containers found"
echo ""
log_info "Images that would be removed:"
if [ "$ALL" = true ]; then
docker images --filter "reference=fetch_ml-*" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" || echo "No images found"
else
echo "Use --all to remove images"
fi
echo ""
log_info "Networks that would be removed:"
docker network ls --filter "name=ml-" --format "table {{.Name}}\t{{.Driver}}" || echo "No networks found"
echo ""
log_info "Volumes that would be removed:"
docker volume ls --filter "name=ml-" --format "table {{.Name}}\t{{.Driver}}" || echo "No volumes found"
exit 0
fi
# Confirmation prompt
if [ "$FORCE" = false ]; then
echo ""
read -p "This will stop and remove all fetch_ml containers. Continue? (y/N): " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "Cleanup cancelled"
exit 0
fi
fi
# Stop containers
log_info "Stopping containers..."
containers=$(docker ps -q --filter "name=ml-")
if [ -n "$containers" ]; then
if [ "$DRY_RUN" = false ]; then
echo "$containers" | xargs docker stop
log_success "Containers stopped"
fi
else
log_info "No running containers found"
fi
# Remove containers
log_info "Removing containers..."
containers=$(docker ps -aq --filter "name=ml-")
if [ -n "$containers" ]; then
if [ "$DRY_RUN" = false ]; then
echo "$containers" | xargs docker rm -f
log_success "Containers removed"
fi
else
log_info "No containers found"
fi
# Remove networks
log_info "Removing networks..."
networks=$(docker network ls -q --filter "name=ml-")
if [ -n "$networks" ]; then
if [ "$DRY_RUN" = false ]; then
echo "$networks" | xargs docker network rm
log_success "Networks removed"
fi
else
log_info "No networks found"
fi
# Remove volumes (with caution)
log_warning "Removing volumes (this will delete data)..."
if [ "$FORCE" = true ] || [ "$ALL" = true ]; then
volumes=$(docker volume ls -q --filter "name=ml-")
if [ -n "$volumes" ]; then
if [ "$DRY_RUN" = false ]; then
echo "$volumes" | xargs docker volume rm
log_success "Volumes removed"
fi
else
log_info "No volumes found"
fi
else
log_info "Skipping volumes (use --force or --all to remove them)"
fi
# Remove images if requested
if [ "$ALL" = true ]; then
log_info "Removing images..."
images=$(docker images -q --filter "reference=fetch_ml-*")
if [ -n "$images" ]; then
if [ "$DRY_RUN" = false ]; then
echo "$images" | xargs docker rmi -f
log_success "Images removed"
fi
else
log_info "No images found"
fi
else
log_info "Skipping images (use --all to remove them)"
fi
# General Docker cleanup
log_info "Running general Docker cleanup..."
if [ "$DRY_RUN" = false ]; then
docker system prune -f
log_success "General cleanup completed"
fi
# Show final state
log_info "Final resources: $(count_resources)"
# Space reclaimed
if [ "$DRY_RUN" = false ]; then
log_info "Docker system info:"
docker system df
fi
log_success "Cleanup completed!"