Files
postinstall-debian/menus/main.sh
2026-03-15 05:37:15 +01:00

163 lines
3.7 KiB
Bash

#!/usr/bin/env bash
menu_modules_by_prefix() {
local prefix="$1"
local title="$2"
local matching_modules=()
local module_id=""
local selection=""
local index=1
while IFS= read -r module_id; do
[[ "$module_id" == "$prefix"/* ]] || continue
matching_modules+=("$module_id")
done < <(registry_list)
if [[ "${#matching_modules[@]}" -eq 0 ]]; then
ui_warn "Aucun module disponible pour $title"
ui_pause
return 0
fi
ui_section "$title"
for module_id in "${matching_modules[@]}"; do
printf ' %d. %s\n' "$index" "$module_id"
index=$((index + 1))
done
printf ' 0. Retour\n'
selection="$(prompt_select_number "Selectionner un module" 0 "${#matching_modules[@]}")"
if [[ "$selection" == "0" ]]; then
return 0
fi
dispatcher_prompt_and_run_module "${matching_modules[$((selection - 1))]}"
ui_pause
}
menu_category_selection() {
local categories=("network" "containers" "boot" "hardware")
local selection=""
ui_section "Installation par categorie"
printf ' 1. network\n'
printf ' 2. containers\n'
printf ' 3. boot\n'
printf ' 4. hardware\n'
printf ' 0. Retour\n'
selection="$(prompt_select_number "Selectionner une categorie" 0 4)"
case "$selection" in
0) return 0 ;;
1) menu_modules_by_prefix "network" "Configuration reseau" ;;
2) menu_modules_by_prefix "containers" "Conteneurs" ;;
3) menu_modules_by_prefix "boot" "Configuration du boot" ;;
4) menu_modules_by_prefix "hardware" "Materiel" ;;
esac
}
menu_system_configuration() {
menu_modules_by_prefix "system" "Configuration systeme"
}
menu_tests() {
local selection=""
local modules=()
local module_id=""
local index=1
while true; do
ui_section "Tests"
printf ' 1. Smoke test\n'
printf ' 2. Tous les modules\n'
printf ' 3. Un module\n'
printf ' 0. Retour\n'
selection="$(prompt_select_number "Selectionner un test" 0 3)"
case "$selection" in
0)
return 0
;;
1)
test_runner_smoke
ui_pause
;;
2)
test_runner_all_modules
ui_pause
;;
3)
modules=()
index=1
while IFS= read -r module_id; do
[[ -n "$module_id" ]] || continue
modules+=("$module_id")
done < <(registry_list)
if [[ "${#modules[@]}" -eq 0 ]]; then
ui_warn "Aucun module disponible"
ui_pause
continue
fi
ui_section "Selection du module a tester"
for module_id in "${modules[@]}"; do
printf ' %d. %s\n' "$index" "$module_id"
index=$((index + 1))
done
printf ' 0. Retour\n'
selection="$(prompt_select_number "Selectionner un module" 0 "${#modules[@]}")"
if [[ "$selection" != "0" ]]; then
test_runner_module "${modules[$((selection - 1))]}"
ui_pause
fi
;;
esac
done
}
menu_main() {
local selection=""
while true; do
ui_menu \
"Menu principal" \
"1. Installation par categorie" \
"2. Installation par profil" \
"3. Installation par materiel" \
"4. Configuration systeme" \
"5. Tests" \
"0. Quitter"
ui_info "Modules detectes : $(registry_summary)"
ui_info "Log : $RUNTIME_LOG_FILE"
selection="$(prompt_select_number "Choisir une action" 0 5)"
case "$selection" in
0)
ui_info "Sortie du programme"
return 0
;;
1)
menu_category_selection
;;
3)
menu_modules_by_prefix "hardware" "Materiel"
;;
4)
menu_system_configuration
;;
5)
menu_tests
;;
*)
dispatcher_not_implemented "menu $selection"
ui_pause
;;
esac
done
}