Files
git.stella-ops.org/devops/docker/build-all-services.sh

72 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# Build all services from services-matrix.env one at a time.
# Usage: ./devops/docker/build-all-services.sh [start_from]
# start_from: 1-based index to resume from (default: 1)
set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
MATRIX="$SCRIPT_DIR/services-matrix.env"
START_FROM=${1:-1}
TAG="${IMAGE_TAG:-dev}"
cd "$REPO_ROOT"
# Parse services from matrix
mapfile -t SERVICES < <(grep -v '^#' "$MATRIX" | grep -v '^$')
TOTAL=${#SERVICES[@]}
echo "============================================="
echo " Building $TOTAL services (tag: $TAG)"
echo " Starting from: $START_FROM"
echo "============================================="
echo ""
FAILED=()
BUILT=0
SKIPPED=0
for i in "${!SERVICES[@]}"; do
IDX=$((i + 1))
if [[ $IDX -lt $START_FROM ]]; then
((SKIPPED++))
continue
fi
IFS='|' read -r SERVICE DOCKERFILE PROJECT BINARY PORT <<< "${SERVICES[$i]}"
echo "[$IDX/$TOTAL] Building $SERVICE..."
echo " Project: $PROJECT"
echo " Binary: $BINARY"
echo " Dockerfile: $DOCKERFILE"
BUILD_LOG=$(mktemp)
if docker build \
-f "$DOCKERFILE" \
--build-arg APP_PROJECT="$PROJECT" \
--build-arg APP_BINARY="$BINARY" \
--build-arg APP_PORT="$PORT" \
-t "stellaops/$SERVICE:$TAG" \
. > "$BUILD_LOG" 2>&1; then
echo " OK: stellaops/$SERVICE:$TAG"
((BUILT++))
else
echo " FAILED: $SERVICE"
echo " Last 10 lines of build log:"
tail -10 "$BUILD_LOG" | sed 's/^/ /'
FAILED+=("$SERVICE")
fi
rm -f "$BUILD_LOG"
echo ""
done
echo "============================================="
echo " Build complete"
echo " Built: $BUILT"
echo " Skipped: $SKIPPED"
echo " Failed: ${#FAILED[@]}"
if [[ ${#FAILED[@]} -gt 0 ]]; then
echo " Failed services: ${FAILED[*]}"
fi
echo "============================================="