#!/bin/bash # ============================================================================== # Post-receive hook для Gitea # Автоматически синхронизирует изменения с GitHub после push # # Установка: # 1. Разместить в: /path/to/gitea/data/gitea-repositories/username/repo.git/hooks/ # 2. Переименовать в: post-receive # 3. chmod +x post-receive # 4. Настроить переменные ниже # ============================================================================== # Конфигурация GITHUB_REPO="git@github.com:username/configure_nginx_manager.git" # Или с HTTPS и токеном: # GITHUB_REPO="https://YOUR_GITHUB_TOKEN@github.com/username/configure_nginx_manager.git" LOG_FILE="/var/log/gitea/github-sync.log" # Цвета для логов RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # ============================================================================== # Функция логирования # ============================================================================== log() { echo -e "${2:-$NC}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" | tee -a "$LOG_FILE" } # ============================================================================== # Основная логика # ============================================================================== log "═══════════════════════════════════════════════════════════════" "$GREEN" log "🔄 Начало синхронизации с GitHub" "$GREEN" log "═══════════════════════════════════════════════════════════════" "$GREEN" # Читаем информацию о push while read oldrev newrev refname; do log "📝 Изменения обнаружены:" "$YELLOW" log " Branch: ${refname#refs/heads/}" log " Old commit: ${oldrev:0:8}" log " New commit: ${newrev:0:8}" # Проверяем наличие GitHub remote if ! git remote | grep -q github; then log "➕ Добавление GitHub remote..." "$YELLOW" git remote add github "$GITHUB_REPO" 2>&1 | tee -a "$LOG_FILE" fi # Пушим в GitHub log "⬆️ Отправка изменений в GitHub..." "$YELLOW" # Только для main/master веток if [[ "$refname" == "refs/heads/main" ]] || [[ "$refname" == "refs/heads/master" ]]; then if git push github "$refname" --force 2>&1 | tee -a "$LOG_FILE"; then log "✅ Успешно синхронизировано с GitHub" "$GREEN" else log "❌ Ошибка при синхронизации с GitHub" "$RED" exit 1 fi # Пушим теги log "🏷️ Отправка тегов..." "$YELLOW" if git push github --tags 2>&1 | tee -a "$LOG_FILE"; then log "✅ Теги синхронизированы" "$GREEN" else log "⚠️ Не удалось синхронизировать теги" "$YELLOW" fi else log "ℹ️ Ветка ${refname#refs/heads/} игнорируется (не main/master)" "$YELLOW" fi done log "═══════════════════════════════════════════════════════════════" "$GREEN" log "✅ Синхронизация завершена" "$GREEN" log "═══════════════════════════════════════════════════════════════" "$GREEN" exit 0