#!/usr/bin/env bash _CTX_ROOT="$PROJECT_ROOT" _CTX_CONTAINER_ROOT="/app" _CTX_DXKIT="${_CTX_ROOT}/dxkit" _CTX_MODULES="${_CTX_DXKIT}/modules" _CTX_COMMANDS="${_CTX_DXKIT}/commands" _CTX_TEMPLATES="${_CTX_DXKIT}/templates" _CTX_ENV="${_CTX_DXKIT}/env" _CTX_PROJECT="${_CTX_ROOT}/.project" _CTX_ARTIFACT="${_CTX_PROJECT}/artifacts" # ============================================ # Wrappers # ============================================ function ctx::require() { local var="$1" [[ -z "${!var}" ]] && { echo "Missing required context variable: $var" >&2 return 1 } } # ============================================ # Static Context # ============================================ function ctx::root() { echo "$_CTX_ROOT"; } function ctx::dxkit() { echo "$_CTX_DXKIT"; } function ctx::modules() { echo "$_CTX_MODULES"; } function ctx::commands() { echo "$_CTX_COMMANDS"; } function ctx::templates() { echo "$_CTX_TEMPLATES"; } function ctx::env() { echo "$_CTX_ENV"; } function ctx::project() { echo "$_CTX_PROJECT"; } function ctx::artifact() { echo "$_CTX_ARTIFACT"; } function ctx::container::root() { echo $_CTX_CONTAINER_ROOT; } # ============================================ # Derived Context # ============================================ function ctx::runtime() { # ctx::require ENVIRONMENT || return 1 echo "$(ctx::artifact)/$ENVIRONMENT" } function ctx::docker() { echo "$(ctx::artifact)/docker" } # ============================================ # Path helpers # ============================================ function ctx::artifact::path() { local IFS="/" echo "$(ctx::artifact)/$*" } function ctx::container::path() { local base="$(ctx::container::root)" if [[ $# -eq 0 ]]; then echo "$base" return fi local IFS="/" echo "$base/$*" }