mirror of
https://github.com/frappe/frappe_docker.git
synced 2026-06-17 13:55:08 +00:00
153 lines
3.7 KiB
Bash
Executable file
153 lines
3.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
list_existing_stack_names() {
|
|
local setup_type_filter="${1:-}"
|
|
local stacks_dir=""
|
|
local stack_dir=""
|
|
local metadata_path=""
|
|
local stack_name=""
|
|
local stack_setup_type=""
|
|
|
|
stacks_dir="$(get_easy_docker_stacks_dir)"
|
|
if [ ! -d "${stacks_dir}" ]; then
|
|
return 0
|
|
fi
|
|
|
|
for stack_dir in "${stacks_dir}"/*; do
|
|
if [ ! -d "${stack_dir}" ]; then
|
|
continue
|
|
fi
|
|
|
|
metadata_path="${stack_dir}/metadata.json"
|
|
if [ ! -f "${metadata_path}" ]; then
|
|
continue
|
|
fi
|
|
|
|
stack_name="$(get_metadata_string_field "${metadata_path}" "stack_name" || true)"
|
|
if [ -z "${stack_name}" ]; then
|
|
continue
|
|
fi
|
|
|
|
stack_setup_type="$(get_metadata_string_field "${metadata_path}" "setup_type" || true)"
|
|
if [ -z "${stack_setup_type}" ]; then
|
|
stack_setup_type="production"
|
|
fi
|
|
|
|
case "${setup_type_filter}" in
|
|
"" | all) ;;
|
|
*)
|
|
if [ "${stack_setup_type}" != "${setup_type_filter}" ]; then
|
|
continue
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
printf '%s\n' "${stack_name}"
|
|
done | sort
|
|
}
|
|
|
|
stack_name_in_array() {
|
|
local stack_name="${1}"
|
|
shift
|
|
local candidate=""
|
|
|
|
for candidate in "$@"; do
|
|
if [ "${candidate}" = "${stack_name}" ]; then
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
prompt_stack_name_with_cancel() {
|
|
local result_var="${1}"
|
|
local input_value=""
|
|
local input_status=0
|
|
|
|
input_value="$(prompt_new_stack_name)"
|
|
input_status=$?
|
|
if [ "${input_status}" -ne 0 ]; then
|
|
return "${FLOW_ABORT_INPUT}"
|
|
fi
|
|
|
|
input_value="$(printf '%s' "${input_value}" | tr -d '\r\n')"
|
|
|
|
case "${input_value}" in
|
|
/cancel | /CANCEL | /Cancel)
|
|
return "${FLOW_ABORT_INPUT}"
|
|
;;
|
|
esac
|
|
|
|
printf -v "${result_var}" "%s" "${input_value}"
|
|
return "${FLOW_CONTINUE}"
|
|
}
|
|
|
|
prompt_frappe_branch_with_cancel() {
|
|
local result_var="${1}"
|
|
local stack_name="${2}"
|
|
local options_lines=""
|
|
local selection=""
|
|
local selection_status=0
|
|
local selected_label=""
|
|
local selected_branch=""
|
|
local default_branch=""
|
|
local default_label=""
|
|
local version_entry=""
|
|
local version_id=""
|
|
local version_label=""
|
|
local version_branch=""
|
|
local -a version_entries=()
|
|
|
|
mapfile -t version_entries < <(get_frappe_versions_catalog_entries || true)
|
|
for version_entry in "${version_entries[@]}"; do
|
|
IFS='|' read -r version_id version_label version_branch <<<"${version_entry}"
|
|
if [ -z "${version_id}" ] || [ -z "${version_label}" ] || [ -z "${version_branch}" ]; then
|
|
continue
|
|
fi
|
|
|
|
if [ -z "${options_lines}" ]; then
|
|
options_lines="${version_label}"
|
|
else
|
|
options_lines="$(printf '%s\n%s' "${options_lines}" "${version_label}")"
|
|
fi
|
|
done
|
|
|
|
if [ -z "${options_lines}" ]; then
|
|
show_warning_and_wait "No Frappe version profiles available in scripts/easy-docker/config/frappe.tsv." 3
|
|
return 1
|
|
fi
|
|
|
|
default_branch="$(get_default_frappe_branch || true)"
|
|
default_label="$(get_frappe_version_label_by_branch "${default_branch}" || true)"
|
|
|
|
selection="$(show_frappe_version_profile_menu "${stack_name}" "${options_lines}" "${default_label}")"
|
|
selection_status=$?
|
|
if [ "${selection_status}" -ne 0 ]; then
|
|
return "${FLOW_ABORT_INPUT}"
|
|
fi
|
|
|
|
selected_label="$(printf '%s' "${selection}" | tr -d '\r\n')"
|
|
case "${selected_label}" in
|
|
"" | "Back")
|
|
return "${FLOW_ABORT_INPUT}"
|
|
;;
|
|
esac
|
|
|
|
selected_branch="$(get_frappe_version_branch_by_label "${selected_label}" || true)"
|
|
if [ -z "${selected_branch}" ]; then
|
|
show_warning_and_wait "Could not resolve branch for selected profile: ${selected_label}" 2
|
|
return 1
|
|
fi
|
|
|
|
printf -v "${result_var}" "%s" "${selected_branch}"
|
|
return "${FLOW_CONTINUE}"
|
|
}
|
|
|
|
show_warning_and_wait() {
|
|
local message="${1}"
|
|
local seconds="${2:-1}"
|
|
|
|
show_warning_message "${message}"
|
|
sleep "${seconds}"
|
|
}
|