251 lines
6.0 KiB
Bash
Executable File
251 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# docker-test.sh - Test Docker builds for Feuerwehr Dashboard
|
|
# This script tests building backend and frontend Docker images locally
|
|
|
|
set -e # Exit on any error
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Log functions
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Print header
|
|
print_header() {
|
|
echo ""
|
|
echo "========================================"
|
|
echo " Feuerwehr Dashboard - Docker Build Test"
|
|
echo "========================================"
|
|
echo ""
|
|
}
|
|
|
|
# Check if Docker is available
|
|
check_docker() {
|
|
log_info "Checking Docker availability..."
|
|
|
|
if ! command -v docker &> /dev/null; then
|
|
log_error "Docker is not installed or not in PATH"
|
|
log_info "Please install Docker from https://docs.docker.com/get-docker/"
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker info &> /dev/null; then
|
|
log_error "Docker daemon is not running"
|
|
log_info "Please start Docker and try again"
|
|
exit 1
|
|
fi
|
|
|
|
log_success "Docker is available"
|
|
docker --version
|
|
echo ""
|
|
}
|
|
|
|
# Test backend Docker build
|
|
test_backend_build() {
|
|
log_info "Testing Backend Docker build..."
|
|
echo ""
|
|
|
|
cd "${SCRIPT_DIR}/backend"
|
|
|
|
# Check if Dockerfile exists
|
|
if [ ! -f "Dockerfile" ]; then
|
|
log_error "Backend Dockerfile not found at ${SCRIPT_DIR}/backend/Dockerfile"
|
|
return 1
|
|
fi
|
|
|
|
# Check if package.json exists
|
|
if [ ! -f "package.json" ]; then
|
|
log_error "Backend package.json not found"
|
|
return 1
|
|
fi
|
|
|
|
log_info "Building backend image (feuerwehr-backend-test)..."
|
|
|
|
# Build the image
|
|
if docker build \
|
|
--tag feuerwehr-backend-test:latest \
|
|
--file Dockerfile \
|
|
--progress=plain \
|
|
.; then
|
|
log_success "Backend image built successfully"
|
|
|
|
# Get image size
|
|
IMAGE_SIZE=$(docker images feuerwehr-backend-test:latest --format "{{.Size}}")
|
|
log_info "Backend image size: ${IMAGE_SIZE}"
|
|
|
|
return 0
|
|
else
|
|
log_error "Backend image build failed"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Test frontend Docker build
|
|
test_frontend_build() {
|
|
log_info "Testing Frontend Docker build..."
|
|
echo ""
|
|
|
|
cd "${SCRIPT_DIR}/frontend"
|
|
|
|
# Check if Dockerfile exists
|
|
if [ ! -f "Dockerfile" ]; then
|
|
log_error "Frontend Dockerfile not found at ${SCRIPT_DIR}/frontend/Dockerfile"
|
|
return 1
|
|
fi
|
|
|
|
# Check if package.json exists
|
|
if [ ! -f "package.json" ]; then
|
|
log_error "Frontend package.json not found"
|
|
return 1
|
|
fi
|
|
|
|
# Check if nginx.conf exists
|
|
if [ ! -f "nginx.conf" ]; then
|
|
log_warning "Frontend nginx.conf not found"
|
|
fi
|
|
|
|
log_info "Building frontend image (feuerwehr-frontend-test)..."
|
|
|
|
# Build the image with build args
|
|
if docker build \
|
|
--tag feuerwehr-frontend-test:latest \
|
|
--file Dockerfile \
|
|
--build-arg VITE_API_URL=http://localhost:3000 \
|
|
--build-arg VITE_APP_NAME="Feuerwehr Dashboard" \
|
|
--build-arg VITE_APP_VERSION="1.0.0" \
|
|
--progress=plain \
|
|
.; then
|
|
log_success "Frontend image built successfully"
|
|
|
|
# Get image size
|
|
IMAGE_SIZE=$(docker images feuerwehr-frontend-test:latest --format "{{.Size}}")
|
|
log_info "Frontend image size: ${IMAGE_SIZE}"
|
|
|
|
return 0
|
|
else
|
|
log_error "Frontend image build failed"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Cleanup test images
|
|
cleanup_images() {
|
|
log_info "Cleaning up test images..."
|
|
|
|
# Remove backend test image
|
|
if docker images -q feuerwehr-backend-test:latest &> /dev/null; then
|
|
docker rmi feuerwehr-backend-test:latest &> /dev/null || true
|
|
log_success "Removed backend test image"
|
|
fi
|
|
|
|
# Remove frontend test image
|
|
if docker images -q feuerwehr-frontend-test:latest &> /dev/null; then
|
|
docker rmi feuerwehr-frontend-test:latest &> /dev/null || true
|
|
log_success "Removed frontend test image"
|
|
fi
|
|
|
|
echo ""
|
|
}
|
|
|
|
# Print summary
|
|
print_summary() {
|
|
echo ""
|
|
echo "========================================"
|
|
echo " Build Test Summary"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
if [ $BACKEND_BUILD_SUCCESS -eq 1 ]; then
|
|
log_success "Backend: Build successful"
|
|
else
|
|
log_error "Backend: Build failed"
|
|
fi
|
|
|
|
if [ $FRONTEND_BUILD_SUCCESS -eq 1 ]; then
|
|
log_success "Frontend: Build successful"
|
|
else
|
|
log_error "Frontend: Build failed"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
if [ $BACKEND_BUILD_SUCCESS -eq 1 ] && [ $FRONTEND_BUILD_SUCCESS -eq 1 ]; then
|
|
log_success "All builds passed!"
|
|
echo ""
|
|
log_info "Next steps:"
|
|
echo " 1. Review .env.example and create .env file"
|
|
echo " 2. Set required environment variables (POSTGRES_PASSWORD, JWT_SECRET)"
|
|
echo " 3. Run: docker-compose up -d"
|
|
echo ""
|
|
return 0
|
|
else
|
|
log_error "Some builds failed. Please review the errors above."
|
|
echo ""
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
print_header
|
|
|
|
# Initialize success flags
|
|
BACKEND_BUILD_SUCCESS=0
|
|
FRONTEND_BUILD_SUCCESS=0
|
|
|
|
# Check Docker
|
|
check_docker
|
|
|
|
# Test backend build
|
|
if test_backend_build; then
|
|
BACKEND_BUILD_SUCCESS=1
|
|
fi
|
|
echo ""
|
|
|
|
# Test frontend build
|
|
if test_frontend_build; then
|
|
FRONTEND_BUILD_SUCCESS=1
|
|
fi
|
|
echo ""
|
|
|
|
# Ask if user wants to cleanup
|
|
read -p "Do you want to remove test images? (y/n) " -n 1 -r
|
|
echo ""
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
cleanup_images
|
|
else
|
|
log_info "Test images kept for inspection"
|
|
echo " - feuerwehr-backend-test:latest"
|
|
echo " - feuerwehr-frontend-test:latest"
|
|
echo ""
|
|
fi
|
|
|
|
# Print summary
|
|
print_summary
|
|
}
|
|
|
|
# Run main function
|
|
main "$@"
|