322 lines
10 KiB
Bash
Executable File
322 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
|
# ===================================================================
|
|
# Docker Versions Update Utility
|
|
# Updates central docker/versions.toml and syncs to 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"
|
|
VERSIONS_TOML="$DOCKER_DIR/versions.toml"
|
|
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 extract version from TOML file
|
|
get_version() {
|
|
local key=$1
|
|
grep "^$key = " "$VERSIONS_TOML" | sed 's/.*= "\(.*\)"/\1/' || echo ""
|
|
}
|
|
|
|
# Function to update version in TOML file
|
|
update_version() {
|
|
local key=$1
|
|
local new_value=$2
|
|
|
|
if grep -q "^$key = " "$VERSIONS_TOML"; then
|
|
# Update existing key
|
|
sed -i.bak "s/^$key = .*/$key = \"$new_value\"/" "$VERSIONS_TOML"
|
|
print_success "Updated $key to $new_value"
|
|
else
|
|
print_error "Key $key not found in $VERSIONS_TOML"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to sync TOML to environment files
|
|
sync_to_env_files() {
|
|
print_info "Syncing versions.toml to environment files..."
|
|
|
|
# Get current versions from TOML
|
|
# shellcheck disable=SC2155
|
|
local gradle_version=$(get_version "gradle")
|
|
# shellcheck disable=SC2155
|
|
local java_version=$(get_version "java")
|
|
# shellcheck disable=SC2155
|
|
local node_version=$(get_version "node")
|
|
# shellcheck disable=SC2155
|
|
local nginx_version=$(get_version "nginx")
|
|
# shellcheck disable=SC2155
|
|
local app_version=$(get_version "app-version")
|
|
# shellcheck disable=SC2155
|
|
local spring_default=$(get_version "spring-profiles-default")
|
|
# shellcheck disable=SC2155
|
|
local spring_docker=$(get_version "spring-profiles-docker")
|
|
# shellcheck disable=SC2155
|
|
local alpine_version=$(get_version "alpine")
|
|
local prometheus_version=$(get_version "prometheus")
|
|
local grafana_version=$(get_version "grafana")
|
|
local keycloak_version=$(get_version "keycloak")
|
|
|
|
# Update global.env
|
|
cat > "$BUILD_ARGS_DIR/global.env" << EOF
|
|
# ===================================================================
|
|
# Global Docker Build Arguments - Used by all categories
|
|
# Source: docker/versions.toml
|
|
# Last updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')
|
|
# ===================================================================
|
|
|
|
# --- Build Tools ---
|
|
GRADLE_VERSION=$gradle_version
|
|
JAVA_VERSION=$java_version
|
|
|
|
# --- Build Metadata ---
|
|
BUILD_DATE=\$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
|
VERSION=$app_version
|
|
|
|
# --- Common Base Images ---
|
|
ALPINE_VERSION=$alpine_version
|
|
ECLIPSE_TEMURIN_JDK_VERSION=$java_version-jdk-alpine
|
|
ECLIPSE_TEMURIN_JRE_VERSION=$java_version-jre-alpine
|
|
|
|
# --- Monitoring & Infrastructure Services ---
|
|
DOCKER_PROMETHEUS_VERSION=$prometheus_version
|
|
DOCKER_GRAFANA_VERSION=$grafana_version
|
|
DOCKER_KEYCLOAK_VERSION=$keycloak_version
|
|
EOF
|
|
print_success "Updated global.env"
|
|
|
|
# Update clients.env
|
|
cat > "$BUILD_ARGS_DIR/clients.env" << EOF
|
|
# ===================================================================
|
|
# Clients Docker Build Arguments - dockerfiles/clients/*
|
|
# Source: docker/versions.toml [categories.clients]
|
|
# Last updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')
|
|
# ===================================================================
|
|
|
|
# --- Include Global Arguments ---
|
|
# Source global.env for GRADLE_VERSION, JAVA_VERSION, BUILD_DATE, VERSION
|
|
|
|
# --- Client-Specific Build Tools ---
|
|
NODE_VERSION=$node_version
|
|
NGINX_VERSION=$nginx_version
|
|
|
|
# --- Client Build Configuration ---
|
|
CLIENT_PATH=client
|
|
CLIENT_MODULE=client
|
|
CLIENT_NAME=meldestelle-client
|
|
|
|
# --- Web Application Specific ---
|
|
WEB_APP_PORT=4000
|
|
WEB_APP_BUILD_TARGET=wasmJsBrowserDistribution
|
|
|
|
# --- Desktop Application Specific ---
|
|
DESKTOP_APP_VNC_PORT=5901
|
|
DESKTOP_APP_NOVNC_PORT=6080
|
|
DESKTOP_APP_BUILD_TARGET=composeDesktop
|
|
|
|
# --- Client Environment ---
|
|
NODE_ENV=production
|
|
APP_TITLE=Meldestelle
|
|
APP_VERSION=$app_version
|
|
|
|
# --- Development Configuration ---
|
|
WEBPACK_DEV_SERVER_HOST=0.0.0.0
|
|
WEBPACK_DEV_SERVER_PORT=4000
|
|
EOF
|
|
print_success "Updated clients.env"
|
|
|
|
# Update services.env
|
|
cat > "$BUILD_ARGS_DIR/services.env" << EOF
|
|
# ===================================================================
|
|
# Services Docker Build Arguments - dockerfiles/services/*
|
|
# Source: docker/versions.toml [categories.services]
|
|
# Last updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')
|
|
# ===================================================================
|
|
|
|
# --- Include Global Arguments ---
|
|
# Source global.env for GRADLE_VERSION, JAVA_VERSION, BUILD_DATE, VERSION
|
|
|
|
# --- Spring Boot Services Configuration ---
|
|
SPRING_PROFILES_ACTIVE=$spring_docker
|
|
|
|
# --- Service-Specific Arguments ---
|
|
SERVICE_PATH=.
|
|
SERVICE_NAME=spring-boot-service
|
|
SERVICE_PORT=8080
|
|
|
|
# --- Service Port Mapping (matches gradle.properties) ---
|
|
PING_SERVICE_PORT=8082
|
|
MEMBERS_SERVICE_PORT=8083
|
|
HORSES_SERVICE_PORT=8084
|
|
EVENTS_SERVICE_PORT=8085
|
|
MASTERDATA_SERVICE_PORT=8086
|
|
|
|
# --- Services List (for automation scripts) ---
|
|
# ping-service, members-service, horses-service, events-service, masterdata-service
|
|
EOF
|
|
print_success "Updated services.env"
|
|
|
|
# Update infrastructure.env
|
|
cat > "$BUILD_ARGS_DIR/infrastructure.env" << EOF
|
|
# ===================================================================
|
|
# Infrastructure Docker Build Arguments - dockerfiles/infrastructure/*
|
|
# Source: docker/versions.toml [categories.infrastructure]
|
|
# Last updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')
|
|
# ===================================================================
|
|
|
|
# --- Include Global Arguments ---
|
|
# Source global.env for GRADLE_VERSION, JAVA_VERSION, BUILD_DATE, VERSION
|
|
|
|
# --- Infrastructure Services Configuration ---
|
|
SPRING_PROFILES_ACTIVE=$spring_default
|
|
|
|
# --- Infrastructure Service Ports (matches gradle.properties) ---
|
|
GATEWAY_PORT=8081
|
|
AUTH_SERVER_PORT=8087
|
|
MONITORING_SERVER_PORT=8088
|
|
|
|
# --- API Gateway Specific ---
|
|
GATEWAY_SERVICE_PATH=infrastructure/gateway
|
|
GATEWAY_SERVICE_NAME=api-gateway
|
|
|
|
# --- Auth Server Specific ---
|
|
AUTH_SERVER_PATH=infrastructure/auth/auth-server
|
|
AUTH_SERVER_SERVICE_NAME=auth-server
|
|
|
|
# --- Monitoring Server Specific ---
|
|
MONITORING_SERVER_PATH=infrastructure/monitoring/monitoring-server
|
|
MONITORING_SERVER_SERVICE_NAME=monitoring-server
|
|
|
|
# --- Infrastructure Dependencies ---
|
|
CONSUL_ENABLED=true
|
|
CONSUL_HOST=consul
|
|
CONSUL_PORT=8500
|
|
|
|
# --- Database Configuration for Infrastructure Services ---
|
|
DB_HOST=postgres
|
|
DB_PORT=5432
|
|
DB_NAME=meldestelle
|
|
EOF
|
|
print_success "Updated infrastructure.env"
|
|
|
|
print_success "All environment files synced successfully!"
|
|
}
|
|
|
|
# Function to show current versions
|
|
show_current_versions() {
|
|
print_info "Current Docker versions:"
|
|
echo " Gradle: $(get_version "gradle")"
|
|
echo " Java: $(get_version "java")"
|
|
echo " Node.js: $(get_version "node")"
|
|
echo " Nginx: $(get_version "nginx")"
|
|
echo " Alpine: $(get_version "alpine")"
|
|
echo " Prometheus: $(get_version "prometheus")"
|
|
echo " Grafana: $(get_version "grafana")"
|
|
echo " Keycloak: $(get_version "keycloak")"
|
|
echo " App Version: $(get_version "app-version")"
|
|
echo " Spring Profile (Default): $(get_version "spring-profiles-default")"
|
|
echo " Spring Profile (Docker): $(get_version "spring-profiles-docker")"
|
|
}
|
|
|
|
# Function to show help
|
|
show_help() {
|
|
echo "Docker Versions Update Utility"
|
|
echo ""
|
|
echo "Usage: $0 [COMMAND] [OPTIONS]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " show Show current versions"
|
|
echo " sync Sync versions.toml to environment files"
|
|
echo " update <key> <version> Update specific version"
|
|
echo ""
|
|
echo "Available keys for update:"
|
|
echo " gradle Gradle version"
|
|
echo " java Java version"
|
|
echo " node Node.js version"
|
|
echo " nginx Nginx version"
|
|
echo " alpine Alpine Linux version"
|
|
echo " prometheus Prometheus version"
|
|
echo " grafana Grafana version"
|
|
echo " keycloak Keycloak version"
|
|
echo " app-version Application version"
|
|
echo " spring-profiles-default Default Spring profile"
|
|
echo " spring-profiles-docker Docker Spring profile"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 show # Show current versions"
|
|
echo " $0 update gradle 9.1.0 # Update Gradle to 9.1.0"
|
|
echo " $0 update java 22 # Update Java to version 22"
|
|
echo " $0 sync # Sync versions to environment files"
|
|
echo ""
|
|
echo "After updating versions, run 'sync' to update environment files"
|
|
echo "or use scripts/docker-build.sh to build with new versions."
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
# Check if versions.toml exists
|
|
if [[ ! -f "$VERSIONS_TOML" ]]; then
|
|
print_error "Versions file not found: $VERSIONS_TOML"
|
|
exit 1
|
|
fi
|
|
|
|
case $1 in
|
|
"show")
|
|
show_current_versions
|
|
;;
|
|
"sync")
|
|
sync_to_env_files
|
|
;;
|
|
"update")
|
|
if [[ $# -lt 3 ]]; then
|
|
print_error "Usage: $0 update <key> <version>"
|
|
exit 1
|
|
fi
|
|
update_version "$2" "$3"
|
|
sync_to_env_files
|
|
;;
|
|
"-h"|"--help"|"help")
|
|
show_help
|
|
;;
|
|
"")
|
|
print_error "No command specified"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
*)
|
|
print_error "Unknown command: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run main function with all arguments
|
|
main "$@"
|