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:
+187
-57
@@ -1684,68 +1684,133 @@ git_update() {
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
# MAIN INTERACTIVE MENU
|
# 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() {
|
cmd_interactive() {
|
||||||
while true; do
|
while true; do
|
||||||
show_banner
|
show_banner
|
||||||
|
|
||||||
echo -e " ${C_BOLD}${C_CYAN}╔══════════════════════════════════════════════════════════════╗${C_RESET}"
|
# Detect available branches from repos
|
||||||
echo -e " ${C_BOLD}${C_CYAN}║ MAIN CONTROL PANEL ║${C_RESET}"
|
local AVAILABLE_BRANCHES=()
|
||||||
echo -e " ${C_CYAN}╠══════════════════════════════════════════════════════════════╣${C_RESET}"
|
while IFS= read -r b; do
|
||||||
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}"
|
[ -n "$b" ] && AVAILABLE_BRANCHES+=("$b")
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
done < <(detect_available_branches)
|
||||||
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}"
|
# Color current branch
|
||||||
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}"
|
local branch_display="${C_CYAN}${C_BOLD}${NITRO_BRANCH:-main}${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}"
|
local branch_count="${#AVAILABLE_BRANCHES[@]}"
|
||||||
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}"
|
local branch_list="${AVAILABLE_BRANCHES[*]}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
[ ${#branch_list} -gt 45 ] && branch_list="${branch_list:0:42}..."
|
||||||
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}"
|
||||||
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_BOLD}${E_ROCKET} NITRO V3 CONTROL PANEL — $(date '+%H:%M')${C_RESET} ${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}"
|
||||||
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_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_BOLD}Current Settings:${C_RESET} ${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} ${E_GIT} Branch: ${branch_display} ${C_DIM}(${branch_count} branches detected)${C_RESET} ${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} ${E_CLOUD} Site: ${C_CYAN}${NITRO_SITE_URL:-?}${C_RESET} ${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_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_RED}${C_BOLD}0)${C_RESET} Exit ${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_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}"
|
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 ""
|
||||||
echo -en " ${C_CYAN}${C_BOLD}Select [0-13]${C_RESET}: "
|
echo -en " ${C_CYAN}${C_BOLD}Select [0-15]${C_RESET}: "
|
||||||
local choice
|
local choice
|
||||||
read -r choice
|
read -r choice
|
||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1) SELECTIVE_UPDATE=""; cmd_update ;;
|
1)
|
||||||
2) SELECTIVE_UPDATE="emulator"; cmd_update ;;
|
# Quick update — uses current branch
|
||||||
3) SELECTIVE_UPDATE="client"; cmd_update ;;
|
SELECTIVE_UPDATE=""
|
||||||
4) SELECTIVE_UPDATE="renderer"; cmd_update ;;
|
|
||||||
5) SELECTIVE_UPDATE="configs"; cmd_update ;;
|
|
||||||
6)
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${C_BOLD}Current branch: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET}"
|
info "Starting update on branch: ${C_BOLD}${NITRO_BRANCH:-main}${C_RESET}"
|
||||||
echo ""
|
cmd_update
|
||||||
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"
|
|
||||||
;;
|
;;
|
||||||
7) cmd_database ;;
|
2)
|
||||||
8)
|
# 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
|
local sub_choice
|
||||||
sub_choice=$(select_menu "Backup & Restore" "Create Backup" "Restore Backup" "View Backups" "Return")
|
sub_choice=$(select_menu "Backup & Restore" "Create Backup" "Restore Backup" "View Backups" "Return")
|
||||||
case "$sub_choice" in
|
case "$sub_choice" in
|
||||||
@@ -1755,12 +1820,12 @@ cmd_interactive() {
|
|||||||
4|*) ;;
|
4|*) ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
9) cmd_services ;;
|
10) cmd_services ;;
|
||||||
10) cmd_status ;;
|
11) cmd_status ;;
|
||||||
11) cmd_health ;;
|
12) cmd_health ;;
|
||||||
12) cmd_clean ;;
|
13) cmd_clean ;;
|
||||||
13) cmd_logs ;;
|
14) cmd_logs ;;
|
||||||
14) cmd_config ;;
|
15) cmd_config ;;
|
||||||
0|q|Q) echo -e "\n ${C_GREEN}Goodbye!${C_RESET}\n"; cursor_show; exit 0 ;;
|
0|q|Q) echo -e "\n ${C_GREEN}Goodbye!${C_RESET}\n"; cursor_show; exit 0 ;;
|
||||||
*) warn "Invalid selection" ;;
|
*) warn "Invalid selection" ;;
|
||||||
esac
|
esac
|
||||||
@@ -1771,6 +1836,71 @@ cmd_interactive() {
|
|||||||
done
|
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
|
# COMMAND: HELP
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user