#!/usr/bin/env bash set -euo pipefail REGISTRY="${1:-localhost:5005}" TAG="${2:-1.0.0}" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" RETRIES="${RETRIES:-6}" RETRY_DELAY_SEC="${RETRY_DELAY_SEC:-15}" retry_cmd() { local attempt=1 local max_attempts="$1" shift until "$@"; do if [ "${attempt}" -ge "${max_attempts}" ]; then echo "Command failed after ${attempt} attempts: $*" return 1 fi echo "Attempt ${attempt}/${max_attempts} failed: $*" attempt=$((attempt + 1)) sleep "${RETRY_DELAY_SEC}" done } prepull_base_images() { local images=( "eclipse-temurin:21-jre" "maven:3.9.11-eclipse-temurin-21" "python:3.12-slim" ) for image in "${images[@]}"; do echo "Pulling base image ${image}" retry_cmd "${RETRIES}" docker pull "${image}" done } build_and_push() { local image_name="$1" local context_dir="$2" local full_image="${REGISTRY}/${image_name}:${TAG}" echo "Building ${full_image}" retry_cmd "${RETRIES}" docker build -t "${full_image}" "${context_dir}" echo "Pushing ${full_image}" retry_cmd "${RETRIES}" docker push "${full_image}" } prepull_base_images build_and_push "otus/slave-maven" "${ROOT_DIR}/images/slave-maven" build_and_push "otus/slave-jjb" "${ROOT_DIR}/images/slave-jjb" build_and_push "otus/test-selenium" "${ROOT_DIR}/images/test-selenium" build_and_push "otus/test-api" "${ROOT_DIR}/images/test-api" build_and_push "otus/test-mobile" "${ROOT_DIR}/images/test-mobile"