#!/bin/bash : "${ENTRYPOINT_ROOT:="/docker"}" # shellcheck source=SCRIPTDIR/../helpers.sh source "${ENTRYPOINT_ROOT}/helpers.sh" entrypoint-set-script-name "$0" # Show [git diff] of templates being rendered (will help verify output) : "${ENTRYPOINT_SHOW_TEMPLATE_DIFF:=1}" # Directory where templates can be found : "${ENTRYPOINT_TEMPLATE_DIR:=/docker/templates/}" # Root path to write template template_files to (default is '', meaning it will be written to /) : "${ENTRYPOINT_TEMPLATE_OUTPUT_PREFIX:=}" declare template_file relative_template_file_path output_file_dir # load all dot-env config files load-config-files # export all dot-env variables so they are available in templating # # shellcheck disable=SC2068 export ${seen_dot_env_variables[@]} find "${ENTRYPOINT_TEMPLATE_DIR}" -follow -type f -print | while read -r template_file; do # Example: template_file=/docker/templates/usr/local/etc/php/php.ini # The file path without the template dir prefix ($ENTRYPOINT_TEMPLATE_DIR) # # Example: /usr/local/etc/php/php.ini relative_template_file_path="${template_file#"${ENTRYPOINT_TEMPLATE_DIR}"}" # Adds optional prefix to the output file path # # Example: /usr/local/etc/php/php.ini output_file_path="${ENTRYPOINT_TEMPLATE_OUTPUT_PREFIX}/${relative_template_file_path}" # Remove the file from the path # # Example: /usr/local/etc/php output_file_dir=$(dirname "${output_file_path}") # Ensure the output directory is writable if ! is-writable "${output_file_dir}"; then log-error-and-exit "${output_file_dir} is not writable" fi # Create the output directory if it doesn't exists ensure-directory-exists "${output_file_dir}" # Render the template log-info "Running [gomplate] on [${template_file}] --> [${output_file_path}]" gomplate <"${template_file}" >"${output_file_path}" # Show the diff from the envsubst command if is-true "${ENTRYPOINT_SHOW_TEMPLATE_DIFF}"; then git --no-pager diff --color=always "${template_file}" "${output_file_path}" || : # ignore diff exit code fi done