diff --git a/update-Nitrov3.sh b/update-Nitrov3.sh index 2240647..9c28f36 100755 --- a/update-Nitrov3.sh +++ b/update-Nitrov3.sh @@ -1684,68 +1684,133 @@ git_update() { # ============================================================================= # MAIN INTERACTIVE MENU # ============================================================================= +detect_available_branches() { + local repos=("$EMULATOR_DIR/Emulator" "$NITRO_CLIENT" "$NITRO_RENDERER") + local result=() + for repo in "${repos[@]}"; do + [ -d "$repo/.git" ] || continue + for b in $(cd "$repo" && git branch -r 2>/dev/null | sed 's/origin\///' | xargs 2>/dev/null); do + local found=false + for ab in "${result[@]}"; do + [ "$ab" = "$b" ] && found=true && break + done + $found || result+=("$b") + done + done + printf '%s\n' "${result[@]}" +} + cmd_interactive() { while true; do show_banner - echo -e " ${C_BOLD}${C_CYAN}╔══════════════════════════════════════════════════════════════╗${C_RESET}" - echo -e " ${C_BOLD}${C_CYAN}║ MAIN CONTROL PANEL ║${C_RESET}" - echo -e " ${C_CYAN}╠══════════════════════════════════════════════════════════════╣${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_DIM}Branch: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET} │ Site: ${C_CYAN}${NITRO_SITE_URL:-?}${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}1)${C_RESET} ${E_ROCKET} Full Update ${C_DIM}(pull + build + deploy)${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}2)${C_RESET} ${E_GEAR} Update Emulator Only ${C_DIM}(Java backend)${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}3)${C_RESET} ${E_GEAR} Update Nitro-V3 Only ${C_DIM}(Frontend client)${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}4)${C_RESET} ${E_GEAR} Update Renderer Only ${C_DIM}(Nitro renderer)${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}5)${C_RESET} ${E_GEAR} Sync Configs Only ${C_DIM}(URL merge)${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_MAGENTA}${C_BOLD}6)${C_RESET} ${E_GIT} Switch Branch ${C_DIM}(main/dev/staging)${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}7)${C_RESET} ${E_DB} Database Manager ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}8)${C_RESET} ${E_SHIELD} Backup / Restore ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}9)${C_RESET} ${E_WRENCH} Service Manager ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}10)${C_RESET} ${E_CHART} System Status ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}11)${C_RESET} ${E_HEART} Health Check ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}12)${C_RESET} ${E_BROOM} Cache Cleanup ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}13)${C_RESET} ${E_EYE} View Logs ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}14)${C_RESET} ${E_GEAR} Configuration ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_RED}${C_BOLD}0)${C_RESET} Exit ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" - echo -e " ${C_CYAN}╚══════════════════════════════════════════════════════════════╝${C_RESET}" + # Detect available branches from repos + local AVAILABLE_BRANCHES=() + while IFS= read -r b; do + [ -n "$b" ] && AVAILABLE_BRANCHES+=("$b") + done < <(detect_available_branches) + + # Color current branch + local branch_display="${C_CYAN}${C_BOLD}${NITRO_BRANCH:-main}${C_RESET}" + local branch_count="${#AVAILABLE_BRANCHES[@]}" + local branch_list="${AVAILABLE_BRANCHES[*]}" + [ ${#branch_list} -gt 45 ] && branch_list="${branch_list:0:42}..." + + echo -e " ${C_CYAN}╔══════════════════════════════════════════════════════════════════╗${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_BOLD}${E_ROCKET} NITRO V3 CONTROL PANEL — $(date '+%H:%M')${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}╠══════════════════════════════════════════════════════════════════╣${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_BOLD}Current Settings:${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${E_GIT} Branch: ${branch_display} ${C_DIM}(${branch_count} branches detected)${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${E_CLOUD} Site: ${C_CYAN}${NITRO_SITE_URL:-?}${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_BG_GREEN}${C_BOLD} UPDATE ${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}1)${C_RESET} ${E_ROCKET} Quick Update — Branch: ${branch_display} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}2)${C_RESET} ${E_LIGHTNING} Full Update — everything (pull + build + deploy) ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}3)${C_RESET} ${E_GEAR} Emulator Only — Java backend build & deploy ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}4)${C_RESET} ${E_GEAR} Nitro-V3 Client Only — frontend build ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}5)${C_RESET} ${E_GEAR} Renderer Only — Nitro renderer install ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}6)${C_RESET} ${E_GEAR} Configs Only — URL sync & merge ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_BG_MAGENTA}${C_BOLD} TOOLS ${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_MAGENTA}${C_BOLD}7)${C_RESET} ${E_GIT} Switch Branch — select & apply to all repos ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}8)${C_RESET} ${E_DB} Database Manager — tables, optimize, queries ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}9)${C_RESET} ${E_SHIELD} Backup & Restore — create, restore, list ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}10)${C_RESET} ${E_WRENCH} Service Manager — start/stop/restart ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}11)${C_RESET} ${E_CHART} System Status — dashboard overview ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}12)${C_RESET} ${E_HEART} Health Check — comprehensive diagnostics ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}13)${C_RESET} ${E_BROOM} Cache Cleanup — yarn, redis, logs, temp ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}14)${C_RESET} ${E_EYE} View Logs — browse update history ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}15)${C_RESET} ${E_GEAR} Configuration — show all settings ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_RED}${C_BOLD}0)${C_RESET} Exit ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}╚══════════════════════════════════════════════════════════════════╝${C_RESET}" echo "" - echo -en " ${C_CYAN}${C_BOLD}Select [0-13]${C_RESET}: " + echo -en " ${C_CYAN}${C_BOLD}Select [0-15]${C_RESET}: " local choice read -r choice case "$choice" in - 1) SELECTIVE_UPDATE=""; cmd_update ;; - 2) SELECTIVE_UPDATE="emulator"; cmd_update ;; - 3) SELECTIVE_UPDATE="client"; cmd_update ;; - 4) SELECTIVE_UPDATE="renderer"; cmd_update ;; - 5) SELECTIVE_UPDATE="configs"; cmd_update ;; - 6) + 1) + # Quick update — uses current branch + SELECTIVE_UPDATE="" echo "" - echo -e " ${C_BOLD}Current branch: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET}" - echo "" - echo -e " ${C_GREEN}1)${C_RESET} main" - echo -e " ${C_GREEN}2)${C_RESET} dev" - echo -e " ${C_GREEN}3)${C_RESET} staging" - echo -e " ${C_GREEN}4)${C_RESET} Type custom branch name" - echo "" - echo -en " Select branch [1-4]: " - local branch_choice - read -r branch_choice - case "$branch_choice" in - 1) NITRO_BRANCH="main" ;; - 2) NITRO_BRANCH="dev" ;; - 3) NITRO_BRANCH="staging" ;; - 4) echo -en " Enter branch name: "; read -r NITRO_BRANCH ;; - *) warn "Invalid selection" ;; - esac - [ -n "${NITRO_BRANCH:-}" ] && ok "Branch set to: $NITRO_BRANCH" + info "Starting update on branch: ${C_BOLD}${NITRO_BRANCH:-main}${C_RESET}" + cmd_update ;; - 7) cmd_database ;; - 8) + 2) + # Full update — ask branch first + SELECTIVE_UPDATE="" + pick_branch_and_update + ;; + 3) + SELECTIVE_UPDATE="emulator" + pick_branch_and_update + ;; + 4) + SELECTIVE_UPDATE="client" + pick_branch_and_update + ;; + 5) + SELECTIVE_UPDATE="renderer" + pick_branch_and_update + ;; + 6) + SELECTIVE_UPDATE="configs" + pick_branch_and_update + ;; + 7) + # Switch branch submenu + echo "" + echo -e " ${C_BOLD}${C_CYAN}Switch Branch${C_RESET}" + echo -e " ${C_DIM}Currently: ${NITRO_BRANCH:-main}${C_RESET}" + echo "" + local i=1 + for b in "${AVAILABLE_BRANCHES[@]}"; do + local marker="" + [ "$b" = "${NITRO_BRANCH:-main}" ] && marker=" ${C_GREEN}(active)${C_RESET}" + echo -e " ${C_GREEN}${C_BOLD}$i)${C_RESET} $b$marker" + i=$((i + 1)) + done + echo -e " ${C_GREEN}${C_BOLD}$i)${C_RESET} Type custom branch name" + echo "" + echo -en " Select [1-$i]: " + local bc + read -r bc + if [[ "$bc" =~ ^[0-9]+$ ]] && [ "$bc" -ge 1 ] && [ "$bc" -lt "$i" ]; then + NITRO_BRANCH="${AVAILABLE_BRANCHES[$((bc-1))]}" + ok "Branch switched to: ${C_BOLD}$NITRO_BRANCH${C_RESET}" + elif [ "$bc" = "$i" ]; then + echo -en " Enter branch name: " + read -r NITRO_BRANCH + [ -n "$NITRO_BRANCH" ] && ok "Branch set to: ${C_BOLD}$NITRO_BRANCH${C_RESET}" + else + warn "Invalid selection" + fi + ;; + 8) cmd_database ;; + 9) local sub_choice sub_choice=$(select_menu "Backup & Restore" "Create Backup" "Restore Backup" "View Backups" "Return") case "$sub_choice" in @@ -1755,12 +1820,12 @@ cmd_interactive() { 4|*) ;; esac ;; - 9) cmd_services ;; - 10) cmd_status ;; - 11) cmd_health ;; - 12) cmd_clean ;; - 13) cmd_logs ;; - 14) cmd_config ;; + 10) cmd_services ;; + 11) cmd_status ;; + 12) cmd_health ;; + 13) cmd_clean ;; + 14) cmd_logs ;; + 15) cmd_config ;; 0|q|Q) echo -e "\n ${C_GREEN}Goodbye!${C_RESET}\n"; cursor_show; exit 0 ;; *) warn "Invalid selection" ;; esac @@ -1771,6 +1836,71 @@ cmd_interactive() { done } +# ============================================================================= +# BRANCH PICKER + UPDATE +# ============================================================================= +pick_branch_and_update() { + local mode="${SELECTIVE_UPDATE:-full}" + local mode_label="Full" + case "$mode" in + emulator) mode_label="Emulator Only" ;; + client) mode_label="Nitro-V3 Client Only" ;; + renderer) mode_label="Renderer Only" ;; + configs) mode_label="Configs Only" ;; + esac + + # Detect available branches + local BRANCHES=() + while IFS= read -r b; do + [ -n "$b" ] && BRANCHES+=("$b") + done < <(detect_available_branches) + + echo "" + echo -e " ${C_BOLD}${C_CYAN}╔═══════════════════════════════════════════════════════╗${C_RESET}" + echo -e " ${C_CYAN}║${C_RESET} ${C_BOLD}Update: ${C_GREEN}$mode_label${C_RESET} ${C_CYAN}║${C_RESET}" + echo -e " ${C_CYAN}╚═══════════════════════════════════════════════════════╝${C_RESET}" + echo "" + + # Branch selection + echo -e " ${C_BOLD}Select branch to update:${C_RESET}" + echo "" + local i=1 + for b in "${BRANCHES[@]}"; do + local marker="" + [ "$b" = "${NITRO_BRANCH:-main}" ] && marker=" ${C_GREEN}(current)${C_RESET}" + echo -e " ${C_GREEN}${C_BOLD}$i)${C_RESET} ${C_CYAN}$b${C_RESET}$marker" + i=$((i + 1)) + done + echo -e " ${C_GREEN}${C_BOLD}$i)${C_RESET} Type custom branch name" + echo "" + echo -en " Select [1-$i]: " + local bc + read -r bc + + if [[ "$bc" =~ ^[0-9]+$ ]] && [ "$bc" -ge 1 ] && [ "$bc" -lt "$i" ]; then + NITRO_BRANCH="${BRANCHES[$((bc-1))]}" + elif [ "$bc" = "$i" ]; then + echo -en " Enter branch name: " + read -r NITRO_BRANCH + [ -z "$NITRO_BRANCH" ] && NITRO_BRANCH="${NITRO_BRANCH:-main}" + else + warn "Invalid selection, using current branch: ${NITRO_BRANCH:-main}" + fi + + echo "" + echo -e " ${C_BOLD}Update Summary:${C_RESET}" + echo -e " ${E_GIT} Branch: ${C_CYAN}${C_BOLD}${NITRO_BRANCH}${C_RESET}" + echo -e " ${E_GEAR} Mode: ${C_GREEN}${C_BOLD}${mode_label}${C_RESET}" + echo -e " ${E_CLOUD} Site: ${C_CYAN}${NITRO_SITE_URL:-?}${C_RESET}" + echo "" + if ! confirm "Start update?"; then + info "Update cancelled." + return 0 + fi + + cmd_update +} + # ============================================================================= # COMMAND: HELP # =============================================================================