← 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
}