nxtgauge-backend-rust/scripts/woodpecker-local-build.sh
Ashwin Kumar e39ed36fcc feat(woodpecker): update CI pipeline with change detection and selective builds
- Update .woodpecker.yml with change detection step

- Add optimized Dockerfile.optimized support

- Add deployment step to Kubernetes

- Add woodpecker-local-build.sh for local testing

- Only build and deploy services with code changes

- Skip unchanged services for faster pipelines
2026-04-10 05:17:56 +02:00

137 lines
3.1 KiB
Bash
Executable file

#!/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