✨ New features: - Add CLI tool for container command execution - Reorganize all scripts into bin/ directory - Create convenient wrappers in project root - Add local changes auto-commit functionality - Enhanced backup repository management 📁 Structure changes: - Move all scripts to bin/ directory - Create wrapper scripts in root (cli, update, start, stop, logs) - Add setup-backup.sh for backup repository management - Update documentation with new CLI examples 🛠️ CLI capabilities: - Django commands (shell, migrate, collectstatic, etc.) - System commands (bash, logs, status) - Container management (restart, status) - Interactive and non-interactive modes 📚 Documentation: - Updated SCRIPTS_README.md with CLI examples - Added troubleshooting section - Comprehensive usage examples
157 lines
5.1 KiB
Bash
Executable File
157 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# =============================================================================
|
||
# SmartSolTech - Настройка резервного репозитория
|
||
# =============================================================================
|
||
|
||
set -e
|
||
|
||
# Цвета для вывода
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
RED='\033[0;31m'
|
||
NC='\033[0m'
|
||
|
||
log() {
|
||
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||
}
|
||
|
||
success() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
echo ""
|
||
echo "🔧 SmartSolTech - Настройка backup репозитория"
|
||
echo "=============================================="
|
||
echo ""
|
||
|
||
# Проверка что мы в Git репозитории
|
||
if [ ! -d ".git" ]; then
|
||
error "Не найден Git репозиторий. Запустите скрипт из корня проекта."
|
||
exit 1
|
||
fi
|
||
|
||
# Показать текущие репозитории
|
||
log "Текущие удаленные репозитории:"
|
||
git remote -v
|
||
echo ""
|
||
|
||
# Функция добавления нового backup репозитория
|
||
add_backup_repo() {
|
||
local repo_url="$1"
|
||
local repo_name="${2:-backup}"
|
||
|
||
log "Добавление backup репозитория..."
|
||
|
||
# Проверяем не существует ли уже такой remote
|
||
if git remote | grep -q "^${repo_name}$"; then
|
||
warning "Репозиторий $repo_name уже существует"
|
||
git remote -v | grep "^${repo_name}"
|
||
read -p "Заменить? (y/N): " replace_choice
|
||
if [[ $replace_choice =~ ^[Yy]$ ]]; then
|
||
git remote remove $repo_name
|
||
else
|
||
return 0
|
||
fi
|
||
fi
|
||
|
||
# Добавляем новый remote
|
||
if git remote add $repo_name "$repo_url"; then
|
||
success "Backup репозиторий $repo_name добавлен"
|
||
|
||
# Проверяем подключение
|
||
log "Проверка подключения..."
|
||
if git ls-remote $repo_name > /dev/null 2>&1; then
|
||
success "Подключение к $repo_name работает"
|
||
|
||
# Предлагаем сделать первый push
|
||
read -p "Отправить текущее состояние в backup? (y/N): " push_choice
|
||
if [[ $push_choice =~ ^[Yy]$ ]]; then
|
||
git push $repo_name master
|
||
success "Backup создан в $repo_name"
|
||
fi
|
||
else
|
||
error "Не удалось подключиться к $repo_name"
|
||
git remote remove $repo_name
|
||
return 1
|
||
fi
|
||
else
|
||
error "Не удалось добавить backup репозиторий"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# Обработка параметров
|
||
case "${1:-}" in
|
||
--help|-h)
|
||
echo "Использование:"
|
||
echo " $0 # Интерактивная настройка"
|
||
echo " $0 <URL> # Добавить backup репозиторий"
|
||
echo " $0 <URL> <name> # Добавить с именем"
|
||
echo " $0 --remove <name> # Удалить backup репозиторий"
|
||
echo " $0 --list # Показать все репозитории"
|
||
echo ""
|
||
echo "Примеры:"
|
||
echo " $0 git@github.com:user/backup.git"
|
||
echo " $0 git@server.com:backup.git mybkp"
|
||
echo " $0 --remove backup"
|
||
echo ""
|
||
exit 0
|
||
;;
|
||
--list)
|
||
log "Все удаленные репозитории:"
|
||
git remote -v
|
||
exit 0
|
||
;;
|
||
--remove)
|
||
if [ -z "$2" ]; then
|
||
error "Укажите имя репозитория для удаления"
|
||
exit 1
|
||
fi
|
||
log "Удаление репозитория $2..."
|
||
if git remote remove "$2"; then
|
||
success "Репозиторий $2 удален"
|
||
else
|
||
error "Не удалось удалить репозиторий $2"
|
||
fi
|
||
exit 0
|
||
;;
|
||
"")
|
||
# Интерактивный режим
|
||
echo "💡 Примеры URL репозиториев:"
|
||
echo " git@github.com:username/repo-backup.git"
|
||
echo " ssh://git@server.com:2222/user/backup.git"
|
||
echo " https://github.com/username/repo-backup.git"
|
||
echo ""
|
||
|
||
read -p "Введите URL backup репозитория: " repo_url
|
||
if [ -z "$repo_url" ]; then
|
||
warning "URL не указан, выход"
|
||
exit 0
|
||
fi
|
||
|
||
read -p "Введите имя (backup): " repo_name
|
||
repo_name="${repo_name:-backup}"
|
||
|
||
add_backup_repo "$repo_url" "$repo_name"
|
||
;;
|
||
*)
|
||
# URL передан как параметр
|
||
add_backup_repo "$1" "$2"
|
||
;;
|
||
esac
|
||
|
||
echo ""
|
||
log "Обновленный список репозиториев:"
|
||
git remote -v
|
||
echo ""
|
||
success "Готово!" |