- 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
137 lines
3.1 KiB
Bash
Executable file
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
|