#!/usr/bin/env bash function env::on_load() { env::defaults env::load_globals } function env::artifact::path() { path::relative_to_root "$(ctx::artifact::path env)"; } function env::artifact::resolved() { path::relative_to_root "$(ctx::artifact::path env)/${ENVIRONMENT}.resolved.env"; } function env::project::name() { echo "${PROJECT_NAME}"; } # ============================================ # Defaults # ============================================ function env::defaults() { : "${PROJECT_NAME:=$(basename "$(ctx::root)")}" : "${APP_FRAMEWORK:=yii2-advanced}" : "${APP_PORT:=auto:8080}" : "${TLD:="lan"}" : "${DB_DRIVER:=db}" : "${DB_IMAGE:=mariadb:latest}" : "${DB_ENGINE:=mysql}" : "${DB_PORT:=auto}" : "${PROXY_SERVICE:=traefik}" : "${PROXY_NETWORK:=proxy}" # Environment : "${ENVIRONMENT:=dev}" } function env::defaults::derived() { APP_IMAGE="${APP_IMAGE:-${PROJECT_NAME}-app}" DB_NAME="${DB_NAME:-${PROJECT_NAME}}" DB_HOST="${DB_HOST:-${PROJECT_NAME}-${DB_DRIVER}}" DOMAIN="${DOMAIN:-${PROJECT_NAME}.${TLD}}" BACKEND_DOMAIN="${BACKEND_DOMAIN:-admin.${DOMAIN}}" } # ============================================ function env::load_globals() { load_file required "$(ctx::env)/globals.env"; env::defaults::derived } function env::load_environment() { load_file optional "$(ctx::artifact::path env)/${ENVIRONMENT}.env" env::defaults::derived } function env::load_environment_resolved() { load_file optional "$(env::artifact::resolved)" } function env::load_env_files() { set -a env::load_globals || { set +a; exit 1; } env::load_environment env::load_environment_resolved set +a } function env::set_env_var() { local key="$1" local value="$2" local file="${3:-$(ctx::artifact::path env)/${ENVIRONMENT}.env}" touch "$file" if grep -q "^${key}=" "$file"; then fs::sed_inplace "s/^${key}=.*/${key}=${value}/" "$file" else printf "\n%s=%s" "$key" "$value" >> "$file" fi } # ============================================ # Derived # ============================================ function env::derive() { APP_IMAGE="${PROJECT_NAME}-app" DOMAIN="${PROJECT_NAME}.${TLD}" BACKEND_DOMAIN="admin-${PROJECT_NAME}.${TLD}" DB_HOST="${PROJECT_NAME}-db" DB_NAME="${PROJECT_NAME}" export APP_IMAGE DOMAIN BACKEND_DOMAIN DB_HOST DB_NAME }