160 lines
4.9 KiB
Bash
Executable file
160 lines
4.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Build verification 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
|
|
VERBOSE=false
|
|
|
|
# Parse command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--verbose|-v)
|
|
VERBOSE=true
|
|
shift
|
|
;;
|
|
--help|-h)
|
|
echo "Usage: $0 [--verbose]"
|
|
echo " --verbose, -v Show verbose output"
|
|
echo " --help, -h Show this help message"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Use --help for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo -e "${GREEN}=== Verifying Build Health ===${NC}"
|
|
|
|
errors=()
|
|
warnings=()
|
|
|
|
# Check for common build issues
|
|
echo -e "${YELLOW}Checking for common build issues...${NC}"
|
|
|
|
# Check for mismatched .d.ts files in source directories
|
|
echo -e "${BLUE}Checking for .d.ts files in source directories...${NC}"
|
|
source_dts_files=$(find ./libs/*/src -name "*.d.ts" -type f 2>/dev/null)
|
|
if [ -n "$source_dts_files" ]; then
|
|
warnings+=("Found .d.ts files in source directories:")
|
|
while IFS= read -r file; do
|
|
warnings+=(" - $file")
|
|
done <<< "$source_dts_files"
|
|
fi
|
|
|
|
# Check for missing dist directories after build
|
|
echo -e "${BLUE}Checking for missing dist directories...${NC}"
|
|
libraries=("types" "config" "logger" "utils" "cache" "http")
|
|
for lib in "${libraries[@]}"; do
|
|
dist_path="libs/$lib/dist"
|
|
if [ ! -d "$dist_path" ]; then
|
|
errors+=("Missing dist directory for $lib")
|
|
else
|
|
index_file="$dist_path/index.js"
|
|
if [ ! -f "$index_file" ]; then
|
|
errors+=("Missing index.js in dist for $lib")
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Check for TypeScript compilation errors
|
|
echo -e "${BLUE}Checking for TypeScript compilation errors...${NC}"
|
|
tsc_errors=$(find . -name "*.tsbuildinfo" -exec grep -l "error" {} \; 2>/dev/null)
|
|
if [ -n "$tsc_errors" ]; then
|
|
errors+=("TypeScript compilation errors found in build info files")
|
|
if [ "$VERBOSE" = true ]; then
|
|
while IFS= read -r file; do
|
|
errors+=(" - $file")
|
|
done <<< "$tsc_errors"
|
|
fi
|
|
fi
|
|
|
|
# Check for large build files (potential issues)
|
|
echo -e "${BLUE}Checking for unusually large build files...${NC}"
|
|
large_files=$(find ./libs/*/dist -name "*.js" -size +1M 2>/dev/null)
|
|
if [ -n "$large_files" ]; then
|
|
warnings+=("Found unusually large build files (>1MB):")
|
|
while IFS= read -r file; do
|
|
size=$(stat -c%s "$file" 2>/dev/null || stat -f%z "$file" 2>/dev/null)
|
|
size_mb=$(echo "scale=2; $size / 1024 / 1024" | bc 2>/dev/null || echo "unknown")
|
|
warnings+=(" - $file (${size_mb}MB)")
|
|
done <<< "$large_files"
|
|
fi
|
|
|
|
# Check for circular dependencies (basic check)
|
|
echo -e "${BLUE}Checking for potential circular dependencies...${NC}"
|
|
package_json_files=$(find ./libs -name "package.json" -type f)
|
|
while IFS= read -r pkg_file; do
|
|
lib_name=$(basename "$(dirname "$pkg_file")")
|
|
if [ -f "$pkg_file" ]; then
|
|
# Check if library depends on itself (basic check)
|
|
self_dep=$(grep -o "@stock-bot/$lib_name" "$pkg_file" 2>/dev/null)
|
|
if [ -n "$self_dep" ]; then
|
|
warnings+=("Potential circular dependency in $lib_name")
|
|
fi
|
|
fi
|
|
done <<< "$package_json_files"
|
|
|
|
# Check for missing package.json files
|
|
echo -e "${BLUE}Checking for missing package.json files...${NC}"
|
|
lib_dirs=$(find ./libs -maxdepth 1 -type d -name "*" ! -name "libs")
|
|
while IFS= read -r lib_dir; do
|
|
if [ -d "$lib_dir" ] && [ ! -f "$lib_dir/package.json" ]; then
|
|
lib_name=$(basename "$lib_dir")
|
|
errors+=("Missing package.json in $lib_name")
|
|
fi
|
|
done <<< "$lib_dirs"
|
|
|
|
# Check for environment variable dependencies
|
|
echo -e "${BLUE}Checking for hardcoded paths...${NC}"
|
|
hardcoded_paths=$(grep -r "g:\\repos\\stock-bot" ./libs 2>/dev/null || true)
|
|
if [ -n "$hardcoded_paths" ]; then
|
|
warnings+=("Found hardcoded Windows paths:")
|
|
while IFS= read -r line; do
|
|
warnings+=(" - $line")
|
|
done <<< "$hardcoded_paths"
|
|
fi
|
|
|
|
# Summary
|
|
echo ""
|
|
echo -e "${CYAN}=== Build Verification Summary ===${NC}"
|
|
|
|
if [ ${#errors[@]} -eq 0 ] && [ ${#warnings[@]} -eq 0 ]; then
|
|
echo -e "${GREEN}✅ Build verification passed - no issues found!${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
if [ ${#errors[@]} -gt 0 ]; then
|
|
echo -e "${RED}❌ Errors found (${#errors[@]}):${NC}"
|
|
for error in "${errors[@]}"; do
|
|
echo -e "${RED} $error${NC}"
|
|
done
|
|
fi
|
|
|
|
if [ ${#warnings[@]} -gt 0 ]; then
|
|
echo -e "${YELLOW}⚠️ Warnings found (${#warnings[@]}):${NC}"
|
|
for warning in "${warnings[@]}"; do
|
|
echo -e "${YELLOW} $warning${NC}"
|
|
done
|
|
fi
|
|
|
|
if [ ${#errors[@]} -gt 0 ]; then
|
|
echo ""
|
|
echo -e "${RED}Build verification failed due to errors.${NC}"
|
|
exit 1
|
|
else
|
|
echo ""
|
|
echo -e "${YELLOW}Build verification completed with warnings.${NC}"
|
|
exit 0
|
|
fi
|