72 lines
1.8 KiB
Bash
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 "============================================="
|