From bd028d09e665c4e952ef6648f155bb3af6ae64fb Mon Sep 17 00:00:00 2001 From: "Andrey K. Choi" Date: Tue, 25 Nov 2025 06:43:01 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Enhanced=20update=20script=20wit?= =?UTF-8?q?h=20remote=20repository=20selection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add support for origin/backup remote selection - Improved Git conflict handling - Enhanced backup functionality - Updated documentation with usage examples - Better error handling and validation --- SCRIPTS_README.md | 29 +++++++++++--- update.sh | 100 +++++++++++++++++++++++++++++++++------------- 2 files changed, 97 insertions(+), 32 deletions(-) diff --git a/SCRIPTS_README.md b/SCRIPTS_README.md index 567c440..51ccad9 100644 --- a/SCRIPTS_README.md +++ b/SCRIPTS_README.md @@ -7,7 +7,7 @@ ### πŸš€ `./update.sh` - ПолноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ВыполняСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» обновлСния: - Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ бэкапа Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ -- ОбновлСниС ΠΊΠΎΠ΄Π° ΠΈΠ· Git +- ОбновлСниС ΠΊΠΎΠ΄Π° ΠΈΠ· Git (origin ΠΈΠ»ΠΈ backup) - ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² - ΠŸΠ΅Ρ€Π΅ΡΠ±ΠΎΡ€ΠΊΠ° Docker ΠΎΠ±Ρ€Π°Π·ΠΎΠ² - Запуск Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² @@ -17,10 +17,29 @@ **ИспользованиС:** ```bash -./update.sh # ПолноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ -./update.sh --help # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ справку -./update.sh --logs # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π±Π΅Π· обновлСния -./update.sh --status # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статус сСрвисов +./update.sh # ОбновлСниС ΠΈΠ· origin (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) +./update.sh origin # ОбновлСниС ΠΈΠ· origin рСпозитория +./update.sh backup # ОбновлСниС ΠΈΠ· backup рСпозитория +./update.sh origin backup # ОбновлСниС ΠΈΠ· origin с бэкапом Π² backup +./update.sh backup origin # ОбновлСниС ΠΈΠ· backup с бэкапом Π² origin +./update.sh --help # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ справку +./update.sh --logs # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π±Π΅Π· обновлСния +./update.sh --status # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статус сСрвисов +``` + +**ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²:** +```bash +# Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· основного рСпозитория +./update.sh + +# ОбновлСниС ΠΈΠ· Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ рСпозитория (Ссли основной нСдоступСн) +./update.sh backup + +# ОбновлСниС ΠΈΠ· основного рСпозитория с созданиСм бэкапа Π² Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌ +./update.sh origin backup + +# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ сСрвСр с бэкапом Π² основной +./update.sh backup origin ``` ### ▢️ `./start.sh` - Быстрый запуск diff --git a/update.sh b/update.sh index 1a9297a..c709d86 100755 --- a/update.sh +++ b/update.sh @@ -66,22 +66,49 @@ cleanup_staticfiles() { # Ѐункция обновлСния ΠΊΠΎΠ΄Π° update_code() { - log "ОбновлСниС ΠΊΠΎΠ΄Π° ΠΈΠ· рСпозитория..." + local remote_name="${1:-origin}" + log "ОбновлСниС ΠΊΠΎΠ΄Π° ΠΈΠ· рСпозитория $remote_name..." - # БохраняСм измСнСния Ссли Π΅ΡΡ‚ΡŒ - if ! git diff --quiet; then + # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ сущСствованиС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория + if ! git remote | grep -q "^${remote_name}$"; then + error "Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ '$remote_name' Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½" + log "ДоступныС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ:" + git remote -v + return 1 + fi + + # НастраиваСм ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ pull Ссли Π½Π΅ настроСно + if [ -z "$(git config pull.rebase 2>/dev/null)" ]; then + log "НастраиваСм ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Git pull..." + git config pull.rebase false + fi + + # БохраняСм нСотслСТиваСмыС измСнСния + if [ -n "$(git status --porcelain)" ]; then warning "ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния, сохраняСм..." - git stash push -m "Auto stash before update $(date)" + git add . + git commit -m "Auto commit before update $(date '+%Y-%m-%d %H:%M:%S')" || true fi # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ обновлСния - git fetch origin + log "ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈΠ· $remote_name..." + git fetch $remote_name # ОбновляСм Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ - local current_branch=$(git rev-parse --abbrev-ref HEAD) - git pull origin $current_branch + local current_branch + current_branch=$(git rev-parse --abbrev-ref HEAD) - success "Код ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ с Π²Π΅Ρ‚ΠΊΠΈ $current_branch" + # ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² + if ! git pull $remote_name $current_branch; then + error "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹." + log "ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:" + log " git status" + log " git merge --abort # Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ" + log " git pull $remote_name $current_branch" + return 1 + fi + + success "Код ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ с Π²Π΅Ρ‚ΠΊΠΈ $current_branch ΠΈΠ· $remote_name" } # Ѐункция остановки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² @@ -191,9 +218,10 @@ show_logs() { # Ѐункция бэкапа Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ backup_to_remote() { - log "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ бэкапа Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ..." + local backup_remote="${1:-backup}" + log "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ бэкапа Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ $backup_remote..." - if git remote | grep -q "backup"; then + if git remote | grep -q "^${backup_remote}$"; then # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π΅ΡΡ‚ΡŒ Π»ΠΈ измСнСния для ΠΊΠΎΠΌΠΌΠΈΡ‚Π° if ! git diff --quiet || ! git diff --cached --quiet; then git add . @@ -201,18 +229,28 @@ backup_to_remote() { fi # ΠŸΡƒΡˆΠΈΠΌ Π² backup - git push backup master - success "Бэкап создан Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ" + if git push $backup_remote master; then + success "Бэкап создан Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ $backup_remote" + else + warning "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ бэкап Π² $backup_remote" + fi else - warning "Backup Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅ настроСн, пропускаСм" + warning "$backup_remote Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅ настроСн, пропускаСм" fi } # Главная функция main() { + local remote_source="${1:-origin}" + local backup_remote="${2:-backup}" + echo "" echo "πŸš€ SmartSolTech - АвтоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅" echo "==========================================" + echo "πŸ“‘ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: $remote_source" + if git remote | grep -q "^${backup_remote}$"; then + echo "πŸ’Ύ Бэкап: $backup_remote" + fi echo "" # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ @@ -221,13 +259,14 @@ main() { exit 1 fi - local start_time=$(date +%s) + local start_time + start_time=$(date +%s) # ВыполняСм всС этапы check_dependencies - backup_to_remote + backup_to_remote "$backup_remote" cleanup_staticfiles - update_code + update_code "$remote_source" stop_containers build_images start_containers @@ -235,12 +274,14 @@ main() { collect_static health_check - local end_time=$(date +%s) + local end_time + end_time=$(date +%s) local duration=$((end_time - start_time)) echo "" echo "πŸŽ‰ ОбновлСниС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ!" echo "⏱️ ВрСмя выполнСния: ${duration} сСкунд" + echo "πŸ“‘ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ обновлСния: $remote_source" echo "" echo "πŸ“Š ПолСзная информация:" echo " β€’ Π’Π΅Π±-сайт: http://localhost:8000" @@ -279,10 +320,19 @@ case "${1:-}" in echo "SmartSolTech - Π‘ΠΊΡ€ΠΈΠΏΡ‚ автоматичСского обновлСния" echo "" echo "ИспользованиС:" - echo " $0 - ПолноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)" - echo " $0 --help - ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ эту справку" - echo " $0 --logs - ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π±Π΅Π· обновлСния" - echo " $0 --status - ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статус Π±Π΅Π· обновлСния" + echo " $0 - ПолноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· origin (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)" + echo " $0 origin - ОбновлСниС ΠΈΠ· origin рСпозитория" + echo " $0 backup - ОбновлСниС ΠΈΠ· backup рСпозитория" + echo " $0 origin backup - ОбновлСниС ΠΈΠ· origin с бэкапом Π² backup" + echo " $0 backup origin - ОбновлСниС ΠΈΠ· backup с бэкапом Π² origin" + echo " $0 --help - ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ эту справку" + echo " $0 --logs - ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π±Π΅Π· обновлСния" + echo " $0 --status - ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статус Π±Π΅Π· обновлСния" + echo "" + echo "ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:" + echo " $0 # ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· origin" + echo " $0 backup # ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· backup рСпозитория" + echo " $0 origin backup # ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· origin, бэкап Π² backup" echo "" exit 0 ;; @@ -295,12 +345,8 @@ case "${1:-}" in health_check exit 0 ;; - "") - main - ;; *) - error "НСизвСстный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€: $1" - echo "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ --help для справки" - exit 1 + # ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² main + main "$@" ;; esac \ No newline at end of file