feat: Synchronisation Git automatique des sous-repositories
Amélioration du script check-config.sh pour gérer automatiquement le clonage et la mise à jour des repositories NationsGlory_ServeurBuild_Red et WebNationsGlory_ServeurBuild_Red. Nouveautés: - Clone automatique si repositories absents - Pull automatique si mises à jour disponibles - Détection de conflits et modifications locales - Configuration via repos.conf (template fourni) - Documentation dans GIT_SYNC.md Permet un déploiement simplifié sur nouvelle machine et des mises à jour automatisées en production.
This commit is contained in:
103
check-config.sh
103
check-config.sh
@@ -3,6 +3,7 @@
|
||||
#######################################
|
||||
# Script de vérification de configuration
|
||||
# Vérifie que tout est prêt pour le déploiement
|
||||
# Clone ou met à jour les repositories si nécessaire
|
||||
#######################################
|
||||
|
||||
# Ne pas utiliser set -e car on veut continuer malgré les erreurs
|
||||
@@ -13,6 +14,7 @@ RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
ERRORS=0
|
||||
@@ -36,16 +38,117 @@ log_error() {
|
||||
((ERRORS++))
|
||||
}
|
||||
|
||||
log_action() {
|
||||
echo -e "${CYAN}[→]${NC} $1"
|
||||
}
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
MC_SERVER_DIR="${SCRIPT_DIR}/NationsGlory_ServeurBuild_Red"
|
||||
WEB_ADMIN_DIR="${SCRIPT_DIR}/WebNationsGlory_ServeurBuild_Red"
|
||||
|
||||
# Charger la configuration des repos
|
||||
REPOS_CONF="${SCRIPT_DIR}/repos.conf"
|
||||
if [ -f "$REPOS_CONF" ]; then
|
||||
source "$REPOS_CONF"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "═══════════════════════════════════════════════════════"
|
||||
log_info " Vérification de Configuration - NationsGlory"
|
||||
log_info "═══════════════════════════════════════════════════════"
|
||||
echo ""
|
||||
|
||||
# Vérification Git
|
||||
log_info "Vérification de Git..."
|
||||
if command -v git &> /dev/null; then
|
||||
log_success "Git installé: $(git --version | head -n1)"
|
||||
else
|
||||
log_error "Git n'est pas installé"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Fonction pour cloner ou mettre à jour un repository
|
||||
sync_repository() {
|
||||
local repo_url="$1"
|
||||
local target_dir="$2"
|
||||
local repo_name="$3"
|
||||
local branch="${4:-main}"
|
||||
|
||||
if [ -z "$repo_url" ] || [ "$repo_url" == "git@192.168.1.195:/path/to/"* ]; then
|
||||
log_warning "URL du repository $repo_name non configurée dans repos.conf"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -d "$target_dir/.git" ]; then
|
||||
log_info "Repository $repo_name existe, vérification des mises à jour..."
|
||||
cd "$target_dir"
|
||||
|
||||
# Récupérer les informations du remote
|
||||
git fetch origin &>/dev/null
|
||||
|
||||
# Vérifier s'il y a des changements
|
||||
LOCAL=$(git rev-parse @)
|
||||
REMOTE=$(git rev-parse @{u} 2>/dev/null || echo "")
|
||||
|
||||
if [ -z "$REMOTE" ]; then
|
||||
log_warning "$repo_name: Impossible de vérifier les mises à jour (pas de tracking branch)"
|
||||
elif [ "$LOCAL" = "$REMOTE" ]; then
|
||||
log_success "$repo_name est à jour"
|
||||
else
|
||||
log_action "Mise à jour de $repo_name disponible..."
|
||||
|
||||
# Vérifier s'il y a des modifications locales
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
log_warning "$repo_name a des modifications locales non commitées"
|
||||
log_info "Pour mettre à jour, committez ou annulez vos modifications"
|
||||
else
|
||||
log_action "Mise à jour de $repo_name..."
|
||||
if git pull origin "$branch" &>/dev/null; then
|
||||
log_success "$repo_name mis à jour avec succès"
|
||||
else
|
||||
log_error "Échec de la mise à jour de $repo_name"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
elif [ -d "$target_dir" ]; then
|
||||
log_warning "$target_dir existe mais n'est pas un repository Git"
|
||||
log_info "Pour le convertir en repository Git, supprimez-le et relancez ce script"
|
||||
else
|
||||
log_action "Clonage de $repo_name depuis $repo_url..."
|
||||
if git clone "$repo_url" "$target_dir" &>/dev/null; then
|
||||
log_success "$repo_name cloné avec succès"
|
||||
else
|
||||
log_error "Échec du clonage de $repo_name"
|
||||
log_info "Vérifiez l'URL dans repos.conf et vos accès Git"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Synchronisation des repositories
|
||||
log_info "Synchronisation des repositories..."
|
||||
echo ""
|
||||
|
||||
log_info "→ Serveur Minecraft"
|
||||
if [ -n "$MC_SERVER_REPO" ]; then
|
||||
sync_repository "$MC_SERVER_REPO" "$MC_SERVER_DIR" "NationsGlory Serveur MC" "${DEFAULT_BRANCH:-main}"
|
||||
else
|
||||
log_warning "MC_SERVER_REPO non défini dans repos.conf"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
log_info "→ Application Web Admin"
|
||||
if [ -n "$WEB_ADMIN_REPO" ]; then
|
||||
sync_repository "$WEB_ADMIN_REPO" "$WEB_ADMIN_DIR" "Web Admin" "${DEFAULT_BRANCH:-main}"
|
||||
else
|
||||
log_warning "WEB_ADMIN_REPO non défini dans repos.conf"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Vérification Docker
|
||||
log_info "Vérification de Docker..."
|
||||
if command -v docker &> /dev/null; then
|
||||
|
||||
Reference in New Issue
Block a user