Files
unitforge/check-uv.sh
William Valentin 69f6fd1827 feat: integrate environment configuration into development workflow
- Auto-create .env file from template during setup-dev
- Add validate-config target to Makefile for configuration validation
- Update check-uv.sh to use environment variable for GitHub URL
- Provide helpful setup messages and next steps for developers
2025-09-14 15:57:50 -07:00

245 lines
7.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# UnitForge uv System Check
# Validates that uv is properly installed and working
set -e
# Load centralized color utility
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/scripts/colors.sh"
echo -e "${BLUE}╔══════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ UnitForge uv System Check ║${NC}"
echo -e "${BLUE}║ Validating uv Installation ║${NC}"
echo -e "${BLUE}╚══════════════════════════════════════════════╝${NC}"
echo ""
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to compare versions
version_ge() {
printf '%s\n%s\n' "$2" "$1" | sort -V -C
}
ERRORS=0
WARNINGS=0
echo -e "${CYAN}🔍 Checking system requirements...${NC}"
echo ""
# Check Python
if command_exists python3; then
PYTHON_VERSION=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
if python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)"; then
echo -e "${GREEN}✓ Python ${PYTHON_VERSION} found (>= 3.8 required)${NC}"
else
echo -e "${RED}✗ Python ${PYTHON_VERSION} found but 3.8+ required${NC}"
ERRORS=$((ERRORS + 1))
fi
else
echo -e "${RED}✗ Python 3 not found${NC}"
ERRORS=$((ERRORS + 1))
fi
# Check uv
if command_exists uv; then
UV_VERSION=$(uv --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "unknown")
echo -e "${GREEN}✓ uv ${UV_VERSION} found${NC}"
# Test uv functionality
echo -e "${CYAN} Testing uv functionality...${NC}"
# Create temporary directory for testing
TEMP_DIR=$(mktemp -d)
cd "$TEMP_DIR"
# Test uv venv creation
if uv venv test-env >/dev/null 2>&1; then
echo -e "${GREEN} ✓ uv venv creation works${NC}"
# Test package installation
if uv pip install --target ./test-env/lib/python*/site-packages click >/dev/null 2>&1; then
echo -e "${GREEN} ✓ uv pip installation works${NC}"
else
echo -e "${YELLOW} ⚠ uv pip installation test failed${NC}"
WARNINGS=$((WARNINGS + 1))
fi
else
echo -e "${YELLOW} ⚠ uv venv creation test failed${NC}"
WARNINGS=$((WARNINGS + 1))
fi
# Cleanup
cd - >/dev/null
rm -rf "$TEMP_DIR"
else
echo -e "${RED}✗ uv not found${NC}"
echo -e "${YELLOW} Install with: curl -LsSf https://astral.sh/uv/install.sh | sh${NC}"
ERRORS=$((ERRORS + 1))
fi
echo ""
# Check git (for pre-commit hooks)
if command_exists git; then
echo -e "${GREEN}✓ Git found${NC}"
else
echo -e "${YELLOW}⚠ Git not found (needed for pre-commit hooks)${NC}"
WARNINGS=$((WARNINGS + 1))
fi
# Check curl/wget (for installations)
if command_exists curl; then
echo -e "${GREEN}✓ curl found${NC}"
elif command_exists wget; then
echo -e "${GREEN}✓ wget found${NC}"
else
echo -e "${YELLOW}⚠ Neither curl nor wget found (may affect installations)${NC}"
WARNINGS=$((WARNINGS + 1))
fi
# Check Docker (optional)
if command_exists docker; then
DOCKER_VERSION=$(docker --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' || echo "unknown")
echo -e "${GREEN}✓ Docker ${DOCKER_VERSION} found (optional)${NC}"
else
echo -e "${YELLOW} Docker not found (optional for containerized development)${NC}"
fi
# Check make
if command_exists make; then
echo -e "${GREEN}✓ make found${NC}"
else
echo -e "${YELLOW}⚠ make not found (development commands will not work)${NC}"
WARNINGS=$((WARNINGS + 1))
fi
echo ""
echo -e "${CYAN}📋 UnitForge project checks...${NC}"
echo ""
# Check if we're in UnitForge directory
if [[ -f "pyproject.toml" && -f "unitforge-cli" ]]; then
echo -e "${GREEN}✓ UnitForge project directory detected${NC}"
# Check project structure
if [[ -d "backend" && -d "frontend" && -d "tests" ]]; then
echo -e "${GREEN}✓ Project structure is valid${NC}"
else
echo -e "${YELLOW}⚠ Some project directories missing${NC}"
WARNINGS=$((WARNINGS + 1))
fi
# Check if virtual environment exists
if [[ -d ".venv" ]]; then
success "Virtual environment is active"
# Check if it's activated
if [[ -n "${VIRTUAL_ENV}" ]]; then
success "Virtual environment activated"
else
echo -e "${YELLOW}⚠ Virtual environment not activated${NC}"
echo -e "${CYAN} Run: source .venv/bin/activate${NC}"
WARNINGS=$((WARNINGS + 1))
fi
else
echo -e "${YELLOW}⚠ Virtual environment not found${NC}"
echo -e "${CYAN} Run: make setup-dev${NC}"
WARNINGS=$((WARNINGS + 1))
fi
# Check CLI tool
if [[ -x "unitforge-cli" ]]; then
echo -e "${GREEN}✓ CLI tool is executable${NC}"
else
echo -e "${YELLOW}⚠ CLI tool not executable${NC}"
echo -e "${CYAN} Run: chmod +x unitforge-cli${NC}"
WARNINGS=$((WARNINGS + 1))
fi
else
echo -e "${YELLOW}⚠ Not in UnitForge project directory${NC}"
echo -e "${CYAN} Navigate to UnitForge project root${NC}"
WARNINGS=$((WARNINGS + 1))
fi
echo ""
echo -e "${CYAN}📊 Performance test...${NC}"
echo ""
# Quick performance test
if command_exists uv; then
echo -e "${BLUE}Testing uv performance (package list)...${NC}"
START_TIME=$(date +%s.%N)
uv pip list >/dev/null 2>&1 || true
END_TIME=$(date +%s.%N)
DURATION=$(echo "$END_TIME - $START_TIME" | bc -l 2>/dev/null || echo "N/A")
if [[ "$DURATION" != "N/A" ]]; then
echo -e "${GREEN}✓ uv pip list completed in ${DURATION}s${NC}"
else
success "Performance test completed"
fi
fi
echo ""
echo -e "${CYAN}📋 Summary${NC}"
echo ""
if [[ $ERRORS -eq 0 && $WARNINGS -eq 0 ]]; then
echo -e "${GREEN}🎉 Perfect! Your system is fully ready for UnitForge development.${NC}"
echo ""
echo -e "${BLUE}Next steps:${NC}"
echo -e " ${CYAN}make setup-dev # Setup development environment${NC}"
echo -e " ${CYAN}make server # Start development server${NC}"
echo -e " ${CYAN}make test # Run tests${NC}"
elif [[ $ERRORS -eq 0 ]]; then
echo -e "${YELLOW}⚠ Your system is mostly ready with ${WARNINGS} warning(s).${NC}"
echo -e "${GREEN}You can proceed with development, but consider addressing the warnings.${NC}"
echo ""
echo -e "${BLUE}Recommended:${NC}"
echo -e " ${CYAN}make setup-dev # This may resolve some warnings${NC}"
else
echo -e "${RED}❌ Your system has ${ERRORS} error(s) and ${WARNINGS} warning(s).${NC}"
echo -e "${RED}Please resolve the errors before proceeding.${NC}"
echo ""
echo -e "${BLUE}Required actions:${NC}"
if ! command_exists uv; then
echo -e " ${CYAN}curl -LsSf https://astral.sh/uv/install.sh | sh${NC}"
echo -e " ${CYAN}source ~/.bashrc # Or restart terminal${NC}"
fi
if ! command_exists python3; then
echo -e " ${CYAN}Install Python 3.8+ from https://python.org${NC}"
fi
fi
echo ""
echo -e "${BLUE}Environment Information:${NC}"
echo -e " ${CYAN}OS: $(uname -s) $(uname -r)${NC}"
echo -e " ${CYAN}Architecture: $(uname -m)${NC}"
echo -e " ${CYAN}Shell: ${SHELL}${NC}"
if command_exists uv; then
echo -e " ${CYAN}uv version: ${UV_VERSION}${NC}"
fi
if command_exists python3; then
success "Python version: $PYTHON_VERSION"
fi
echo ""
echo -e "${CYAN}For more information:${NC}"
echo -e " ${BLUE}UnitForge: ${GITHUB_URL:-https://github.com/will666/unitforge}${NC}"
echo -e " ${BLUE}uv docs: https://github.com/astral-sh/uv${NC}"
# Exit with appropriate code
if [[ $ERRORS -eq 0 ]]; then
exit 0
else
exit 1
fi