33800 Docs

← Retour
#!/bin/bash # ═══════════════════════════════════════════════════════════════════════════ # COMMON.SH - Fonctions utilitaires partagées # ═══════════════════════════════════════════════════════════════════════════ # Prefix pour identifier les logs (utilisé pour vérifier si common.sh est chargé) LOG_PREFIX="[smart-deploy]" # Couleurs (si terminal) if [[ -t 1 ]]; then RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color else RED='' GREEN='' YELLOW='' BLUE='' NC='' fi # ─────────────────────────────────────────────────────────────────────────── # Logging # ─────────────────────────────────────────────────────────────────────────── log_info() { echo -e "${BLUE}ℹ️ $*${NC}" } log_success() { echo -e "${GREEN}✅ $*${NC}" } log_warning() { echo -e "${YELLOW}⚠️ $*${NC}" } log_error() { echo -e "${RED}❌ $*${NC}" >&2 } log_step() { echo -e "${BLUE}▶️ $*${NC}" } log_debug() { # Affiche seulement si DEBUG=1 ou VERBOSE=1 if [[ "${DEBUG:-}" == "1" ]] || [[ "${VERBOSE:-}" == "1" ]]; then echo -e "${BLUE}🔍 $*${NC}" fi } log_warn() { # Alias pour log_warning log_warning "$@" } # ─────────────────────────────────────────────────────────────────────────── # Vérifications # ─────────────────────────────────────────────────────────────────────────── require_var() { local var_name="$1" local var_value="${!var_name:-}" if [[ -z "$var_value" ]]; then log_error "Variable requise non définie: $var_name" exit 1 fi } require_file() { local file_path="$1" if [[ ! -f "$file_path" ]]; then log_error "Fichier requis non trouvé: $file_path" exit 1 fi } require_command() { local cmd="$1" if ! command -v "$cmd" &> /dev/null; then log_error "Commande requise non trouvée: $cmd" exit 1 fi } # ─────────────────────────────────────────────────────────────────────────── # SSH / Remote # ─────────────────────────────────────────────────────────────────────────── ssh_exec() { local host="$1" local user="$2" shift 2 local cmd="$*" ssh -o StrictHostKeyChecking=no -o BatchMode=yes "${user}@${host}" "$cmd" } scp_file() { local src="$1" local host="$2" local user="$3" local dest="$4" scp -o StrictHostKeyChecking=no -o BatchMode=yes "$src" "${user}@${host}:${dest}" } rsync_dir() { local src="$1" local host="$2" local user="$3" local dest="$4" local extra_args="${5:-}" rsync -avz --delete $extra_args "$src" "${user}@${host}:${dest}" } # ─────────────────────────────────────────────────────────────────────────── # Timestamps # ─────────────────────────────────────────────────────────────────────────── timestamp() { date +"%Y-%m-%d_%H-%M-%S" } timestamp_short() { date +"%Y%m%d%H%M%S" } iso_timestamp() { date -u +"%Y-%m-%dT%H:%M:%SZ" } # ─────────────────────────────────────────────────────────────────────────── # JSON helpers # ─────────────────────────────────────────────────────────────────────────── json_set() { local file="$1" local key="$2" local value="$3" if [[ -f "$file" ]]; then jq --arg k "$key" --arg v "$value" '.[$k] = $v' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file" else echo "{\"$key\": \"$value\"}" > "$file" fi } json_get() { local file="$1" local key="$2" local default="${3:-}" if [[ -f "$file" ]]; then jq -r --arg k "$key" '.[$k] // empty' "$file" 2>/dev/null || echo "$default" else echo "$default" fi }