#!/usr/bin/env bash set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" AVAILABLE_PHASES=(build deploy run) fn-get-phase-file-path() { declare desc="return docker-options config file path for specified phase" local APP="$1" PHASE="$2" local PHASE_FILE="${DOKKU_ROOT}/${APP}/DOCKER_OPTIONS_${PHASE^^}" echo "$PHASE_FILE" } get_phase_file_path() { declare desc="return docker-options config file path for specified phase" local phase_file_prefix="DOCKER_OPTIONS_" local phase=$1 [[ "$APP" && "$phase" ]] || dokku_log_fail "Error: phase_file_path is incomplete." fn-get-phase-file-path "$APP" "$phase" } get_phases() { declare desc="returns array of passed passes if all are in allowed array" local passed_phases_list="$1" # shellcheck disable=SC2001 local -r phases_allowed=$(sed -e 's/ /\|/g' <<<"${AVAILABLE_PHASES[@]}") local phase local passed_phases if [[ -n "$passed_phases_list" ]]; then OIFS=$IFS IFS=',' read -ra passed_phases <<<"$passed_phases_list" IFS=$OIFS for phase in "${passed_phases[@]}"; do [[ "$phase" == @($phases_allowed) ]] || dokku_log_fail "Phase(s) must be one of [${AVAILABLE_PHASES[*]}]" done echo "${passed_phases[@]}" fi } create_phase_file_if_required() { declare desc="create phase file" local phase_file_path="$1" [[ -f "$phase_file_path" ]] || { touch "$phase_file_path" } } display_phase_options() { declare desc="print docker-options for specified phase" local phase="$1" local phase_file_path="$2" echo "${phase^} options:" sed -e 's/^/ /' "$phase_file_path" } display_all_phases_options() { declare desc="print docker-options for all phases" local phases=("${AVAILABLE_PHASES[@]}") for phase in "${phases[@]}"; do local phase_file_path="$(get_phase_file_path "$phase")" if [[ -s "$phase_file_path" ]]; then display_phase_options "$phase" "$phase_file_path" fi done } display_passed_phases_options() { declare desc="print docker options for list of specified phases" local passed_phases=("${!1}") local phase for phase in "${passed_phases[@]}"; do local phase_file_path="$(get_phase_file_path "$phase")" if [[ ! -s "$phase_file_path" ]]; then echo "${phase^} options: none" else display_phase_options "$phase" "$phase_file_path" fi done } add_passed_docker_option() { declare desc="adds docker option to specified phases" local passed_phases=("${!1}") shift local passed_option_string="$*" local phase for phase in "${passed_phases[@]}"; do local phase_file_path="$(get_phase_file_path "$phase")" create_phase_file_if_required "$phase_file_path" echo "${passed_option_string}" >>"$phase_file_path" local all_phase_options="$(<"$phase_file_path")" echo -e "${all_phase_options}" | sed '/^$/d' | sort -u >"$phase_file_path" done } remove_passed_docker_option() { declare desc="removes docker option from specified phases" local passed_phases=("${!1}") shift local passed_option_string="$*" local phase for phase in "${passed_phases[@]}"; do local phase_file_path="$(get_phase_file_path "$phase")" [[ ! -s "$phase_file_path" ]] || { local all_phase_options="$(<"$phase_file_path")" local all_phase_options=$(echo -e "${all_phase_options}" | sed "s#^${passed_option_string}\$##") echo -e "${all_phase_options}" | sed '/^$/d' | sort -u >"$phase_file_path" } done }