You've already forked Atomcms-edit
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:
+182
-52
@@ -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}"
|
||||
# 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_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_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_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_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 -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
|
||||
# =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user