Rustelo/scripts/verify-setup.sh
Jesús Pérex 095fd89ff7
Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
chore: add scripts
2025-07-07 23:53:50 +01:00

396 lines
12 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
# Rustelo Setup Verification Script
# This script verifies that all required tools and dependencies are properly installed
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo -e "${BLUE}🔍 Rustelo Setup Verification${NC}"
echo "============================"
echo ""
# Verification results
TOTAL_CHECKS=0
PASSED_CHECKS=0
FAILED_CHECKS=0
WARNINGS=0
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to check version
check_version() {
local tool="$1"
local current="$2"
local required="$3"
if [ -z "$current" ]; then
return 1
fi
# Simple version comparison (works for most cases)
local current_major=$(echo "$current" | cut -d. -f1)
local current_minor=$(echo "$current" | cut -d. -f2)
local required_major=$(echo "$required" | cut -d. -f1)
local required_minor=$(echo "$required" | cut -d. -f2)
if [ "$current_major" -gt "$required_major" ] || \
([ "$current_major" -eq "$required_major" ] && [ "$current_minor" -ge "$required_minor" ]); then
return 0
else
return 1
fi
}
# Function to perform a check
check_tool() {
local tool="$1"
local description="$2"
local required="$3"
local install_cmd="$4"
local optional="${5:-false}"
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
echo -n "Checking $description... "
if command_exists "$tool"; then
# Get version if possible
local version=""
case "$tool" in
"rustc")
version=$(rustc --version 2>/dev/null | cut -d' ' -f2)
;;
"cargo")
version=$(cargo --version 2>/dev/null | cut -d' ' -f2)
;;
"node")
version=$(node --version 2>/dev/null | sed 's/v//')
;;
"npm")
version=$(npm --version 2>/dev/null)
;;
"pnpm")
version=$(pnpm --version 2>/dev/null)
;;
"git")
version=$(git --version 2>/dev/null | cut -d' ' -f3)
;;
"mdbook")
version=$(mdbook --version 2>/dev/null | cut -d' ' -f2)
;;
"just")
version=$(just --version 2>/dev/null | cut -d' ' -f2)
;;
*)
version="unknown"
;;
esac
if [ -n "$required" ] && [ "$version" != "unknown" ]; then
if check_version "$tool" "$version" "$required"; then
echo -e "${GREEN}$version${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
else
echo -e "${RED}$version (required: $required+)${NC}"
if [ "$optional" = "false" ]; then
FAILED_CHECKS=$((FAILED_CHECKS + 1))
echo " 💡 Install/update: $install_cmd"
else
WARNINGS=$((WARNINGS + 1))
echo " ⚠️ Optional: $install_cmd"
fi
fi
else
echo -e "${GREEN}$version${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
fi
else
if [ "$optional" = "false" ]; then
echo -e "${RED}❌ Not found${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
echo " 💡 Install: $install_cmd"
else
echo -e "${YELLOW}⚠️ Not found (optional)${NC}"
WARNINGS=$((WARNINGS + 1))
echo " 💡 Install: $install_cmd"
fi
fi
}
# Function to check file existence
check_file() {
local file="$1"
local description="$2"
local optional="${3:-false}"
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
echo -n "Checking $description... "
if [ -f "$file" ]; then
echo -e "${GREEN}✅ Found${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
else
if [ "$optional" = "false" ]; then
echo -e "${RED}❌ Not found${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
else
echo -e "${YELLOW}⚠️ Not found (optional)${NC}"
WARNINGS=$((WARNINGS + 1))
fi
fi
}
# Function to check directory existence
check_directory() {
local dir="$1"
local description="$2"
local optional="${3:-false}"
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
echo -n "Checking $description... "
if [ -d "$dir" ]; then
echo -e "${GREEN}✅ Found${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
else
if [ "$optional" = "false" ]; then
echo -e "${RED}❌ Not found${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
else
echo -e "${YELLOW}⚠️ Not found (optional)${NC}"
WARNINGS=$((WARNINGS + 1))
fi
fi
}
# Function to check environment variables
check_env_var() {
local var="$1"
local description="$2"
local optional="${3:-false}"
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
echo -n "Checking $description... "
if [ -n "${!var}" ]; then
echo -e "${GREEN}✅ Set${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
else
if [ "$optional" = "false" ]; then
echo -e "${RED}❌ Not set${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
else
echo -e "${YELLOW}⚠️ Not set (optional)${NC}"
WARNINGS=$((WARNINGS + 1))
fi
fi
}
# Change to project root
cd "$PROJECT_ROOT"
echo -e "${PURPLE}🔧 Core Dependencies${NC}"
echo "-------------------"
# Check core tools
check_tool "rustc" "Rust compiler" "1.75" "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
check_tool "cargo" "Cargo package manager" "1.75" "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
check_tool "node" "Node.js" "18.0" "https://nodejs.org/ or brew install node"
check_tool "npm" "npm package manager" "8.0" "comes with Node.js"
check_tool "git" "Git version control" "" "https://git-scm.com/ or brew install git"
echo ""
echo -e "${PURPLE}📚 Documentation Tools${NC}"
echo "---------------------"
# Check documentation tools
check_tool "mdbook" "mdBook documentation" "" "cargo install mdbook"
check_tool "just" "Just task runner" "" "cargo install just"
echo ""
echo -e "${PURPLE}🔧 Development Tools${NC}"
echo "-------------------"
# Check development tools
check_tool "cargo-leptos" "Cargo Leptos" "" "cargo install cargo-leptos"
check_tool "pnpm" "pnpm package manager" "" "npm install -g pnpm" true
check_tool "cargo-watch" "Cargo Watch" "" "cargo install cargo-watch" true
echo ""
echo -e "${PURPLE}📖 Documentation Plugins${NC}"
echo "-------------------------"
# Check mdBook plugins
check_tool "mdbook-linkcheck" "mdBook link checker" "" "cargo install mdbook-linkcheck" true
check_tool "mdbook-toc" "mdBook table of contents" "" "cargo install mdbook-toc" true
check_tool "mdbook-mermaid" "mdBook mermaid diagrams" "" "cargo install mdbook-mermaid" true
echo ""
echo -e "${PURPLE}📁 Project Structure${NC}"
echo "--------------------"
# Check project structure
check_file "Cargo.toml" "Cargo manifest"
check_file "package.json" "Node.js manifest"
check_file "justfile" "Just task definitions"
check_file "book.toml" "mdBook configuration"
check_file ".env" "Environment variables" true
check_directory "client" "Client directory"
check_directory "server" "Server directory"
check_directory "shared" "Shared directory"
check_directory "book" "Documentation source"
check_directory "scripts" "Scripts directory"
echo ""
echo -e "${PURPLE}🚀 Scripts and Executables${NC}"
echo "----------------------------"
# Check scripts
check_file "scripts/setup-docs.sh" "Documentation setup script"
check_file "scripts/build-docs.sh" "Documentation build script"
check_file "scripts/deploy-docs.sh" "Documentation deploy script"
check_file "scripts/docs-dev.sh" "Documentation dev script"
# Check if scripts are executable
if [ -f "scripts/setup-docs.sh" ]; then
if [ -x "scripts/setup-docs.sh" ]; then
echo -e "Script permissions... ${GREEN}✅ Executable${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
else
echo -e "Script permissions... ${RED}❌ Not executable${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
echo " 💡 Fix: chmod +x scripts/*.sh"
fi
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
fi
echo ""
echo -e "${PURPLE}🔍 Build Verification${NC}"
echo "--------------------"
# Check if project can be built
echo -n "Checking Rust project compilation... "
if cargo check --quiet >/dev/null 2>&1; then
echo -e "${GREEN}✅ Passes${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
else
echo -e "${RED}❌ Fails${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
echo " 💡 Run: cargo check for details"
fi
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
# Check if documentation can be built
if [ -f "book.toml" ] && command_exists "mdbook"; then
echo -n "Checking documentation compilation... "
# Capture both stdout and stderr to check for actual errors vs warnings
build_output=$(mdbook build 2>&1)
build_exit_code=$?
# Check if build succeeded (exit code 0) even with warnings
if [ $build_exit_code -eq 0 ]; then
echo -e "${GREEN}✅ Passes${NC}"
PASSED_CHECKS=$((PASSED_CHECKS + 1))
# Show warnings if any
if echo "$build_output" | grep -q "WARN\|WARNING"; then
echo " ⚠️ Build succeeded with warnings"
fi
else
echo -e "${RED}❌ Fails${NC}"
FAILED_CHECKS=$((FAILED_CHECKS + 1))
echo " 💡 Run: mdbook build for details"
fi
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
fi
echo ""
echo -e "${PURPLE}📊 Verification Summary${NC}"
echo "======================="
echo "Total checks: $TOTAL_CHECKS"
echo -e "Passed: ${GREEN}$PASSED_CHECKS${NC}"
echo -e "Failed: ${RED}$FAILED_CHECKS${NC}"
echo -e "Warnings: ${YELLOW}$WARNINGS${NC}"
# Calculate success rate
if [ $TOTAL_CHECKS -gt 0 ]; then
success_rate=$((PASSED_CHECKS * 100 / TOTAL_CHECKS))
echo "Success rate: ${success_rate}%"
fi
echo ""
# Final result
if [ $FAILED_CHECKS -eq 0 ]; then
echo -e "${GREEN}🎉 All essential checks passed!${NC}"
if [ $WARNINGS -gt 0 ]; then
echo -e "${YELLOW} Some optional components are missing, but the system should work.${NC}"
fi
echo ""
echo -e "${BLUE}🚀 Quick Start Commands:${NC}"
echo " • Start development: just dev"
echo " • Start documentation: just docs-dev"
echo " • Build documentation: just docs-build"
echo " • Show all commands: just help"
echo ""
echo -e "${GREEN}✨ You're ready to start developing with Rustelo!${NC}"
exit 0
else
echo -e "${RED}$FAILED_CHECKS critical issues found.${NC}"
echo ""
echo -e "${BLUE}🔧 Quick Fixes:${NC}"
# Provide quick fix suggestions
if ! command_exists "rustc" || ! command_exists "cargo"; then
echo " • Install Rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
fi
if ! command_exists "node"; then
echo " • Install Node.js: https://nodejs.org/"
fi
if ! command_exists "mdbook"; then
echo " • Install mdBook: cargo install mdbook"
fi
if ! command_exists "just"; then
echo " • Install Just: cargo install just"
fi
if [ -f "scripts/setup-docs.sh" ] && [ ! -x "scripts/setup-docs.sh" ]; then
echo " • Fix script permissions: chmod +x scripts/*.sh"
fi
echo ""
echo -e "${BLUE}💡 Automated Setup:${NC}"
echo " • Run the installer: ./scripts/install.sh"
echo " • Setup documentation: ./scripts/setup-docs.sh --full"
echo ""
echo -e "${YELLOW}After fixing issues, run this script again to verify.${NC}"
exit 1
fi