#!/usr/bin/env bash
set -euo >/dev/null 2>&1
extract_placeholders() {
local templatefile="$1"
local -a placeholders=($(grep -oE '<<[^>]+>>' "${templatefile}" | sort -u))
echo "${placeholders[@]}"
}
replace_placeholder() {
local placeholder="$1"
local destfile="$2"
local vars_arr_name=$3
local var_name=$(echo "${placeholder}" | sed -e 's/^<<//' -e 's/>>$//')
local arr_key_ref="${vars_arr_name}[${var_name}]"
local var_value="${!arr_key_ref:-}"
local os_type=${DEPLOY_VARS["OS_TYPE"]}
if [ "${os_type}" == "macos" ]; then
sed -i.bak "s|${placeholder}|${var_value}|g" "${destfile}"
rm -f "${destfile}.bak"
else
awk -v ph="${placeholder}" -v val="${var_value}" '
{ gsub(ph, val); print }
' "${destfile}" > "${destfile}.tmp" && mv -f "${destfile}.tmp" "${destfile}"
fi
}
generate_config_file() {
local templatefile=$1
local destfile=$2
local var_name=$3
if [ ! -f "${templatefile}" ]; then
error "Template file does not exist: ${templatefile}"
fi
info "Using template file: ${templatefile}"
local -a placeholders=($(extract_placeholders "${templatefile}"))
if [ ${#placeholders[@]} -eq 0 ]; then
warning "No <<variable_name>> format placeholders found in template file"
fi
exec_cmd "cp -f ${templatefile} ${destfile}"
info "Starting placeholder replacement..."
for placeholder in "${placeholders[@]}"; do
replace_placeholder "${placeholder}" "${destfile}" "${var_name}"
done
success "Generated config file: ${destfile}"
}
generate_nginx_file() {
local nginx_template_file=${CONFIG["NGINX_TEMPLATE_FILE"]}
local nginx_dir="${CONFIG["CONFIG_DIR"]}/.nginx-files"
local nginx_file="${nginx_dir}/nginx.conf.${DEPLOY_VARS["NAME_SUFFIX"]}"
exec_cmd "mkdir -p ${nginx_dir}"
generate_config_file ${nginx_template_file} ${nginx_file} "ALL_VARS"
}
generate_deepsearch_env_file() {
local db_type="${RUNTIME_VARS["DB_TYPE"]}"
case "${db_type}" in
mysql)
DEEPSERACH_ENV_VARS["DEEPSEARCH_DB_NAME"]="${DEPLOY_VARS["DEEPSEARCH_DB_NAME"]}"
;;
sqlite)
DEEPSERACH_ENV_VARS["SQLITE_DB_PATH"]="${RUNTIME_VARS["SQLITE_DB_PATH"]}"
DEEPSERACH_ENV_VARS["DEEPSEARCH_SQLITE_DB"]="${DEPLOY_VARS["DEEPSEARCH_SQLITE_DB"]}"
;;
esac
local env_file="${CONFIG["ENV_DIR"]}/env.deepsearch.${DEPLOY_VARS["NAME_SUFFIX"]}"
write_env_to_file "${env_file}" "DEEPSERACH_ENV_VARS"
}
generate_config_files() {
for key in "${!DEPLOY_VARS[@]}"; do
ALL_VARS["${key}"]="${DEPLOY_VARS[${key}]}"
done
for key in "${!RUNTIME_VARS[@]}"; do
ALL_VARS["${key}"]="${RUNTIME_VARS[${key}]}"
done
for module in "${ALL_MODULES[@]}"; do
if [ "${DEPLOY_VARS["HAS_${module}"]}" == "false" ]; then
continue
fi
case "${module}" in
JIUWEN)
generate_nginx_file
;;
DEEPSEARCH)
generate_deepsearch_env_file
;;
esac
local template_file=${COMPOSE_TEMPLATE_FILES["${module}"]}
local compose_file=${COMPOSE_FILES["${module}"]}
generate_config_file ${template_file} ${compose_file} "ALL_VARS"
done
}