Files
dashboard/docker-test.sh
Matthias Hochmeister f09748f4a1 inital
2026-02-23 17:08:58 +01:00

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 "$@"