#!/usr/bin/env bash persist_stack_apps_json_content() { local stack_dir="${1}" local apps_json_content="${2}" local apps_json_path="" local apps_json_tmp_path="" apps_json_path="${stack_dir}/apps.json" apps_json_tmp_path="${apps_json_path}.tmp" if ! printf '%s\n' "${apps_json_content}" >"${apps_json_tmp_path}"; then rm -f -- "${apps_json_tmp_path}" >/dev/null 2>&1 || true return 1 fi if ! mv -- "${apps_json_tmp_path}" "${apps_json_path}"; then rm -f -- "${apps_json_tmp_path}" >/dev/null 2>&1 || true return 1 fi return 0 } get_metadata_apps_predefined_csv() { local metadata_path="${1}" if [ ! -f "${metadata_path}" ]; then return 1 fi if ! easy_docker_require_jq; then return 1 fi easy_docker_run_jq -r '(.apps.predefined // []) | join(",")' "${metadata_path}" } get_metadata_apps_custom_lines() { local metadata_path="${1}" if [ ! -f "${metadata_path}" ]; then return 1 fi if ! easy_docker_require_jq; then return 1 fi easy_docker_run_jq -r '(.apps.custom // [])[]? | select(has("repo") and has("branch")) | "\(.repo)|\(.branch)"' "${metadata_path}" } get_metadata_apps_predefined_branch_lines() { local metadata_path="${1}" if [ ! -f "${metadata_path}" ]; then return 1 fi if ! easy_docker_require_jq; then return 1 fi easy_docker_run_jq -r '(.apps.predefined_branches // {}) | to_entries[]? | "\(.key)|\(.value)"' "${metadata_path}" } get_metadata_apps_predefined_branch_for_id() { local metadata_path="${1}" local app_id_lookup="${2}" if [ ! -f "${metadata_path}" ]; then return 1 fi if ! easy_docker_require_jq; then return 1 fi # shellcheck disable=SC2016 easy_docker_run_jq -r --arg app_id "${app_id_lookup}" '.apps.predefined_branches[$app_id] // empty' "${metadata_path}" } build_metadata_apps_json_object() { local result_var="${1}" local predefined_csv="${2}" local branch_lines="${3}" local custom_apps_lines="${4:-}" local app_id="" local app_branch="" local custom_repo="" local custom_branch="" local predefined_json_entries="" local branch_json_entries="" local custom_json_entries="" local escaped_app_id="" local escaped_branch="" local escaped_repo="" local entry_json="" local line="" local -a predefined_ids=() if [ -n "${predefined_csv}" ]; then IFS=',' read -r -a predefined_ids <<<"${predefined_csv}" for app_id in "${predefined_ids[@]}"; do if [ -z "${app_id}" ]; then continue fi escaped_app_id="$(json_escape_string "${app_id}")" entry_json="$(printf ' "%s"' "${escaped_app_id}")" if [ -z "${predefined_json_entries}" ]; then predefined_json_entries="${entry_json}" else predefined_json_entries="${predefined_json_entries}"$',\n'"${entry_json}" fi done fi while IFS= read -r line; do if [ -z "${line}" ]; then continue fi app_id="${line%%|*}" app_branch="${line#*|}" if [ -z "${app_id}" ] || [ -z "${app_branch}" ]; then continue fi escaped_app_id="$(json_escape_string "${app_id}")" escaped_branch="$(json_escape_string "${app_branch}")" entry_json="$(printf ' "%s": "%s"' "${escaped_app_id}" "${escaped_branch}")" if [ -z "${branch_json_entries}" ]; then branch_json_entries="${entry_json}" else branch_json_entries="${branch_json_entries}"$',\n'"${entry_json}" fi done <