mirror of
https://github.com/frappe/frappe_docker.git
synced 2026-06-17 13:55:08 +00:00
fix(easy-docker): restore app selection mapping and parsing
This commit is contained in:
parent
6cd1723a40
commit
84ca792a23
4 changed files with 138 additions and 187 deletions
|
|
@ -230,216 +230,169 @@ get_predefined_apps_catalog_entries() {
|
|||
done <"${catalog_path}"
|
||||
}
|
||||
|
||||
get_predefined_app_labels_lines() {
|
||||
local entry=""
|
||||
local app_label=""
|
||||
parse_predefined_app_catalog_entry() {
|
||||
local entry="${1}"
|
||||
local app_id_var="${2}"
|
||||
local app_label_var="${3}"
|
||||
local app_repo_var="${4}"
|
||||
local app_default_branch_var="${5}"
|
||||
local app_branches_csv_var="${6}"
|
||||
local parsed_app_id=""
|
||||
local parsed_app_label=""
|
||||
local parsed_app_repo=""
|
||||
local parsed_app_default_branch=""
|
||||
local parsed_app_branches_csv=""
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
app_label="${entry#*|}"
|
||||
app_label="${app_label%%|*}"
|
||||
printf '%s\n' "${app_label}"
|
||||
done < <(get_predefined_apps_catalog_entries)
|
||||
IFS='|' read -r parsed_app_id parsed_app_label parsed_app_repo parsed_app_default_branch parsed_app_branches_csv <<<"${entry}"
|
||||
printf -v "${app_id_var}" "%s" "${parsed_app_id}"
|
||||
printf -v "${app_label_var}" "%s" "${parsed_app_label}"
|
||||
printf -v "${app_repo_var}" "%s" "${parsed_app_repo}"
|
||||
printf -v "${app_default_branch_var}" "%s" "${parsed_app_default_branch}"
|
||||
printf -v "${app_branches_csv_var}" "%s" "${parsed_app_branches_csv}"
|
||||
}
|
||||
|
||||
get_predefined_app_id_by_label() {
|
||||
local label="${1}"
|
||||
get_predefined_app_field_by_field() {
|
||||
local lookup_field="${1}"
|
||||
local lookup_value="${2}"
|
||||
local result_field="${3}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
local lookup_candidate=""
|
||||
local result_value=""
|
||||
|
||||
trim_predefined_catalog_field lookup_value "${lookup_value}"
|
||||
if [ -z "${lookup_value}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_label}" = "${label}" ]; then
|
||||
printf '%s\n' "${app_id}"
|
||||
return 0
|
||||
fi
|
||||
done < <(get_predefined_apps_catalog_entries)
|
||||
parse_predefined_app_catalog_entry "${entry}" app_id app_label app_repo app_default_branch app_branches_csv
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_predefined_app_repo_by_id() {
|
||||
local app_id_lookup="${1}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_id}" = "${app_id_lookup}" ]; then
|
||||
printf '%s\n' "${app_repo}"
|
||||
return 0
|
||||
fi
|
||||
done < <(get_predefined_apps_catalog_entries)
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_predefined_app_label_by_id() {
|
||||
local app_id_lookup="${1}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_id}" = "${app_id_lookup}" ]; then
|
||||
printf '%s\n' "${app_label}"
|
||||
return 0
|
||||
fi
|
||||
done < <(get_predefined_apps_catalog_entries)
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_predefined_app_default_branch_by_id() {
|
||||
local app_id_lookup="${1}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_id}" = "${app_id_lookup}" ]; then
|
||||
printf '%s\n' "${app_default_branch}"
|
||||
return 0
|
||||
fi
|
||||
done < <(get_predefined_apps_catalog_entries)
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_predefined_app_branch_lines_by_id() {
|
||||
local result_var="${1}"
|
||||
local app_id_lookup="${2}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
local branch=""
|
||||
local branch_lines=""
|
||||
local -a branches=()
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_id}" != "${app_id_lookup}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS=',' read -r -a branches <<<"${app_branches_csv}"
|
||||
for branch in "${branches[@]}"; do
|
||||
trim_predefined_catalog_field branch "${branch}"
|
||||
if [ -z "${branch}" ]; then
|
||||
continue
|
||||
fi
|
||||
if [ -z "${branch_lines}" ]; then
|
||||
branch_lines="${branch}"
|
||||
else
|
||||
branch_lines="${branch_lines}"$'\n'"${branch}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "${branch_lines}" ]; then
|
||||
case "${lookup_field}" in
|
||||
id)
|
||||
lookup_candidate="${app_id}"
|
||||
;;
|
||||
label)
|
||||
lookup_candidate="${app_label}"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
trim_predefined_catalog_field lookup_candidate "${lookup_candidate}"
|
||||
if [ "${lookup_candidate}" != "${lookup_value}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
printf -v "${result_var}" "%s" "${branch_lines}"
|
||||
case "${result_field}" in
|
||||
id)
|
||||
result_value="${app_id}"
|
||||
;;
|
||||
label)
|
||||
result_value="${app_label}"
|
||||
;;
|
||||
repo)
|
||||
result_value="${app_repo}"
|
||||
;;
|
||||
default_branch)
|
||||
result_value="${app_default_branch}"
|
||||
;;
|
||||
branches_csv)
|
||||
result_value="${app_branches_csv}"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
printf '%s\n' "${result_value}"
|
||||
return 0
|
||||
done < <(get_predefined_apps_catalog_entries)
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_predefined_app_id_by_label() {
|
||||
local label="${1}"
|
||||
get_predefined_app_field_by_field "label" "${label}" "id"
|
||||
}
|
||||
|
||||
get_predefined_app_repo_by_id() {
|
||||
local app_id_lookup="${1}"
|
||||
get_predefined_app_field_by_field "id" "${app_id_lookup}" "repo"
|
||||
}
|
||||
|
||||
get_predefined_app_label_by_id() {
|
||||
local app_id_lookup="${1}"
|
||||
get_predefined_app_field_by_field "id" "${app_id_lookup}" "label"
|
||||
}
|
||||
|
||||
get_predefined_app_default_branch_by_id() {
|
||||
local app_id_lookup="${1}"
|
||||
get_predefined_app_field_by_field "id" "${app_id_lookup}" "default_branch"
|
||||
}
|
||||
|
||||
get_predefined_app_branch_lines_by_id() {
|
||||
local result_var="${1}"
|
||||
local app_id_lookup="${2}"
|
||||
local app_branches_csv=""
|
||||
local branch=""
|
||||
local branch_lines=""
|
||||
local -a branches=()
|
||||
|
||||
app_branches_csv="$(get_predefined_app_field_by_field "id" "${app_id_lookup}" "branches_csv" || true)"
|
||||
if [ -z "${app_branches_csv}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
IFS=',' read -r -a branches <<<"${app_branches_csv}"
|
||||
for branch in "${branches[@]}"; do
|
||||
trim_predefined_catalog_field branch "${branch}"
|
||||
if [ -z "${branch}" ]; then
|
||||
continue
|
||||
fi
|
||||
if [ -z "${branch_lines}" ]; then
|
||||
branch_lines="${branch}"
|
||||
else
|
||||
branch_lines="${branch_lines}"$'\n'"${branch}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "${branch_lines}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
printf -v "${result_var}" "%s" "${branch_lines}"
|
||||
return 0
|
||||
}
|
||||
|
||||
predefined_app_catalog_has_id() {
|
||||
local app_id_lookup="${1}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
|
||||
if [ -z "${app_id_lookup}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_id}" = "${app_id_lookup}" ]; then
|
||||
return 0
|
||||
fi
|
||||
done < <(get_predefined_apps_catalog_entries || true)
|
||||
|
||||
return 1
|
||||
get_predefined_app_field_by_field "id" "${app_id_lookup}" "id" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
predefined_app_catalog_has_label() {
|
||||
local app_label_lookup="${1}"
|
||||
local entry=""
|
||||
local app_id=""
|
||||
local app_label=""
|
||||
local app_repo=""
|
||||
local app_default_branch=""
|
||||
local app_branches_csv=""
|
||||
|
||||
if [ -z "${app_label_lookup}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r entry; do
|
||||
if [ -z "${entry}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS='|' read -r app_id app_label app_repo app_default_branch app_branches_csv <<<"${entry}"
|
||||
if [ "${app_label}" = "${app_label_lookup}" ]; then
|
||||
return 0
|
||||
fi
|
||||
done < <(get_predefined_apps_catalog_entries || true)
|
||||
|
||||
return 1
|
||||
get_predefined_app_field_by_field "label" "${app_label_lookup}" "label" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
append_predefined_app_catalog_entry() {
|
||||
|
|
|
|||
|
|
@ -120,22 +120,6 @@ get_metadata_string_field() {
|
|||
' "${metadata_path}"
|
||||
}
|
||||
|
||||
get_metadata_number_field() {
|
||||
local metadata_path="${1}"
|
||||
local field_name="${2}"
|
||||
|
||||
if [ ! -f "${metadata_path}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
awk -v field_name="${field_name}" '
|
||||
match($0, "\"" field_name "\"[[:space:]]*:[[:space:]]*([0-9]+)", parts) {
|
||||
print parts[1]
|
||||
exit
|
||||
}
|
||||
' "${metadata_path}"
|
||||
}
|
||||
|
||||
get_env_file_key_value() {
|
||||
local env_file="${1}"
|
||||
local key="${2}"
|
||||
|
|
|
|||
|
|
@ -235,6 +235,7 @@ prompt_custom_modular_apps_data() {
|
|||
local options_lines=""
|
||||
local selected_labels_csv=""
|
||||
local selection_raw=""
|
||||
local selection_lines=""
|
||||
local prompt_status=0
|
||||
local selected_predefined_csv=""
|
||||
local parsed_predefined_csv=""
|
||||
|
|
@ -311,8 +312,12 @@ prompt_custom_modular_apps_data() {
|
|||
fi
|
||||
|
||||
parsed_predefined_csv=""
|
||||
# gum choose can return multiple values separated by newlines or commas
|
||||
# depending on version/configuration. Normalize to one label per line.
|
||||
selection_lines="$(printf '%s' "${selection_raw}" | tr ',' '\n')"
|
||||
|
||||
while IFS= read -r selected_label; do
|
||||
trim_predefined_catalog_field selected_label "${selected_label}"
|
||||
if [ -z "${selected_label}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
|
@ -323,7 +328,7 @@ prompt_custom_modular_apps_data() {
|
|||
fi
|
||||
append_csv_unique parsed_predefined_csv "${parsed_predefined_csv}" "${predefined_app_id}"
|
||||
done <<EOF
|
||||
${selection_raw}
|
||||
${selection_lines}
|
||||
EOF
|
||||
|
||||
selected_predefined_csv="${parsed_predefined_csv}"
|
||||
|
|
|
|||
|
|
@ -194,7 +194,9 @@ show_custom_modular_apps_multi_select() {
|
|||
local stack_name=""
|
||||
local status_text=""
|
||||
local option_line=""
|
||||
local selected_label=""
|
||||
local -a menu_options=()
|
||||
local -a selected_labels=()
|
||||
local -a gum_args=()
|
||||
|
||||
render_main_screen 1 >&2
|
||||
|
|
@ -224,7 +226,14 @@ EOF
|
|||
--selected.foreground 45
|
||||
)
|
||||
if [ -n "${selected_labels_csv}" ]; then
|
||||
gum_args+=(--selected "${selected_labels_csv}")
|
||||
IFS=',' read -r -a selected_labels <<<"${selected_labels_csv}"
|
||||
for selected_label in "${selected_labels[@]}"; do
|
||||
trim_predefined_catalog_field selected_label "${selected_label}"
|
||||
if [ -z "${selected_label}" ]; then
|
||||
continue
|
||||
fi
|
||||
gum_args+=(--selected "${selected_label}")
|
||||
done
|
||||
fi
|
||||
|
||||
gum choose "${gum_args[@]}" "${menu_options[@]}"
|
||||
|
|
|
|||
Loading…
Reference in a new issue