mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
182 lines
No EOL
5.5 KiB
Bash
Executable file
182 lines
No EOL
5.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# =============================================================================
|
|
# VibeTunnel Build Cleanup Script
|
|
# =============================================================================
|
|
#
|
|
# This script cleans up build artifacts and temporary files to free up disk space.
|
|
#
|
|
# USAGE:
|
|
# ./scripts/clean.sh [options]
|
|
#
|
|
# OPTIONS:
|
|
# --all Clean everything including release DMGs
|
|
# --keep-dmg Keep release DMG files (default)
|
|
# --dry-run Show what would be deleted without actually deleting
|
|
#
|
|
# FEATURES:
|
|
# - Removes build directories and DerivedData
|
|
# - Cleans temporary files and caches
|
|
# - Preserves release DMGs by default
|
|
# - Shows disk space freed
|
|
#
|
|
# =============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
# Source common functions
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
[[ -f "$SCRIPT_DIR/common.sh" ]] && source "$SCRIPT_DIR/common.sh" || true
|
|
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# Parse arguments
|
|
CLEAN_ALL=false
|
|
KEEP_DMG=true
|
|
DRY_RUN=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--all)
|
|
CLEAN_ALL=true
|
|
KEEP_DMG=false
|
|
shift
|
|
;;
|
|
--keep-dmg)
|
|
KEEP_DMG=true
|
|
shift
|
|
;;
|
|
--dry-run)
|
|
DRY_RUN=true
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Usage: $0 [--all] [--keep-dmg] [--dry-run]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Function to get directory size
|
|
get_size() {
|
|
local path="$1"
|
|
if [[ -d "$path" ]]; then
|
|
du -sh "$path" 2>/dev/null | awk '{print $1}'
|
|
else
|
|
echo "0"
|
|
fi
|
|
}
|
|
|
|
# Function to remove with dry-run support
|
|
remove_item() {
|
|
local item="$1"
|
|
local description="${2:-$item}"
|
|
|
|
if [[ -e "$item" ]]; then
|
|
local size=$(get_size "$item")
|
|
if [[ "$DRY_RUN" == "true" ]]; then
|
|
print_info "[DRY RUN] Would remove $description ($size)"
|
|
else
|
|
print_info "Removing $description ($size)..."
|
|
rm -rf "$item"
|
|
print_success "Removed $description"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
print_info "Starting cleanup..."
|
|
[[ "$DRY_RUN" == "true" ]] && print_warning "DRY RUN MODE - Nothing will be deleted"
|
|
|
|
# Get initial disk usage
|
|
INITIAL_SIZE=$(du -sh . 2>/dev/null | awk '{print $1}')
|
|
|
|
# Clean build directories
|
|
remove_item "build/Build" "Xcode build artifacts"
|
|
remove_item "build/ModuleCache" "Module cache"
|
|
remove_item "build/SourcePackages" "Source packages"
|
|
remove_item "build/dmg-temp" "DMG temporary files"
|
|
remove_item "DerivedData" "DerivedData"
|
|
|
|
# Clean Go build artifacts
|
|
if [[ "$CLEAN_ALL" == "true" ]]; then
|
|
remove_item "linux/build" "Go build artifacts"
|
|
else
|
|
# Keep the release binaries but clean intermediate files
|
|
find linux/build -type f -name "*.a" -delete 2>/dev/null || true
|
|
find linux/build -type f -name "*.o" -delete 2>/dev/null || true
|
|
[[ "$DRY_RUN" == "false" ]] && print_success "Cleaned Go intermediate files"
|
|
fi
|
|
|
|
# Clean SPM build artifacts
|
|
remove_item ".build" "Swift Package Manager build"
|
|
|
|
# Clean user-specific Xcode DerivedData
|
|
XCODE_DERIVED_DATA="$HOME/Library/Developer/Xcode/DerivedData"
|
|
if [[ -d "$XCODE_DERIVED_DATA" ]]; then
|
|
for dir in "$XCODE_DERIVED_DATA"/VibeTunnel-*; do
|
|
if [[ -d "$dir" ]]; then
|
|
remove_item "$dir" "Xcode DerivedData for VibeTunnel"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Clean temporary files
|
|
find . -name ".DS_Store" -delete 2>/dev/null || true
|
|
find . -name "*.swp" -delete 2>/dev/null || true
|
|
find . -name "*~" -delete 2>/dev/null || true
|
|
find . -name "*.tmp" -delete 2>/dev/null || true
|
|
[[ "$DRY_RUN" == "false" ]] && print_success "Cleaned temporary files"
|
|
|
|
# Clean old DMGs (keep latest)
|
|
if [[ "$KEEP_DMG" == "false" ]]; then
|
|
remove_item "build/*.dmg" "All DMG files"
|
|
else
|
|
# Keep only the latest DMG
|
|
DMG_COUNT=$(ls -1 build/*.dmg 2>/dev/null | wc -l | tr -d ' ')
|
|
if [[ $DMG_COUNT -gt 1 ]]; then
|
|
print_info "Keeping latest DMG, removing older ones..."
|
|
ls -t build/*.dmg | tail -n +2 | while read dmg; do
|
|
remove_item "$dmg" "Old DMG: $(basename "$dmg")"
|
|
done
|
|
fi
|
|
fi
|
|
|
|
# Clean node_modules if requested
|
|
if [[ "$CLEAN_ALL" == "true" ]]; then
|
|
remove_item "web/node_modules" "Node.js dependencies"
|
|
remove_item "web/.next" "Next.js build cache"
|
|
fi
|
|
|
|
# Clean web build artifacts (always clean these)
|
|
if [[ -d "$PROJECT_ROOT/../web" ]]; then
|
|
remove_item "$PROJECT_ROOT/../web/native" "Web native executables"
|
|
remove_item "$PROJECT_ROOT/../web/dist" "Web dist directory"
|
|
remove_item "$PROJECT_ROOT/../web/public/bundle" "Web bundle directory"
|
|
remove_item "$PROJECT_ROOT/../web/public/output.css" "Web CSS output"
|
|
remove_item "$PROJECT_ROOT/../web/build" "Web build directory"
|
|
remove_item "$PROJECT_ROOT/../web/.node-builds" "Custom Node.js builds"
|
|
fi
|
|
|
|
# Clean Python caches
|
|
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
|
|
find . -type f -name "*.pyc" -delete 2>/dev/null || true
|
|
[[ "$DRY_RUN" == "false" ]] && print_success "Cleaned Python caches"
|
|
|
|
# Get final disk usage
|
|
FINAL_SIZE=$(du -sh . 2>/dev/null | awk '{print $1}')
|
|
|
|
print_success "Cleanup complete!"
|
|
print_info "Disk usage: $INITIAL_SIZE → $FINAL_SIZE"
|
|
|
|
# Suggest additional cleanups if not using --all
|
|
if [[ "$CLEAN_ALL" == "false" ]]; then
|
|
echo ""
|
|
print_info "For more aggressive cleanup, use: $0 --all"
|
|
print_info "This will also remove:"
|
|
print_info " - Release DMG files"
|
|
print_info " - Node.js dependencies"
|
|
print_info " - Rust target directory"
|
|
fi |