#!/bin/bash # woodpecker-local-build.sh - Local testing of Woodpecker pipeline # Builds only changed services locally (no Woodpecker server needed) set -e REGISTRY="ghcr.io/traceworks2023" VERSION=${VERSION:-$(git rev-parse --short HEAD)} # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color SERVICES=( "gateway" "users" "companies" "job_seekers" "customers" "payments" "employees" "photographers" "makeup_artists" "tutors" "developers" "video_editors" "graphic_designers" "social_media_managers" "fitness_trainers" "catering_services" "ugc_content_creators" "cron" ) echo -e "${BLUE}🔍 Nxtgauge Local Build Script (Woodpecker Compatible)${NC}" echo "=============================================" # Get changed files CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "") if [ -z "$CHANGED_FILES" ]; then echo -e "${YELLOW}⚠️ No changes detected. Building all services...${NC}" BUILD_ALL=true else BUILD_ALL=false echo "Changed files:" echo "$CHANGED_FILES" | head -10 if [ $(echo "$CHANGED_FILES" | wc -l) -gt 10 ]; then echo "... and more" fi fi # Check if shared crates changed SHARED_CHANGED=false if echo "$CHANGED_FILES" | grep -q "^crates/"; then SHARED_CHANGED=true echo -e "${YELLOW}⚠️ Shared crates changed - will build all services${NC}" BUILD_ALL=true fi # Function to build a service build_service() { local service=$1 local tag="${REGISTRY}/nxtgauge-rust-${service}:${VERSION}" local latest="${REGISTRY}/nxtgauge-rust-${service}:latest" echo "" echo -e "${BLUE}🔨 Building ${service}...${NC}" # Build with optimized Dockerfile if docker build \ --build-arg SERVICE_NAME=${service} \ -f Dockerfile.optimized \ -t ${tag} \ -t ${latest} \ . 2>&1; then echo -e "${GREEN}✅ ${service} built successfully${NC}" echo " Image: ${tag}" # Show image size SIZE=$(docker images --format "{{.Size}}" ${tag}) echo " Size: ${SIZE}" return 0 else echo -e "${RED}❌ ${service} build failed${NC}" return 1 fi } # Track results BUILT=0 SKIPPED=0 FAILED=0 # Build each service for service in "${SERVICES[@]}"; do SERVICE_PATH=$(echo "$service" | tr '_' '-') if [ "$BUILD_ALL" = true ]; then SHOULD_BUILD=true else # Check if this service changed if echo "$CHANGED_FILES" | grep -q "^apps/${SERVICE_PATH}/"; then SHOULD_BUILD=true else SHOULD_BUILD=false fi fi if [ "$SHOULD_BUILD" = true ]; then if build_service "$service"; then BUILT=$((BUILT + 1)) else FAILED=$((FAILED + 1)) fi else echo -e "${YELLOW}⏭️ ${service} - no changes, skipping${NC}" SKIPPED=$((SKIPPED + 1)) fi done echo "" echo "=============================================" echo -e "${GREEN}✅ Built: ${BUILT}${NC}" echo -e "${YELLOW}⏭️ Skipped: ${SKIPPED}${NC}" if [ $FAILED -gt 0 ]; then echo -e "${RED}❌ Failed: ${FAILED}${NC}" exit 1 else echo -e "${GREEN}🎉 All builds successful!${NC}" fi