mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-09-29 18:51:43 +02:00
Improved Docker tests
This commit is contained in:
+2
-1
@@ -26,7 +26,8 @@ ENV DATA_DIR=/app/data
|
||||
ENV TESTING=1
|
||||
|
||||
# Default command runs pytest (excluding docker integration tests)
|
||||
CMD ["pytest", "backend/tests/", "-v", "--tb=short", "-p", "no:cacheprovider"]
|
||||
# Use -n auto for parallel execution (auto-detects available CPUs)
|
||||
CMD ["pytest", "backend/tests/", "-v", "--tb=short", "-p", "no:cacheprovider", "-n", "auto"]
|
||||
|
||||
# -------------------------------------------
|
||||
# Frontend test stage
|
||||
|
||||
@@ -56,7 +56,7 @@ services:
|
||||
environment:
|
||||
- BAMBUDDY_TEST_URL=http://integration:8000
|
||||
- TESTING=1
|
||||
command: ["pytest", "backend/tests/integration/", "-v", "--tb=short", "-p", "no:cacheprovider"]
|
||||
command: ["pytest", "backend/tests/integration/", "-v", "--tb=short", "-p", "no:cacheprovider", "-n", "auto"]
|
||||
volumes:
|
||||
- ./backend:/app/backend:ro
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
pytest>=8.0.0
|
||||
pytest-asyncio>=0.23.0
|
||||
pytest-cov>=4.1.0
|
||||
pytest-xdist>=3.5.0
|
||||
httpx>=0.27.0
|
||||
ruff>=0.8.0
|
||||
|
||||
+58
-33
@@ -9,6 +9,10 @@ set -e
|
||||
# Configuration
|
||||
PORT=${PORT:-8000}
|
||||
|
||||
# Enable BuildKit for better caching and parallel builds
|
||||
export DOCKER_BUILDKIT=1
|
||||
export COMPOSE_DOCKER_CLI_BUILD=1
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
@@ -57,6 +61,7 @@ RUN_BUILD=true
|
||||
RUN_BACKEND=true
|
||||
RUN_FRONTEND=true
|
||||
RUN_INTEGRATION=true
|
||||
FRESH_BUILD=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
@@ -92,6 +97,10 @@ while [[ $# -gt 0 ]]; do
|
||||
RUN_INTEGRATION=false
|
||||
shift
|
||||
;;
|
||||
--fresh)
|
||||
FRESH_BUILD=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
@@ -102,6 +111,7 @@ while [[ $# -gt 0 ]]; do
|
||||
echo " --integration-only Only run integration tests"
|
||||
echo " --skip-build Skip build test"
|
||||
echo " --skip-integration Skip integration tests"
|
||||
echo " --fresh Force fresh build (no cache)"
|
||||
echo " -h, --help Show this help"
|
||||
exit 0
|
||||
;;
|
||||
@@ -112,16 +122,50 @@ while [[ $# -gt 0 ]]; do
|
||||
esac
|
||||
done
|
||||
|
||||
# Set cache flag based on --fresh option
|
||||
CACHE_FLAG=""
|
||||
if [ "$FRESH_BUILD" = true ]; then
|
||||
CACHE_FLAG="--no-cache"
|
||||
print_info "Fresh build enabled (--no-cache)"
|
||||
fi
|
||||
|
||||
print_header "BamBuddy Docker Test Suite"
|
||||
|
||||
# ============================================
|
||||
# Test 1: Docker Build
|
||||
# Pre-build: Build all test images in parallel
|
||||
# ============================================
|
||||
print_header "Pre-building Docker Images"
|
||||
|
||||
# Determine which images to build
|
||||
IMAGES_TO_BUILD=""
|
||||
if [ "$RUN_BACKEND" = true ]; then
|
||||
IMAGES_TO_BUILD="$IMAGES_TO_BUILD backend-test"
|
||||
fi
|
||||
if [ "$RUN_FRONTEND" = true ]; then
|
||||
IMAGES_TO_BUILD="$IMAGES_TO_BUILD frontend-test"
|
||||
fi
|
||||
if [ "$RUN_INTEGRATION" = true ]; then
|
||||
IMAGES_TO_BUILD="$IMAGES_TO_BUILD integration integration-test-runner"
|
||||
fi
|
||||
|
||||
if [ -n "$IMAGES_TO_BUILD" ]; then
|
||||
print_info "Building test images in parallel:$IMAGES_TO_BUILD"
|
||||
if sudo docker compose -f docker-compose.test.yml build --parallel $CACHE_FLAG $IMAGES_TO_BUILD; then
|
||||
print_success "Test images built successfully"
|
||||
else
|
||||
print_failure "Test image build failed"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# ============================================
|
||||
# Test 1: Docker Build (Production Image)
|
||||
# ============================================
|
||||
if [ "$RUN_BUILD" = true ]; then
|
||||
print_header "Test 1: Docker Build"
|
||||
print_header "Test 1: Docker Build (Production)"
|
||||
print_info "Building production Docker image..."
|
||||
|
||||
if sudo docker build -t bambuddy:test . --pull --no-cache --progress=plain; then
|
||||
if sudo docker build -t bambuddy:test . $CACHE_FLAG --progress=plain; then
|
||||
print_success "Production image builds successfully"
|
||||
|
||||
# Verify image has expected labels/structure
|
||||
@@ -147,17 +191,11 @@ fi
|
||||
# ============================================
|
||||
if [ "$RUN_BACKEND" = true ]; then
|
||||
print_header "Test 2: Backend Unit Tests"
|
||||
print_info "Building backend test image..."
|
||||
|
||||
if sudo docker compose -f docker-compose.test.yml build backend-test --pull --no-cache --progress=plain; then
|
||||
print_info "Running backend tests..."
|
||||
if sudo docker compose -f docker-compose.test.yml run --rm backend-test; then
|
||||
print_success "Backend unit tests passed"
|
||||
else
|
||||
print_failure "Backend unit tests failed"
|
||||
fi
|
||||
print_info "Running backend tests..."
|
||||
if sudo docker compose -f docker-compose.test.yml run --rm backend-test; then
|
||||
print_success "Backend unit tests passed"
|
||||
else
|
||||
print_failure "Backend test image build failed"
|
||||
print_failure "Backend unit tests failed"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -166,17 +204,11 @@ fi
|
||||
# ============================================
|
||||
if [ "$RUN_FRONTEND" = true ]; then
|
||||
print_header "Test 3: Frontend Unit Tests"
|
||||
print_info "Building frontend test image..."
|
||||
|
||||
if sudo docker compose -f docker-compose.test.yml build frontend-test --pull --no-cache --progress=plain; then
|
||||
print_info "Running frontend tests..."
|
||||
if sudo docker compose -f docker-compose.test.yml run --rm frontend-test; then
|
||||
print_success "Frontend unit tests passed"
|
||||
else
|
||||
print_failure "Frontend unit tests failed"
|
||||
fi
|
||||
print_info "Running frontend tests..."
|
||||
if sudo docker compose -f docker-compose.test.yml run --rm frontend-test; then
|
||||
print_success "Frontend unit tests passed"
|
||||
else
|
||||
print_failure "Frontend test image build failed"
|
||||
print_failure "Frontend unit tests failed"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -185,16 +217,10 @@ fi
|
||||
# ============================================
|
||||
if [ "$RUN_INTEGRATION" = true ]; then
|
||||
print_header "Test 4: Integration Tests"
|
||||
print_info "Building integration container..."
|
||||
print_info "Starting application container..."
|
||||
|
||||
# Build the integration container first to ensure latest code
|
||||
if ! sudo docker compose -f docker-compose.test.yml build integration --pull --no-cache --progress=plain; then
|
||||
print_failure "Integration container build failed"
|
||||
else
|
||||
print_info "Starting application container..."
|
||||
|
||||
# Start the integration container
|
||||
sudo docker compose -f docker-compose.test.yml up --remove-orphans -d integration
|
||||
# Start the integration container
|
||||
sudo docker compose -f docker-compose.test.yml up --remove-orphans -d integration
|
||||
|
||||
# Wait for health check
|
||||
print_info "Waiting for application to be healthy..."
|
||||
@@ -248,7 +274,6 @@ if [ "$RUN_INTEGRATION" = true ]; then
|
||||
print_info "No Docker-specific integration tests found (this is OK)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Cleanup integration containers
|
||||
sudo docker compose -f docker-compose.test.yml down -v
|
||||
|
||||
Reference in New Issue
Block a user