nxtgauge-backend-rust/scripts/fast-build.sh
Ashwin Kumar c221173172 perf(build): ultra-fast builds with caching and optimized Dockerfiles
- Add Dockerfile.fast with cargo-chef and symbol stripping

- Add Dockerfile.superfast using pre-built base image

- Add Dockerfile.base for dependency caching

- Update Woodpecker with registry cache (cache_from/cache_to)

- Add fast-build.sh for local ultra-fast builds

- Add build-base-image.sh for one-time dependency build

- Enable BuildKit layer caching in CI
2026-04-10 05:43:34 +02:00

93 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
# fast-build.sh - Ultra-fast local builds with smart caching
# Usage: ./scripts/fast-build.sh [service-name]
set -e
REGISTRY="ghcr.io/traceworks2023"
SERVICE=${1:-""}
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${BLUE}🚀 Nxtgauge Fast Build System${NC}"
echo "================================"
# If no service specified, detect changes
if [ -z "$SERVICE" ]; then
echo "🔍 Detecting changed services..."
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "")
# Check if shared crates changed
if echo "$CHANGED_FILES" | grep -q "^crates/"; then
echo -e "${YELLOW}⚠️ Shared crates changed - need full rebuild${NC}"
echo "Consider running: ./scripts/build-base-image.sh"
fi
# Find changed services
for svc in 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; do
svc_path=$(echo "$svc" | tr '_' '-')
if echo "$CHANGED_FILES" | grep -q "^apps/${svc_path}/"; then
echo -e "${GREEN}$svc changed${NC}"
SERVICE="$svc"
break
fi
done
if [ -z "$SERVICE" ]; then
echo -e "${YELLOW}No services changed. Specify one:${NC}"
echo "./scripts/fast-build.sh users"
exit 0
fi
echo ""
echo -e "${BLUE}Building: $SERVICE${NC}"
fi
# Check if base image exists
if ! docker image inspect ghcr.io/traceworks2023/nxtgauge-rust-base:latest &>/dev/null; then
echo -e "${YELLOW}⚠️ Base image not found. Building dependencies...${NC}"
echo "This will take 10-15 minutes (one-time setup)"
./scripts/build-base-image.sh
fi
# Use the fastest Dockerfile available
if [ -f "Dockerfile.superfast" ]; then
DOCKERFILE="Dockerfile.superfast"
echo -e "${BLUE}Using superfast build (cached dependencies)${NC}"
else
DOCKERFILE="Dockerfile.fast"
echo -e "${BLUE}Using fast build (cargo-chef)${NC}"
fi
echo ""
echo "🔨 Building ${SERVICE}..."
# Build with cache
docker build \
--build-arg SERVICE_NAME=${SERVICE} \
-f ${DOCKERFILE} \
--cache-from ${REGISTRY}/nxtgauge-rust-${SERVICE}:cache \
--cache-from ${REGISTRY}/nxtgauge-rust-${SERVICE}:latest \
--build-arg BUILDKIT_INLINE_CACHE=1 \
-t ${REGISTRY}/nxtgauge-rust-${SERVICE}:fast-build \
.
# Show image size
SIZE=$(docker images --format "{{.Size}}" ${REGISTRY}/nxtgauge-rust-${SERVICE}:fast-build)
echo ""
echo -e "${GREEN}✅ Build complete!${NC}"
echo " Service: ${SERVICE}"
echo " Image: ${REGISTRY}/nxtgauge-rust-${SERVICE}:fast-build"
echo " Size: ${SIZE}"
echo ""
echo -e "${BLUE}Push to registry:${NC}"
echo " docker push ${REGISTRY}/nxtgauge-rust-${SERVICE}:fast-build"
echo ""
echo -e "${BLUE}Test locally:${NC}"
echo " docker run -p 9100:9100 ${REGISTRY}/nxtgauge-rust-${SERVICE}:fast-build"