187 lines
5.7 KiB
Bash
Executable File
187 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# ===================================================================
|
|
# Docker Build Script with Centralized Version Management
|
|
# Automatically sources versions from docker/versions.toml via environment files
|
|
# ===================================================================
|
|
|
|
set -e
|
|
|
|
# Script directory and project root
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
DOCKER_DIR="$PROJECT_ROOT/docker"
|
|
BUILD_ARGS_DIR="$DOCKER_DIR/build-args"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored output
|
|
print_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Function to load environment files
|
|
load_env_files() {
|
|
print_info "Loading centralized Docker version environment files..."
|
|
|
|
# Load global environment variables
|
|
if [[ -f "$BUILD_ARGS_DIR/global.env" ]]; then
|
|
# shellcheck disable=SC2046
|
|
export $(grep -v '^#' "$BUILD_ARGS_DIR/global.env" | xargs)
|
|
print_info "✓ Loaded global.env"
|
|
else
|
|
print_error "Global environment file not found: $BUILD_ARGS_DIR/global.env"
|
|
exit 1
|
|
fi
|
|
|
|
# Load category-specific environment variables
|
|
for env_file in services.env clients.env infrastructure.env; do
|
|
if [[ -f "$BUILD_ARGS_DIR/$env_file" ]]; then
|
|
# shellcheck disable=SC2046
|
|
export $(grep -v '^#' "$BUILD_ARGS_DIR/$env_file" | xargs)
|
|
print_info "✓ Loaded $env_file"
|
|
else
|
|
print_warning "Optional environment file not found: $BUILD_ARGS_DIR/$env_file"
|
|
fi
|
|
done
|
|
|
|
# Set BUILD_DATE if not already set
|
|
export BUILD_DATE=${BUILD_DATE:-$(date -u +'%Y-%m-%dT%H:%M:%SZ')}
|
|
|
|
# Map to Docker Compose environment variables
|
|
export DOCKER_GRADLE_VERSION="${GRADLE_VERSION}"
|
|
export DOCKER_JAVA_VERSION="${JAVA_VERSION}"
|
|
export DOCKER_NODE_VERSION="${NODE_VERSION}"
|
|
export DOCKER_NGINX_VERSION="${NGINX_VERSION}"
|
|
export DOCKER_APP_VERSION="${VERSION}"
|
|
export DOCKER_SPRING_PROFILES_DEFAULT="${SPRING_PROFILES_ACTIVE:-default}"
|
|
export DOCKER_SPRING_PROFILES_DOCKER="docker"
|
|
|
|
print_success "All environment files loaded successfully!"
|
|
}
|
|
|
|
# Function to show current versions
|
|
show_versions() {
|
|
print_info "Current centralized Docker versions:"
|
|
echo " Gradle Version: ${DOCKER_GRADLE_VERSION:-not set}"
|
|
echo " Java Version: ${DOCKER_JAVA_VERSION:-not set}"
|
|
echo " Node Version: ${DOCKER_NODE_VERSION:-not set}"
|
|
echo " Nginx Version: ${DOCKER_NGINX_VERSION:-not set}"
|
|
echo " App Version: ${DOCKER_APP_VERSION:-not set}"
|
|
echo " Build Date: ${BUILD_DATE:-not set}"
|
|
echo " Spring Profile (Default): ${DOCKER_SPRING_PROFILES_DEFAULT:-not set}"
|
|
echo " Spring Profile (Docker): ${DOCKER_SPRING_PROFILES_DOCKER:-not set}"
|
|
}
|
|
|
|
# Function to build specific category
|
|
build_category() {
|
|
local category=$1
|
|
local compose_file=""
|
|
|
|
case $category in
|
|
"infrastructure")
|
|
compose_file="docker-compose.yml"
|
|
;;
|
|
"services")
|
|
compose_file="docker-compose.yml -f docker-compose.services.yml"
|
|
;;
|
|
"clients")
|
|
compose_file="docker-compose.yml -f docker-compose.clients.yml"
|
|
;;
|
|
"all")
|
|
compose_file="docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml"
|
|
;;
|
|
*)
|
|
print_error "Invalid category: $category"
|
|
print_info "Valid categories: infrastructure, services, clients, all"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
print_info "Building $category with centralized versions..."
|
|
cd "$PROJECT_ROOT"
|
|
|
|
if docker-compose -f $compose_file build; then
|
|
print_success "$category built successfully!"
|
|
else
|
|
print_error "Failed to build $category"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Help function
|
|
show_help() {
|
|
echo "Docker Build Script with Centralized Version Management"
|
|
echo ""
|
|
echo "Usage: $0 [OPTIONS] [CATEGORY]"
|
|
echo ""
|
|
echo "Categories:"
|
|
echo " infrastructure Build infrastructure services (API Gateway)"
|
|
echo " services Build application services (ping-service, etc.)"
|
|
echo " clients Build client applications (web-app, desktop-app)"
|
|
echo " all Build everything"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -v, --versions Show current versions"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 services # Build all services"
|
|
echo " $0 clients # Build client applications"
|
|
echo " $0 all # Build everything"
|
|
echo " $0 --versions # Show current versions"
|
|
echo ""
|
|
echo "The script automatically loads versions from:"
|
|
echo " - docker/build-args/global.env"
|
|
echo " - docker/build-args/services.env"
|
|
echo " - docker/build-args/clients.env"
|
|
echo " - docker/build-args/infrastructure.env"
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
# Parse command line arguments
|
|
case $1 in
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
-v|--versions)
|
|
load_env_files
|
|
show_versions
|
|
exit 0
|
|
;;
|
|
"")
|
|
print_error "No category specified"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
*)
|
|
# Load environment and build
|
|
load_env_files
|
|
show_versions
|
|
echo ""
|
|
build_category "$1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run main function with all arguments
|
|
main "$@"
|