222 lines
6.3 KiB
Bash
Executable File
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 "$@" |