Rustelo/scripts/post-setup-hook.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

297 lines
8.2 KiB
Bash
Executable File

#!/bin/bash
# Rustelo Post-Setup Hook
# This script runs after any setup operation to finalize the installation
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")"
# Configuration
SETUP_TYPE="${1:-unknown}"
SKIP_VERIFICATION="${SKIP_VERIFICATION:-false}"
SKIP_REPORT="${SKIP_REPORT:-false}"
QUIET="${QUIET:-false}"
# Function to log messages
log() {
if [ "$QUIET" != "true" ]; then
echo -e "${GREEN}[POST-SETUP]${NC} $1"
fi
}
log_warn() {
echo -e "${YELLOW}[POST-SETUP WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[POST-SETUP ERROR]${NC} $1"
}
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to run verification
run_verification() {
if [ "$SKIP_VERIFICATION" = "true" ]; then
log "Skipping verification (SKIP_VERIFICATION=true)"
return 0
fi
log "Running post-setup verification..."
if [ -f "$PROJECT_ROOT/scripts/verify-setup.sh" ]; then
cd "$PROJECT_ROOT"
if ./scripts/verify-setup.sh; then
log "✅ Verification passed"
return 0
else
log_warn "⚠️ Some verification checks failed"
return 1
fi
else
log_warn "Verification script not found"
return 1
fi
}
# Function to generate setup completion report
generate_completion_report() {
if [ "$SKIP_REPORT" = "true" ]; then
log "Skipping setup report generation (SKIP_REPORT=true)"
return 0
fi
log "Generating setup completion report..."
if [ -f "$PROJECT_ROOT/scripts/generate-setup-complete.sh" ]; then
cd "$PROJECT_ROOT"
# Set environment variables for the generator
export PROJECT_NAME="${PROJECT_NAME:-$(basename "$PROJECT_ROOT")}"
export SETUP_MODE="${SETUP_MODE:-$SETUP_TYPE}"
export ENVIRONMENT="${ENVIRONMENT:-dev}"
export INSTALL_DATE="${INSTALL_DATE:-$(date '+%Y-%m-%d %H:%M:%S')}"
if ./scripts/generate-setup-complete.sh; then
log "✅ Setup completion report generated: SETUP_COMPLETE.md"
return 0
else
log_warn "⚠️ Failed to generate setup completion report"
return 1
fi
else
log_warn "Setup completion generator not found"
return 1
fi
}
# Function to fix common issues
fix_common_issues() {
log "Checking for common issues..."
# Fix script permissions
if [ -d "$PROJECT_ROOT/scripts" ]; then
chmod +x "$PROJECT_ROOT/scripts"/*.sh 2>/dev/null || true
log "Fixed script permissions"
fi
# Create necessary directories
cd "$PROJECT_ROOT"
mkdir -p book-output logs cache 2>/dev/null || true
# Initialize git if not already done
if [ ! -d ".git" ]; then
log "Initializing git repository..."
git init --quiet 2>/dev/null || log_warn "Failed to initialize git"
fi
# Add .gitignore entries for generated files
if [ -f ".gitignore" ]; then
# Add book-output to gitignore if not already there
if ! grep -q "book-output" .gitignore; then
echo "# Documentation build output" >> .gitignore
echo "book-output/" >> .gitignore
log "Added book-output to .gitignore"
fi
# Add SETUP_COMPLETE.md to gitignore if not already there
if ! grep -q "SETUP_COMPLETE.md" .gitignore; then
echo "# Generated setup report" >> .gitignore
echo "SETUP_COMPLETE.md" >> .gitignore
log "Added SETUP_COMPLETE.md to .gitignore"
fi
fi
}
# Function to provide quick start information
show_quick_start() {
echo ""
echo -e "${PURPLE}🚀 Quick Start Commands${NC}"
echo "======================="
# Check what's available and show relevant commands
if command_exists "just" && [ -f "$PROJECT_ROOT/justfile" ]; then
echo -e "${BLUE}Using Just (recommended):${NC}"
echo " just verify-setup # Verify installation"
echo " just dev # Start development server"
if grep -q "docs-dev" "$PROJECT_ROOT/justfile" 2>/dev/null; then
echo " just docs-dev # Start documentation server"
fi
echo " just help # Show all available commands"
fi
echo ""
echo -e "${BLUE}Manual commands:${NC}"
echo " ./scripts/verify-setup.sh # Verify setup"
if [ -f "$PROJECT_ROOT/scripts/docs-dev.sh" ]; then
echo " ./scripts/docs-dev.sh # Start documentation"
fi
echo ""
echo -e "${BLUE}Access URLs:${NC}"
echo " Web App: http://localhost:${SERVER_PORT:-3030}"
if [ -f "$PROJECT_ROOT/book.toml" ]; then
echo " Documentation: http://localhost:3000"
fi
echo ""
}
# Function to detect and report setup type
detect_setup_type() {
local detected_type="$SETUP_TYPE"
# Try to detect based on what's present
if [ -f "$PROJECT_ROOT/book.toml" ] && [ -d "$PROJECT_ROOT/book" ]; then
if [ "$detected_type" = "unknown" ]; then
detected_type="documentation"
fi
fi
if [ -f "$PROJECT_ROOT/.env" ] && [ -f "$PROJECT_ROOT/Cargo.toml" ]; then
if [ "$detected_type" = "unknown" ] || [ "$detected_type" = "documentation" ]; then
detected_type="full"
fi
fi
log "Setup type detected: $detected_type"
export SETUP_TYPE="$detected_type"
}
# Function to show summary
show_summary() {
echo ""
echo -e "${GREEN}🎉 Post-Setup Complete!${NC}"
echo "========================"
echo ""
echo -e "${BLUE}Setup Summary:${NC}"
echo " • Setup Type: $SETUP_TYPE"
echo " • Project: $(basename "$PROJECT_ROOT")"
echo " • Location: $PROJECT_ROOT"
if [ -f "$PROJECT_ROOT/SETUP_COMPLETE.md" ]; then
echo " • Setup Report: ✅ Generated"
echo ""
echo -e "${CYAN}📋 Check SETUP_COMPLETE.md for detailed setup information${NC}"
fi
echo ""
echo -e "${GREEN}✨ Ready to start developing!${NC}"
}
# Main execution
main() {
echo -e "${BLUE}🔧 Rustelo Post-Setup Hook${NC}"
echo "============================"
echo ""
cd "$PROJECT_ROOT"
# Detect setup type if not provided
detect_setup_type
# Fix common issues first
fix_common_issues
# Run verification
local verification_result=0
if ! run_verification; then
verification_result=1
fi
# Generate completion report
local report_result=0
if ! generate_completion_report; then
report_result=1
fi
# Show quick start information
show_quick_start
# Show summary
show_summary
# Exit with appropriate code
if [ $verification_result -ne 0 ] || [ $report_result -ne 0 ]; then
echo ""
echo -e "${YELLOW}⚠️ Some post-setup tasks had issues, but the installation should still work.${NC}"
echo -e "${CYAN}💡 Run 'just verify-setup' to check for any remaining issues.${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}🎯 Post-setup completed successfully!${NC}"
exit 0
}
# Handle command line arguments
case "${1:-}" in
--help|-h)
echo "Rustelo Post-Setup Hook"
echo ""
echo "Usage: $0 [SETUP_TYPE] [OPTIONS]"
echo ""
echo "SETUP_TYPE:"
echo " installation - After main installation"
echo " documentation - After documentation setup"
echo " features - After feature configuration"
echo " unknown - Auto-detect setup type"
echo ""
echo "Environment Variables:"
echo " SKIP_VERIFICATION=true - Skip verification step"
echo " SKIP_REPORT=true - Skip report generation"
echo " QUIET=true - Suppress non-error output"
echo ""
echo "Examples:"
echo " $0 installation"
echo " $0 documentation"
echo " SKIP_VERIFICATION=true $0"
exit 0
;;
--version|-v)
echo "Rustelo Post-Setup Hook v1.0.0"
exit 0
;;
esac
# Run main function with all arguments
main "$@"