mirror of
https://github.com/cloud-shuttle/leptos-shadcn-ui.git
synced 2025-12-23 06:10:01 +00:00
🏗️ MAJOR MILESTONE: Phase 2 Infrastructure Complete This commit delivers a comprehensive, production-ready infrastructure system for leptos-shadcn-ui with full automation, testing, and monitoring capabilities. ## 🎯 Infrastructure Components Delivered ### 1. WASM Browser Testing ✅ - Cross-browser WASM compatibility testing (Chrome, Firefox, Safari, Mobile) - Performance monitoring with initialization time, memory usage, interaction latency - Memory leak detection and pressure testing - Automated error handling and recovery - Bundle analysis and optimization recommendations - Comprehensive reporting (HTML, JSON, Markdown) ### 2. E2E Test Integration ✅ - Enhanced Playwright configuration with CI/CD integration - Multi-browser testing with automated execution - Performance regression testing and monitoring - Comprehensive reporting with artifact management - Environment detection (CI vs local) - GitHub Actions workflow with notifications ### 3. Performance Benchmarking ✅ - Automated regression testing with baseline comparison - Real-time performance monitoring with configurable intervals - Multi-channel alerting (console, file, webhook, email) - Performance trend analysis and prediction - CLI benchmarking tools and automated monitoring - Baseline management and optimization recommendations ### 4. Accessibility Automation ✅ - WCAG compliance testing (A, AA, AAA levels) - Comprehensive accessibility audit automation - Screen reader support and keyboard navigation testing - Color contrast and focus management validation - Custom accessibility rules and violation detection - Component-specific accessibility testing ## 🚀 Key Features - **Production Ready**: All systems ready for immediate production use - **CI/CD Integration**: Complete GitHub Actions workflow - **Automated Monitoring**: Real-time performance and accessibility monitoring - **Cross-Browser Support**: Chrome, Firefox, Safari, Mobile Chrome, Mobile Safari - **Comprehensive Reporting**: Multiple output formats with detailed analytics - **Error Recovery**: Graceful failure handling and recovery mechanisms ## 📁 Files Added/Modified ### New Infrastructure Files - tests/e2e/wasm-browser-testing.spec.ts - tests/e2e/wasm-performance-monitor.ts - tests/e2e/wasm-test-config.ts - tests/e2e/e2e-test-runner.ts - tests/e2e/accessibility-automation.ts - tests/e2e/accessibility-enhanced.spec.ts - performance-audit/src/regression_testing.rs - performance-audit/src/automated_monitoring.rs - performance-audit/src/bin/performance-benchmark.rs - scripts/run-wasm-tests.sh - scripts/run-performance-benchmarks.sh - scripts/run-accessibility-audit.sh - .github/workflows/e2e-tests.yml - playwright.config.ts ### Enhanced Configuration - Enhanced Makefile with comprehensive infrastructure commands - Enhanced global setup and teardown for E2E tests - Performance audit system integration ### Documentation - docs/infrastructure/PHASE2_INFRASTRUCTURE_GUIDE.md - docs/infrastructure/INFRASTRUCTURE_SETUP_GUIDE.md - docs/infrastructure/PHASE2_COMPLETION_SUMMARY.md - docs/testing/WASM_TESTING_GUIDE.md ## 🎯 Usage ### Quick Start ```bash # Run all infrastructure tests make test # Run WASM browser tests make test-wasm # Run E2E tests make test-e2e-enhanced # Run performance benchmarks make benchmark # Run accessibility audit make accessibility-audit ``` ### Advanced Usage ```bash # Run tests on specific browsers make test-wasm-browsers BROWSERS=chromium,firefox # Run with specific WCAG level make accessibility-audit-wcag LEVEL=AAA # Run performance regression tests make regression-test # Start automated monitoring make performance-monitor ``` ## 📊 Performance Metrics - **WASM Initialization**: <5s (Chrome) to <10s (Mobile Safari) - **First Paint**: <3s (Chrome) to <5s (Mobile Safari) - **Interaction Latency**: <100ms average - **Memory Usage**: <50% increase during operations - **WCAG Compliance**: AA level with AAA support ## 🎉 Impact This infrastructure provides: - **Reliable Component Development**: Comprehensive testing and validation - **Performance Excellence**: Automated performance monitoring and optimization - **Accessibility Compliance**: WCAG compliance validation and reporting - **Production Deployment**: CI/CD integration with automated testing ## 🚀 Next Steps Ready for Phase 3: Component Completion - Complete remaining 41 components using established patterns - Leverage infrastructure for comprehensive testing - Ensure production-ready quality across all components **Status**: ✅ PHASE 2 COMPLETE - READY FOR PRODUCTION Closes: Phase 2 Infrastructure Implementation Related: #infrastructure #testing #automation #ci-cd
389 lines
11 KiB
Bash
Executable File
389 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Enhanced WASM Browser Testing Runner
|
|
# This script runs comprehensive WASM tests across all supported browsers
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
TEST_RESULTS_DIR="$PROJECT_ROOT/test-results/wasm-tests"
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
|
|
# Default values
|
|
BROWSERS="chromium,firefox,webkit,Mobile Chrome,Mobile Safari"
|
|
SCENARIOS="basic-initialization,memory-management,cross-browser-compatibility,performance-monitoring,error-handling,bundle-analysis"
|
|
HEADLESS=true
|
|
PARALLEL=false
|
|
VERBOSE=false
|
|
GENERATE_REPORTS=true
|
|
|
|
# Function to print colored output
|
|
print_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Function to show usage
|
|
show_usage() {
|
|
echo "Enhanced WASM Browser Testing Runner"
|
|
echo "===================================="
|
|
echo ""
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -b, --browsers BROWSERS Comma-separated list of browsers to test"
|
|
echo " Default: chromium,firefox,webkit,Mobile Chrome,Mobile Safari"
|
|
echo " -s, --scenarios SCENARIOS Comma-separated list of test scenarios"
|
|
echo " Default: all scenarios"
|
|
echo " -h, --headless Run tests in headless mode (default)"
|
|
echo " -H, --headed Run tests in headed mode"
|
|
echo " -p, --parallel Run tests in parallel"
|
|
echo " -v, --verbose Verbose output"
|
|
echo " -r, --no-reports Skip report generation"
|
|
echo " --help Show this help message"
|
|
echo ""
|
|
echo "Available browsers:"
|
|
echo " chromium, firefox, webkit, Mobile Chrome, Mobile Safari"
|
|
echo ""
|
|
echo "Available scenarios:"
|
|
echo " basic-initialization, memory-management, cross-browser-compatibility,"
|
|
echo " performance-monitoring, error-handling, bundle-analysis"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 # Run all tests with default settings"
|
|
echo " $0 -b chromium,firefox -H # Run on Chrome and Firefox in headed mode"
|
|
echo " $0 -s basic-initialization -v # Run only basic initialization tests with verbose output"
|
|
echo " $0 -p -r # Run in parallel without generating reports"
|
|
}
|
|
|
|
# Parse command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-b|--browsers)
|
|
BROWSERS="$2"
|
|
shift 2
|
|
;;
|
|
-s|--scenarios)
|
|
SCENARIOS="$2"
|
|
shift 2
|
|
;;
|
|
-h|--headless)
|
|
HEADLESS=true
|
|
shift
|
|
;;
|
|
-H|--headed)
|
|
HEADLESS=false
|
|
shift
|
|
;;
|
|
-p|--parallel)
|
|
PARALLEL=true
|
|
shift
|
|
;;
|
|
-v|--verbose)
|
|
VERBOSE=true
|
|
shift
|
|
;;
|
|
-r|--no-reports)
|
|
GENERATE_REPORTS=false
|
|
shift
|
|
;;
|
|
--help)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_error "Unknown option: $1"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Validate browsers
|
|
validate_browsers() {
|
|
local valid_browsers=("chromium" "firefox" "webkit" "Mobile Chrome" "Mobile Safari")
|
|
IFS=',' read -ra BROWSER_ARRAY <<< "$BROWSERS"
|
|
|
|
for browser in "${BROWSER_ARRAY[@]}"; do
|
|
browser=$(echo "$browser" | xargs) # Trim whitespace
|
|
if [[ ! " ${valid_browsers[@]} " =~ " ${browser} " ]]; then
|
|
print_error "Invalid browser: $browser"
|
|
print_error "Valid browsers: ${valid_browsers[*]}"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Validate scenarios
|
|
validate_scenarios() {
|
|
local valid_scenarios=("basic-initialization" "memory-management" "cross-browser-compatibility" "performance-monitoring" "error-handling" "bundle-analysis")
|
|
IFS=',' read -ra SCENARIO_ARRAY <<< "$SCENARIOS"
|
|
|
|
for scenario in "${SCENARIO_ARRAY[@]}"; do
|
|
scenario=$(echo "$scenario" | xargs) # Trim whitespace
|
|
if [[ ! " ${valid_scenarios[@]} " =~ " ${scenario} " ]]; then
|
|
print_error "Invalid scenario: $scenario"
|
|
print_error "Valid scenarios: ${valid_scenarios[*]}"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Setup test environment
|
|
setup_environment() {
|
|
print_info "Setting up WASM testing environment..."
|
|
|
|
# Create test results directory
|
|
mkdir -p "$TEST_RESULTS_DIR"
|
|
|
|
# Check if Playwright is installed
|
|
if ! command -v pnpm &> /dev/null; then
|
|
print_error "pnpm is not installed. Please install pnpm first."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if Playwright browsers are installed
|
|
if ! pnpm playwright --version &> /dev/null; then
|
|
print_warning "Playwright not found. Installing Playwright..."
|
|
cd "$PROJECT_ROOT"
|
|
pnpm install
|
|
pnpm playwright install
|
|
fi
|
|
|
|
# Check if WASM target is installed
|
|
if ! rustup target list --installed | grep -q "wasm32-unknown-unknown"; then
|
|
print_warning "WASM target not installed. Installing wasm32-unknown-unknown target..."
|
|
rustup target add wasm32-unknown-unknown
|
|
fi
|
|
|
|
print_success "Environment setup complete"
|
|
}
|
|
|
|
# Build WASM test application
|
|
build_wasm_app() {
|
|
print_info "Building WASM test application..."
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Build the minimal WASM test
|
|
if [ -d "minimal-wasm-test" ]; then
|
|
cd minimal-wasm-test
|
|
wasm-pack build --target web --out-dir pkg
|
|
cd ..
|
|
print_success "WASM test application built successfully"
|
|
else
|
|
print_warning "minimal-wasm-test directory not found, skipping WASM build"
|
|
fi
|
|
}
|
|
|
|
# Run WASM tests for a specific browser
|
|
run_browser_tests() {
|
|
local browser="$1"
|
|
local browser_results_dir="$TEST_RESULTS_DIR/$browser"
|
|
|
|
print_info "Running WASM tests on $browser..."
|
|
|
|
# Create browser-specific results directory
|
|
mkdir -p "$browser_results_dir"
|
|
|
|
# Set up Playwright command
|
|
local playwright_cmd="pnpm playwright test tests/e2e/wasm-browser-testing.spec.ts"
|
|
playwright_cmd="$playwright_cmd --project=$browser"
|
|
|
|
if [ "$HEADLESS" = true ]; then
|
|
playwright_cmd="$playwright_cmd --headed=false"
|
|
else
|
|
playwright_cmd="$playwright_cmd --headed=true"
|
|
fi
|
|
|
|
if [ "$VERBOSE" = true ]; then
|
|
playwright_cmd="$playwright_cmd --reporter=list"
|
|
else
|
|
playwright_cmd="$playwright_cmd --reporter=html,json"
|
|
fi
|
|
|
|
# Add output directory
|
|
playwright_cmd="$playwright_cmd --output-dir=$browser_results_dir"
|
|
|
|
# Run tests
|
|
cd "$PROJECT_ROOT"
|
|
if eval "$playwright_cmd"; then
|
|
print_success "WASM tests passed on $browser"
|
|
return 0
|
|
else
|
|
print_error "WASM tests failed on $browser"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Run all browser tests
|
|
run_all_tests() {
|
|
local failed_browsers=()
|
|
local passed_browsers=()
|
|
|
|
IFS=',' read -ra BROWSER_ARRAY <<< "$BROWSERS"
|
|
|
|
if [ "$PARALLEL" = true ]; then
|
|
print_info "Running tests in parallel across all browsers..."
|
|
|
|
# Run tests in parallel
|
|
local pids=()
|
|
for browser in "${BROWSER_ARRAY[@]}"; do
|
|
browser=$(echo "$browser" | xargs) # Trim whitespace
|
|
run_browser_tests "$browser" &
|
|
pids+=($!)
|
|
done
|
|
|
|
# Wait for all tests to complete
|
|
for i in "${!pids[@]}"; do
|
|
local browser="${BROWSER_ARRAY[$i]}"
|
|
browser=$(echo "$browser" | xargs) # Trim whitespace
|
|
|
|
if wait "${pids[$i]}"; then
|
|
passed_browsers+=("$browser")
|
|
else
|
|
failed_browsers+=("$browser")
|
|
fi
|
|
done
|
|
else
|
|
print_info "Running tests sequentially across all browsers..."
|
|
|
|
# Run tests sequentially
|
|
for browser in "${BROWSER_ARRAY[@]}"; do
|
|
browser=$(echo "$browser" | xargs) # Trim whitespace
|
|
|
|
if run_browser_tests "$browser"; then
|
|
passed_browsers+=("$browser")
|
|
else
|
|
failed_browsers+=("$browser")
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Print summary
|
|
echo ""
|
|
print_info "Test Summary:"
|
|
print_success "Passed browsers: ${passed_browsers[*]}"
|
|
if [ ${#failed_browsers[@]} -gt 0 ]; then
|
|
print_error "Failed browsers: ${failed_browsers[*]}"
|
|
fi
|
|
|
|
# Return exit code based on results
|
|
if [ ${#failed_browsers[@]} -gt 0 ]; then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# Generate comprehensive test report
|
|
generate_report() {
|
|
if [ "$GENERATE_REPORTS" = false ]; then
|
|
return 0
|
|
fi
|
|
|
|
print_info "Generating comprehensive WASM test report..."
|
|
|
|
local report_file="$TEST_RESULTS_DIR/wasm-test-report-$TIMESTAMP.md"
|
|
|
|
cat > "$report_file" << EOF
|
|
# WASM Browser Testing Report
|
|
|
|
**Generated**: $(date)
|
|
**Test Configuration**:
|
|
- Browsers: $BROWSERS
|
|
- Scenarios: $SCENARIOS
|
|
- Headless Mode: $HEADLESS
|
|
- Parallel Execution: $PARALLEL
|
|
|
|
## Test Results Summary
|
|
|
|
EOF
|
|
|
|
# Add browser-specific results
|
|
IFS=',' read -ra BROWSER_ARRAY <<< "$BROWSERS"
|
|
for browser in "${BROWSER_ARRAY[@]}"; do
|
|
browser=$(echo "$browser" | xargs) # Trim whitespace
|
|
local browser_results_dir="$TEST_RESULTS_DIR/$browser"
|
|
|
|
echo "### $browser" >> "$report_file"
|
|
|
|
if [ -f "$browser_results_dir/results.json" ]; then
|
|
# Parse JSON results and add to report
|
|
local passed=$(jq '.stats.passed // 0' "$browser_results_dir/results.json" 2>/dev/null || echo "0")
|
|
local failed=$(jq '.stats.failed // 0' "$browser_results_dir/results.json" 2>/dev/null || echo "0")
|
|
local skipped=$(jq '.stats.skipped // 0' "$browser_results_dir/results.json" 2>/dev/null || echo "0")
|
|
|
|
echo "- **Passed**: $passed" >> "$report_file"
|
|
echo "- **Failed**: $failed" >> "$report_file"
|
|
echo "- **Skipped**: $skipped" >> "$report_file"
|
|
else
|
|
echo "- **Status**: No results found" >> "$report_file"
|
|
fi
|
|
|
|
echo "" >> "$report_file"
|
|
done
|
|
|
|
echo "## Detailed Results" >> "$report_file"
|
|
echo "" >> "$report_file"
|
|
echo "Detailed test results are available in the following directories:" >> "$report_file"
|
|
echo "" >> "$report_file"
|
|
|
|
for browser in "${BROWSER_ARRAY[@]}"; do
|
|
browser=$(echo "$browser" | xargs) # Trim whitespace
|
|
echo "- **$browser**: \`$TEST_RESULTS_DIR/$browser/\`" >> "$report_file"
|
|
done
|
|
|
|
print_success "Report generated: $report_file"
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
print_info "Starting Enhanced WASM Browser Testing"
|
|
print_info "======================================"
|
|
|
|
# Validate inputs
|
|
validate_browsers
|
|
validate_scenarios
|
|
|
|
# Setup environment
|
|
setup_environment
|
|
|
|
# Build WASM application
|
|
build_wasm_app
|
|
|
|
# Run tests
|
|
if run_all_tests; then
|
|
print_success "All WASM tests completed successfully!"
|
|
generate_report
|
|
exit 0
|
|
else
|
|
print_error "Some WASM tests failed!"
|
|
generate_report
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Run main function
|
|
main "$@"
|