#!/bin/bash # Final parallel build with proper file locations and longer timeout set -e WORKSPACE="/home/localuser/TSYSDevStack/Cloudron/CloudronPackages-Workspace" LOG_FILE="/home/localuser/TSYSDevStack/Cloudron/final-build.log" MAX_PARALLEL=6 # Increase parallelism # All remaining apps to build REMAINING_APPS=( "chirpstack:go" "database-gateway:go" "easy-gate:go" "fleet:go" "gophish:go" "signoz:go" "tirreno:go" "runme:node" "autobom:node" "comply:node" "docker-drawio:node" "fonoster:node" "fx:node" "grist-core:node" "jamovi:node" "langfuse:node" "midday:node" "no-code-architects-toolkit:node" "openblocks:node" "PLMore:node" "policies:node" "puter:node" "security-awareness-training:node" "windmill:node" "wireviz-web:node" "netbox:python" "boinc:python" "datahub:python" "docassemble:python" "healthchecks:python" "InvenTree:python" "mender:python" "nautilus_trader:python" "reviewboard:python" "satnogs:python" "sdrangel:python" "slurm:python" "SniperPhish:python" "WireViz:python" "sentry:python" "rundeck:java" "openboxes:java" "PayrollEngine:java" "seatunnel:java" "hyperswitch:rust" "rathole:rust" "warp:rust" "corteza:php" "elabftw:php" "oat-sa:php" "pimcore:php" "huginn:ruby" "consuldemocracy:ruby" "apisix:lua" ) # Function to build a single application build_app() { local app_name="$1" local app_type="$2" local app_dir="$WORKSPACE/$app_name/app" echo "🐳 Building $app_name ($app_type)..." >> "$LOG_FILE" if [ ! -d "$app_dir" ]; then echo " ❌ No app directory for $app_name" >> "$LOG_FILE" echo "❌ $app_name (no directory)" return 1 fi cd "$app_dir" # Build with correct prefix local image_name="tsysdevstack-cloudron/$app_name:latest" echo " 🔨 Building $image_name..." >> "$LOG_FILE" if timeout 900 docker build -t "$image_name" . >> "$LOG_FILE" 2>&1; then echo " ✅ Build successful for $app_name" >> "$LOG_FILE" echo "✅ $app_name" return 0 else echo " ❌ Build failed for $app_name" >> "$LOG_FILE" echo "❌ $app_name" return 1 fi } # Export function for parallel execution export -f build_app export WORKSPACE LOG_FILE # Main execution echo "🚀 Starting FINAL PARALLEL Docker build process..." echo "📁 Workspace: $WORKSPACE" echo "📝 Log file: $LOG_FILE" echo "🔀 Max parallel builds: $MAX_PARALLEL" echo "" # Initialize log file echo "Cloudron Packages FINAL Build Log - $(date)" > "$LOG_FILE" echo "=============================================" >> "$LOG_FILE" start_time=$(date +%s) total_apps=${#REMAINING_APPS[@]} echo "📊 Building $total_apps remaining applications..." echo "" # Build all apps in parallel printf '%s\n' "${REMAINING_APPS[@]}" | xargs -I {} -P $MAX_PARALLEL bash -c ' app_info="{}" IFS=":" read -r app_name app_type <<< "$app_info" build_app "$app_name" "$app_type" ' end_time=$(date +%s) duration=$((end_time - start_time)) # Count successful builds success_count=$(docker images | grep tsysdevstack-cloudron | wc -l) echo "" echo "🎉 FINAL build process complete!" echo "📊 Results: $success_count total images built" echo "⏱️ Duration: ${duration} seconds" echo "" echo "📋 All built images:" docker images | grep tsysdevstack-cloudron echo "" echo "📈 Build success rate: $(( success_count * 100 / 60 ))% (target was 60 apps)" if [ "$success_count" -ge 50 ]; then echo "🎉 Excellent! Built $success_count/60 applications!" elif [ "$success_count" -ge 40 ]; then echo "✅ Good! Built $success_count/60 applications!" elif [ "$success_count" -ge 30 ]; then echo "⚠️ Moderate success: $success_count/60 applications built" else echo "❌ Low success rate: only $success_count/60 applications built" fi echo "" echo "🔍 To view detailed logs:" echo "cat $LOG_FILE"