feat: update wizard with branch selection and mode summary

- Add pick_branch_and_update() wizard for all update options
- Auto-detect available branches from all git repos
- Show branch list with (current) marker for active branch
- Show update summary (branch, mode, site) before confirmation
- Add detect_available_branches() helper to avoid duplication
- Restructure menu: UPDATE / TOOLS categories with labels
- Option 1: Quick Update (uses current branch, no prompts)
- Options 2-6: Full/Selective update with branch picker
- Branch switcher shows all detected branches from repos
- Menu header shows current time, branch, and site URL
This commit is contained in:
root
2026-06-25 19:40:40 +02:00
parent ec81179376
commit e42354411a
+187 -57
View File
@@ -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
# =============================================================================