#!/bin/bash # Verification script for project-bootstrap # This script tests the bootstrap process set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' print_success() { echo -e "${GREEN}✓${NC} $1" } print_error() { echo -e "${RED}✗${NC} $1" } print_info() { echo -e "${YELLOW}ℹ${NC} $1" } TEST_PROJECT="test-verify-project" # Cleanup function cleanup() { if [ -d "$TEST_PROJECT" ]; then print_info "Cleaning up test project..." rm -rf "$TEST_PROJECT" fi } # Set trap to cleanup on exit trap cleanup EXIT print_info "Starting bootstrap verification..." echo # Test 1: Bootstrap script exists and is executable print_info "Test 1: Checking bootstrap script..." if [ -x "./bootstrap.sh" ]; then print_success "Bootstrap script is executable" else print_error "Bootstrap script is not executable" exit 1 fi # Test 2: Run bootstrap print_info "Test 2: Running bootstrap..." if ./bootstrap.sh "$TEST_PROJECT" --no-git > /dev/null 2>&1; then print_success "Bootstrap completed successfully" else print_error "Bootstrap failed" exit 1 fi # Test 3: Check directory structure print_info "Test 3: Verifying directory structure..." REQUIRED_DIRS=( "$TEST_PROJECT/backend" "$TEST_PROJECT/frontend" "$TEST_PROJECT/deploy" "$TEST_PROJECT/scripts" "$TEST_PROJECT/docs" ) for dir in "${REQUIRED_DIRS[@]}"; do if [ -d "$dir" ]; then print_success "Directory exists: $dir" else print_error "Directory missing: $dir" exit 1 fi done # Test 4: Check key files print_info "Test 4: Verifying key files..." REQUIRED_FILES=( "$TEST_PROJECT/README.md" "$TEST_PROJECT/LICENSE" "$TEST_PROJECT/.gitignore" "$TEST_PROJECT/backend/pyproject.toml" "$TEST_PROJECT/backend/app/main.py" "$TEST_PROJECT/frontend/package.json" "$TEST_PROJECT/frontend/src/App.tsx" "$TEST_PROJECT/deploy/compose.yml" ) for file in "${REQUIRED_FILES[@]}"; do if [ -f "$file" ]; then print_success "File exists: $file" else print_error "File missing: $file" exit 1 fi done # Test 5: Check scripts are executable print_info "Test 5: Verifying scripts are executable..." SCRIPT_FILES=( "$TEST_PROJECT/scripts/dev/start-backend.sh" "$TEST_PROJECT/scripts/dev/start-frontend.sh" "$TEST_PROJECT/scripts/utils/lint-backend.sh" "$TEST_PROJECT/scripts/ci/backend-test.sh" ) for script in "${SCRIPT_FILES[@]}"; do if [ -x "$script" ]; then print_success "Script is executable: $script" else print_error "Script is not executable: $script" exit 1 fi done # Test 6: Check Python __init__.py files print_info "Test 6: Verifying Python __init__.py files..." INIT_FILES=( "$TEST_PROJECT/backend/app/__init__.py" "$TEST_PROJECT/backend/app/api/__init__.py" "$TEST_PROJECT/backend/app/core/__init__.py" "$TEST_PROJECT/backend/tests/__init__.py" ) for init_file in "${INIT_FILES[@]}"; do if [ -f "$init_file" ]; then print_success "Init file exists: $init_file" else print_error "Init file missing: $init_file" exit 1 fi done # Test 7: Verify file contents (sample check) print_info "Test 7: Verifying file contents..." if grep -q "FastAPI" "$TEST_PROJECT/backend/app/main.py"; then print_success "Backend main.py contains FastAPI" else print_error "Backend main.py missing FastAPI import" exit 1 fi if grep -qi "react" "$TEST_PROJECT/frontend/package.json"; then print_success "Frontend package.json contains React" else print_error "Frontend package.json missing React" exit 1 fi # Test 8: Count files print_info "Test 8: Counting generated files..." FILE_COUNT=$(find "$TEST_PROJECT" -type f | wc -l) if [ "$FILE_COUNT" -gt 50 ]; then print_success "Generated $FILE_COUNT files (expected > 50)" else print_error "Only generated $FILE_COUNT files (expected > 50)" exit 1 fi # Test 9: Check documentation print_info "Test 9: Verifying documentation..." DOC_FILES=( "$TEST_PROJECT/docs/api/README.md" "$TEST_PROJECT/docs/architecture/README.md" "$TEST_PROJECT/docs/user-guide/README.md" ) for doc in "${DOC_FILES[@]}"; do if [ -f "$doc" ]; then print_success "Documentation exists: $doc" else print_error "Documentation missing: $doc" exit 1 fi done # Test 10: Verify CI workflows print_info "Test 10: Verifying CI workflows..." if [ -f "$TEST_PROJECT/.gitea/workflows/backend-ci.yml" ]; then print_success "Backend CI workflow exists" else print_error "Backend CI workflow missing" exit 1 fi if [ -f "$TEST_PROJECT/.gitea/workflows/frontend-ci.yml" ]; then print_success "Frontend CI workflow exists" else print_error "Frontend CI workflow missing" exit 1 fi echo print_success "All verification tests passed!" echo print_info "Summary:" echo " - Bootstrap script: OK" echo " - Directory structure: OK" echo " - Key files: OK" echo " - Scripts: OK" echo " - Python packages: OK" echo " - File contents: OK" echo " - File count: $FILE_COUNT files" echo " - Documentation: OK" echo " - CI workflows: OK" echo print_success "Project bootstrap is working correctly!"