Files
cim_summary/cleanup_gcs.sh

222 lines
6.3 KiB
Bash
Executable File

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
PROJECT_ID="cim-summarizer"
UPLOADS_BUCKET="gs://cim-summarizer-uploads"
FIREBASE_UPLOADS_BUCKET="gs://gcf-v2-uploads-245796323861.us-central1.cloudfunctions.appspot.com"
FIREBASE_SOURCES_BUCKET="gs://gcf-v2-sources-245796323861-us-central1"
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Function to get storage size in human readable format
format_size() {
local bytes=$1
if [ $bytes -gt 1073741824 ]; then
echo "$(echo "scale=2; $bytes/1073741824" | bc) GB"
elif [ $bytes -gt 1048576 ]; then
echo "$(echo "scale=2; $bytes/1048576" | bc) MB"
elif [ $bytes -gt 1024 ]; then
echo "$(echo "scale=2; $bytes/1024" | bc) KB"
else
echo "${bytes} B"
fi
}
# Function to calculate total size of files
calculate_size() {
local bucket=$1
local size=$(gsutil ls -la "$bucket" | grep -E "TOTAL:" | awk '{print $2}' | head -1)
echo "${size:-0}"
}
# Function to show usage
show_usage() {
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -d, --dry-run Show what would be deleted without actually deleting"
echo " -f, --force Skip confirmation prompts"
echo " -h, --help Show this help message"
echo ""
echo "This script cleans up old files from GCS buckets:"
echo " - Removes test files from uploads bucket"
echo " - Removes old Firebase function deployments (keeps 2 most recent)"
echo " - Removes old Firebase function sources (keeps 1 most recent)"
echo " - Cleans up empty directories"
}
# Function to clean up test files
cleanup_test_files() {
print_status "Cleaning up test files..."
local test_files=$(gsutil ls "$UPLOADS_BUCKET/test-*.txt" 2>/dev/null || true)
if [ -n "$test_files" ]; then
if [ "$DRY_RUN" = true ]; then
echo "Would remove: $test_files"
else
gsutil rm $test_files
print_success "Removed test files"
fi
else
print_status "No test files found"
fi
}
# Function to clean up invalid files
cleanup_invalid_files() {
print_status "Cleaning up invalid files..."
local invalid_files=$(gsutil ls "$UPLOADS_BUCKET/uploads/staging-test-user/*.exe" 2>/dev/null || true)
if [ -n "$invalid_files" ]; then
if [ "$DRY_RUN" = true ]; then
echo "Would remove: $invalid_files"
else
gsutil rm $invalid_files
print_success "Removed invalid files"
fi
else
print_status "No invalid files found"
fi
}
# Function to clean up old Firebase function deployments
cleanup_firebase_deployments() {
print_status "Cleaning up old Firebase function deployments..."
local deployment_files=$(gsutil ls "$FIREBASE_UPLOADS_BUCKET/*.zip" 2>/dev/null | sort | head -n -2 || true)
if [ -n "$deployment_files" ]; then
if [ "$DRY_RUN" = true ]; then
echo "Would remove old deployment files:"
echo "$deployment_files"
else
echo "$deployment_files" | while read file; do
if [ -n "$file" ]; then
gsutil rm "$file"
fi
done
print_success "Removed old Firebase function deployments"
fi
else
print_status "No old deployment files found"
fi
}
# Function to clean up old Firebase function sources
cleanup_firebase_sources() {
print_status "Cleaning up old Firebase function sources..."
local source_files=$(gsutil ls "$FIREBASE_SOURCES_BUCKET/api/*.zip" 2>/dev/null | sort | head -n -1 || true)
if [ -n "$source_files" ]; then
if [ "$DRY_RUN" = true ]; then
echo "Would remove old source files:"
echo "$source_files"
else
echo "$source_files" | while read file; do
if [ -n "$file" ]; then
gsutil rm "$file"
fi
done
print_success "Removed old Firebase function sources"
fi
else
print_status "No old source files found"
fi
}
# Function to show storage summary
show_storage_summary() {
print_status "Current storage usage:"
local uploads_size=$(calculate_size "$UPLOADS_BUCKET")
local firebase_uploads_size=$(calculate_size "$FIREBASE_UPLOADS_BUCKET")
local firebase_sources_size=$(calculate_size "$FIREBASE_SOURCES_BUCKET/api")
echo "📁 Main Uploads: $(format_size $uploads_size)"
echo "📁 Firebase Function Uploads: $(format_size $firebase_uploads_size)"
echo "📁 Firebase Function Sources: $(format_size $firebase_sources_size)"
local total_size=$((uploads_size + firebase_uploads_size + firebase_sources_size))
echo "📊 Total Storage: $(format_size $total_size)"
}
# Main script
main() {
local dry_run=false
local force=false
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-d|--dry-run)
dry_run=true
shift
;;
-f|--force)
force=true
shift
;;
-h|--help)
show_usage
exit 0
;;
*)
print_error "Unknown option: $1"
show_usage
exit 1
;;
esac
done
DRY_RUN=$dry_run
print_status "Starting GCS cleanup process..."
if [ "$dry_run" = true ]; then
print_warning "DRY RUN MODE - No files will be deleted"
fi
# Show initial storage usage
show_storage_summary
# Perform cleanup
cleanup_test_files
cleanup_invalid_files
cleanup_firebase_deployments
cleanup_firebase_sources
# Show final storage usage
echo ""
show_storage_summary
if [ "$dry_run" = false ]; then
print_success "GCS cleanup completed successfully!"
else
print_warning "Dry run completed - no files were deleted"
fi
}
# Run main function with all arguments
main "$@"