stock-bot/scripts/clean.sh

254 lines
9.1 KiB
Bash
Executable file

#!/bin/bash
# Clean script for Stock Bot Trading Platform
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
GRAY='\033[0;37m'
NC='\033[0m' # No Color
# Default options
MODULES=false
DIST=false
CACHE=false
TSBUILDINFO=false
ALL=false
FRESH=false
FORCE=false
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
--modules|-m)
MODULES=true
shift
;;
--dist|-d)
DIST=true
shift
;;
--cache|-c)
CACHE=true
shift
;;
--tsbuildinfo|-t)
TSBUILDINFO=true
shift
;;
--all|-a)
ALL=true
shift
;;
--fresh|-f)
FRESH=true
shift
;;
--force)
FORCE=true
shift
;;
--help|-h)
echo "Usage: $0 [options]"
echo " --modules, -m Remove node_modules directories"
echo " --dist, -d Remove dist directories and build caches"
echo " --cache, -c Remove cache directories"
echo " --tsbuildinfo, -t Remove TypeScript build info files"
echo " --all, -a Remove everything (destructive)"
echo " --fresh, -f Remove everything and reinstall dependencies"
echo " --force Skip confirmation prompts"
echo " --help, -h Show this help message"
exit 0
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
remove_directories_by_name() {
local name="$1"
local description="$2"
echo -e "${BLUE}Removing $description...${NC}"
# Find and remove directories
found_dirs=$(find . -name "$name" -type d 2>/dev/null)
if [ -n "$found_dirs" ]; then
count=$(echo "$found_dirs" | wc -l)
echo -e "${GRAY}Found $count $description to remove${NC}"
echo "$found_dirs" | while read -r dir; do
if [ -d "$dir" ]; then
rm -rf "$dir" 2>/dev/null
echo -e "${GRAY} Removed: $dir${NC}"
fi
done
else
echo -e "${GRAY}No $description found${NC}"
fi
}
remove_files_by_pattern() {
local pattern="$1"
local description="$2"
echo -e "${BLUE}Removing $description...${NC}"
# Find and remove files
found_files=$(find . -name "$pattern" -type f 2>/dev/null)
if [ -n "$found_files" ]; then
count=$(echo "$found_files" | wc -l)
echo -e "${GRAY}Found $count $description to remove${NC}"
echo "$found_files" | while read -r file; do
if [ -f "$file" ]; then
rm -f "$file" 2>/dev/null
echo -e "${GRAY} Removed: $file${NC}"
fi
done
else
echo -e "${GRAY}No $description found${NC}"
fi
}
echo -e "${YELLOW}Starting cleanup...${NC}"
if [ "$ALL" = true ] || [ "$FRESH" = true ]; then
if [ "$FORCE" != true ]; then
echo -e "${RED}WARNING: This will remove ALL build artifacts, caches, dependencies, and temporary files!${NC}"
echo -e "${YELLOW}This includes: node_modules, dist, all caches, logs, databases, and lock files${NC}"
read -p "Are you sure you want to continue? (y/N): " confirmation
if [[ "$confirmation" != "y" && "$confirmation" != "Y" ]]; then
echo -e "${YELLOW}Operation cancelled.${NC}"
exit 0
fi
fi
echo -e "${RED}=== NUCLEAR CLEAN: Removing EVERYTHING ===${NC}"
# Dependencies and packages
remove_directories_by_name "node_modules" "node_modules directories"
# Build outputs
remove_directories_by_name "dist" "dist directories"
remove_directories_by_name "build" "build directories"
remove_directories_by_name "lib" "lib directories"
remove_directories_by_name "out" "out directories"
remove_directories_by_name ".out" "build output directories"
# Cache directories
remove_directories_by_name ".turbo" "Turborepo cache directories"
remove_directories_by_name ".next" "Next.js cache directories"
remove_directories_by_name ".parcel-cache" "Parcel cache directories"
remove_directories_by_name ".angular" "Angular CLI cache directories"
remove_directories_by_name ".nuxt" "Nuxt.js cache directories"
remove_directories_by_name ".vite" "Vite cache directories"
remove_directories_by_name ".webpack" "Webpack cache directories"
remove_directories_by_name ".rollup.cache" "Rollup cache directories"
# Test and coverage
remove_directories_by_name "coverage" "test coverage directories"
remove_directories_by_name ".nyc_output" "NYC coverage directories"
remove_directories_by_name ".jest" "Jest cache directories"
remove_directories_by_name ".vitest" "Vitest cache directories"
# Storybook
remove_directories_by_name ".storybook-out" "Storybook build directories"
remove_directories_by_name "storybook-static" "Storybook static directories"
# Temporary and log directories
remove_directories_by_name "tmp" "temporary directories"
remove_directories_by_name "temp" "temp directories"
remove_directories_by_name ".tmp" "hidden temp directories"
remove_directories_by_name "logs" "log directories"
remove_directories_by_name ".logs" "hidden log directories"
# Project specific (from .gitignore)
remove_directories_by_name ".data" "data directories"
remove_directories_by_name ".backtest-results" "backtest result directories"
remove_directories_by_name ".old" "old backup directories"
remove_directories_by_name ".mongo" "MongoDB data directories"
remove_directories_by_name ".chat" "chat directories"
echo -e "${BLUE}Removing lock files...${NC}"
rm -f bun.lockb package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null
find . -name "bun.lockb" -type f -delete 2>/dev/null
find . -name "package-lock.json" -type f -delete 2>/dev/null
find . -name "yarn.lock" -type f -delete 2>/dev/null
find . -name "pnpm-lock.yaml" -type f -delete 2>/dev/null
# TypeScript and build files
remove_files_by_pattern "*.tsbuildinfo" "TypeScript build info files"
remove_files_by_pattern ".eslintcache" "ESLint cache files"
remove_files_by_pattern ".stylelintcache" "Stylelint cache files"
remove_files_by_pattern ".prettiercache" "Prettier cache files"
# Database files
remove_files_by_pattern "*.db" "database files"
remove_files_by_pattern "*.sqlite" "SQLite database files"
remove_files_by_pattern "*.sqlite3" "SQLite3 database files"
# Log files
remove_files_by_pattern "*.log" "log files"
remove_files_by_pattern "npm-debug.log*" "npm debug logs"
remove_files_by_pattern "yarn-debug.log*" "yarn debug logs"
remove_files_by_pattern "yarn-error.log*" "yarn error logs"
remove_files_by_pattern "lerna-debug.log*" "lerna debug logs"
# OS generated files
remove_files_by_pattern ".DS_Store" "macOS .DS_Store files"
remove_files_by_pattern "Thumbs.db" "Windows thumbnail files"
remove_files_by_pattern "ehthumbs.db" "Windows thumbnail cache files"
remove_files_by_pattern "Desktop.ini" "Windows desktop files"
echo -e "${RED}=== NUCLEAR CLEAN COMPLETE ===${NC}"
echo -e "${BLUE}Cleanup complete - no need for turbo clean${NC}"
elif [ "$MODULES" = true ]; then
remove_directories_by_name "node_modules" "node_modules directories"
echo -e "${BLUE}Removing lock files...${NC}"
rm -f bun.lockb 2>/dev/null
find . -name "bun.lockb" -type f -delete 2>/dev/null
elif [ "$DIST" = true ]; then
remove_directories_by_name "dist" "dist directories"
remove_directories_by_name ".turbo" "Turborepo cache directories"
remove_directories_by_name ".next" "Next.js cache directories"
remove_directories_by_name ".parcel-cache" "Parcel cache directories"
remove_directories_by_name ".angular" "Angular CLI cache directories"
remove_files_by_pattern "*.tsbuildinfo" "TypeScript build info files"
remove_files_by_pattern ".eslintcache" "ESLint cache files"
elif [ "$CACHE" = true ]; then
remove_directories_by_name ".turbo" "Turborepo cache directories"
remove_directories_by_name ".next" "Next.js cache directories"
remove_directories_by_name ".parcel-cache" "Parcel cache directories"
remove_directories_by_name ".angular" "Angular CLI cache directories"
remove_directories_by_name "coverage" "test coverage directories"
remove_directories_by_name ".nyc_output" "NYC coverage directories"
remove_files_by_pattern ".eslintcache" "ESLint cache files"
elif [ "$TSBUILDINFO" = true ]; then
remove_files_by_pattern "*.tsbuildinfo" "TypeScript build info files"
else
echo -e "${BLUE}Running turbo clean...${NC}"
# Only run turbo clean for the default case
turbo run clean
fi
if [ "$FRESH" = true ]; then
echo -e "${GREEN}Installing dependencies...${NC}"
bun install
fi
echo -e "${GREEN}Cleanup complete!${NC}"