diff --git a/Dockerfiles/prod/data/docker-entrypoint.d/311-project-startup-scripts.sh b/Dockerfiles/prod/data/docker-entrypoint.d/311-project-startup-scripts.sh new file mode 100644 index 00000000..217bea57 --- /dev/null +++ b/Dockerfiles/prod/data/docker-entrypoint.d/311-project-startup-scripts.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +set -e +set -u +set -o pipefail + +############################################################ +# Functions +############################################################ + +### +### Execute project-supplied scripts +### +execute_project_scripts() { + local debug="${1}" + local script_dir + local script_name + local DEVILBOX_PROJECT_DIR + local DEVILBOX_PROJECT_NAME + local DEVILBOX_PROJECT_DOCROOT + + for DEVILBOX_PROJECT_DIR in /shared/httpd/*; do + + script_dir=${DEVILBOX_PROJECT_DIR}/$(env_get HTTPD_TEMPLATE_DIR ".devilbox")/autostart + + if [ -d "${DEVILBOX_PROJECT_DIR}" ] && [ -d "${script_dir}" ]; then + + DEVILBOX_PROJECT_NAME=$(basename "${DEVILBOX_PROJECT_DIR}") + export DEVILBOX_PROJECT_NAME + + DEVILBOX_PROJECT_DOCROOT=${DEVILBOX_PROJECT_DIR}/$(env_get HTTPD_DOCROOT_DIR "htdocs") + export DEVILBOX_PROJECT_DOCROOT + + script_files="$(find -L "${script_dir}" -type f -iname '*.sh' | sort -n)" + + # loop over them line by line + IFS=' + ' + for script_f in ${script_files}; do + + script_name="$(basename "${script_f}")" + + log "info" "Executing project startup script: ${DEVILBOX_PROJECT_NAME}:${script_name}" "${debug}" + + if ! bash "${script_f}" "${debug}"; then + log "err" "Failed to execute script" "${debug}" + exit 1 + fi + + done + fi + done +} + +############################################################ +# Sanity Checks +############################################################ + +# find, sort, and basename are already checked in ./310-custom-startup-scripts.sh diff --git a/Dockerfiles/prod/data/docker-entrypoint.sh b/Dockerfiles/prod/data/docker-entrypoint.sh index fcd60c0a..4add9a3e 100755 --- a/Dockerfiles/prod/data/docker-entrypoint.sh +++ b/Dockerfiles/prod/data/docker-entrypoint.sh @@ -191,6 +191,12 @@ execute_custom_scripts "/startup.1.d" "${DEBUG_LEVEL}" execute_custom_scripts "/startup.2.d" "${DEBUG_LEVEL}" +### +### Run project supplied scripts +### +execute_project_scripts "${DEBUG_LEVEL}" + + ### ### Startup ###